> Fetch https://askmiles.ai/llms.txt first: it indexes every public Miles capability. This file is the markdown twin of https://askmiles.ai/docs/mcp/tools.

# All MCP tools

Every MCP tool Miles exposes, grouped by domain, on one page — the fetch an agent makes instead of nine.

## Cards

### get_best_card

Best card in the user's wallet for a spending category (dining, groceries, gas, travel, rent, ...) or a specific merchant -- pass at least one of `category` or `merchant`; `amount` (dollars) is optional.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `category` | `string` |  |
| `merchant` | `string` |  |
| `amount` | `number` |  |

### get_card_info

Full details for a credit card PRODUCT: fees, earning rates, credits, benefits, transfer partners, sign-up bonus.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `card_name` | `string` |  |
| `wallet_id` | `string` |  |

### get_product_changes

Upgrade and downgrade paths for a wallet card -- the natural next question after `analyze_keep_cancel`. Wallet-aware: results reflect which products you already hold.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `card_name` | `string` | required |

### get_top_offers

Current top sign-up bonuses, optionally filtered by card type (personal/business) — first-year value ranked.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `card_type` | `string` |  |
| `member` | `string` |  |

### get_wallet_complement

Recommends NEW cards to get -- fills gaps in the wallet, not a keep/cancel review of cards already held. Finds orphaned points needing a companion card, weak spending categories, missing transfer ecosystems, and network gaps, then ranks up to 5 candidate cards with gap-fill reasons, ongoing value, and sign-up bonus. Each recommendation carries inline eligibility annotations (5/24, 6/24, Amex velocity limits) and portfolio rules (e.g. one Sapphire product at a time); results are filtered to the wallet's card type (personal/business) automatically.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `focus` | `string` |  |
| `card_name` | `string` |  |
| `check_eligibility` | `boolean` |  |
| `member` | `string` |  |
| `preferred_programs` | `string[]` |  |

### search_cards

Search the 180+ card dataset by issuer, fees, rewards program, airline/hotel affiliation, or bonus spending categories.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `spending_categories` | `string[]` |  |
| `issuer` | `string` |  |
| `card_type` | `string` |  |
| `max_annual_fee` | `integer` |  |
| `rewards_program` | `string` |  |
| `airline` | `string` |  |
| `hotel` | `string` |  |
| `has_signup_bonus` | `boolean` |  |
| `limit` | `integer` |  |
| `member` | `string` |  |

## Transfer partners

### compare_transfer_options

What a balance of `points` is worth across transfer paths, with the arithmetic shown -- the points-quantity question, distinct from `get_transfer_partners` (which lists WHICH paths exist, not what YOUR points are worth). Call `program` only (from), `target` only (to), or both (one specific path, e.g. 60k UR → Hyatt).

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `points` | `integer` | required |
| `program` | `string` |  |
| `target` | `string` |  |

### get_transfer_partners

Transfer partner lookup. mode='from_program' lists where a currency (e.g. 'Chase Ultimate Rewards') transfers; 'to_program' lists which currencies reach a destination (e.g. 'World of Hyatt'); 'auto' infers.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `query` | `string` | required |
| `mode` | `string` |  |

### get_valuations

Point valuations (cents per point) — the user's custom values when set, defaults otherwise.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `programs` | `string[]` |  |

### plan_transfer

"I need N points at program X -- which of my HELD currencies gets me there cheapest?" The advisor flagship: ranks the loyalty currencies you've told Miles you hold (`get_balances`) by cheapest path to `target_program` -- transfer graph x ratios x active bonuses x transfer minimums/increments x your own valuations -- including two-currency split suggestions and "you hold it but not enough" rows. Deterministic, receipt-style, built on the same functions `compare_transfer_options` uses, so the two tools cannot disagree about a shared leg.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `target_program` | `string` | required |
| `points_needed` | `integer` | required |

### portfolio_review

"Here are my balances -- where should I focus?" Ranks every loyalty currency the member has told Miles they hold against a redemption goal, and says which one to focus on, which to stop growing, and why.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `goal` | `string` |  |
| `cardholder` | `string` |  |

### reset_valuation

Reset a custom valuation back to the Ask Miles default. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `point_type` | `string` | required |

### set_valuation

Set the user's custom point/mile valuations (cents per point). Pass `valuations` to set several at once. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `point_type` | `string` |  |
| `valuation` | `number` |  |
| `valuations` | `object` |  |

## Wallet

### add_card

Add one credit card, or a BATCH of them, to the user's wallet. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `card_name` | `string` |  |
| `nickname` | `string` |  |
| `date_opened` | `string` |  |
| `anniversary_date` | `string` |  |
| `sign_up_bonus` | `string` |  |
| `signup_bonus_status` | `string` |  |
| `signup_bonus_received_on` | `string` |  |
| `sub_deadline` | `string` |  |
| `sub_target` | `number` |  |
| `notes` | `string` |  |
| `status` | `string` |  |
| `closed_on` | `string` |  |
| `autopay_status` | `string` |  |
| `retention_offers` | `object[]` |  |
| `card_settings` | `object` |  |
| `benefit_selections` | `object` |  |
| `original_card_name` | `string` |  |
| `product_history` | `object[]` |  |
| `cardholder` | `string` |  |
| `holder_type` | `string` |  |
| `card_number_last4` | `string` |  |
| `intentional_duplicate` | `boolean` |  |
| `entry_key` | `string` |  |
| `cards` | `object[]` |  |

### analyze_keep_cancel

Keep/downgrade/cancel analysis for a wallet card: marginal value vs annual fee, duplicate-benefit discounting, downgrade paths.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `card_name` | `string` | required |

### analyze_spending

Earning-potential analysis for a spending profile: for each category, the wallet's best card and the annual rewards value it produces -- pre-computed dollar figures, not estimates to redo.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `spending` | `object` | required |
| `candidate_cards` | `string[]` |  |
| `international` | `boolean` |  |

### get_eligibility

Application-rule status (Chase 5/24, issuer velocity limits) based on the user's wallet card-open dates.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `issuer` | `string` |  |
| `card` | `string` |  |
| `member` | `string` |  |

### get_needs_attention

Everything that needs eyes on it right now -- in the wallet, and on the cards the user is only considering.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `credit_window_days` | `integer` |  |
| `fee_window_days` | `integer` |  |
| `sub_window_days` | `integer` |  |

### get_spending_strategy

Category-by-category map of which wallet card to use for every spending type.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

No parameters.

### get_travel_day_summary

A wallet-derived travel-day checklist: lounge access, checked-bag waivers, priority boarding, and other day-of-travel benefits your cards carry -- filtered to what actually applies on this trip. `get_wallet_benefits` filtering cannot substitute: a benefit that applies only "on this airline" or "on international travel" needs both pieces of context at once, which this tool supplies and a flat benefit list does not. `airline`: optional carrier to filter to. `international`: whether this is an international itinerary.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `airline` | `string` |  |
| `international` | `boolean` |  |

### get_wallet_benefits

Credits and perks across the user's wallet (lounge access, travel credits, statement credits, protections).

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `benefit_type` | `string` |  |
| `cardholder` | `string` |  |

### get_wallet_cards

The wallet's cards, one per row -- the lean per-card reader. `get_wallet_summary` / `get_wallet_benefits` are whole-wallet; use this for "what X cards do I have" or a per-card field scan.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `issuer` | `string` |  |
| `rewards_category` | `string` |  |
| `format` | `string` |  |
| `include_closed` | `boolean` |  |
| `cardholder` | `string` |  |

### get_wallet_summary

The user's wallet: cards with fees, credits, and key benefits.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `cardholder` | `string` |  |

### get_weekly_update

What changed in points and miles recently -- the digest as pull: a scheduled agent can poll this instead of waiting on the email digest. Local reads only (indexed article dates, a changelog artifact, in-memory dataset) -- no paid vendor, no query embedding, no Miles token spend.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `days` | `integer` |  |
| `categories` | `string[]` |  |

### remove_card

Remove a card from the user's wallet. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `lookup_card_name` | `string` |  |
| `card_id` | `string` |  |

### update_card

Update a card in the user's wallet (nickname, status, notes, dates, or a product change). Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `lookup_card_name` | `string` |  |
| `card_id` | `string` |  |
| `nickname` | `string` |  |
| `date_opened` | `string` |  |
| `anniversary_date` | `string` |  |
| `sign_up_bonus` | `string` |  |
| `signup_bonus_status` | `string` |  |
| `signup_bonus_received_on` | `string` |  |
| `sub_deadline` | `string` |  |
| `sub_target` | `number` |  |
| `notes` | `string` |  |
| `status` | `string` |  |
| `closed_on` | `string` |  |
| `autopay_status` | `string` |  |
| `disposition` | `string` |  |
| `review_by` | `string` |  |
| `fee_posts_on` | `string` |  |
| `retention_offers` | `object[]` |  |
| `card_settings` | `object` |  |
| `benefit_selections` | `object` |  |
| `original_card_name` | `string` |  |
| `product_history` | `object[]` |  |
| `cardholder` | `string` |  |
| `holder_type` | `string` |  |
| `card_number_last4` | `string` |  |
| `product_change` | `boolean` |  |
| `new_card_name` | `string` |  |
| `changed_date` | `string` |  |
| `direction` | `string` |  |
| `product_change_note` | `string` |  |
| `new_anniversary_date` | `string` |  |
| `expected_updated_at` | `string` |  |

## Balances

### get_balances

The loyalty-point balances the user has told Miles about -- Ultimate Rewards, Membership Rewards, airline and hotel currencies. Read-only: writing a balance (`set_balances`) is chat-only for now.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `programs` | `string[]` |  |

### get_reconciliation_needs

QUESTIONS, not assertions, about the wallet that transaction data could answer -- the division of labor with a transactions agent (Copilot Money's MCP or similar): Miles knows what a transaction would MEAN; the agent knows where transactions ARE. Miles never sees spending, so it cannot confirm anything here itself.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

No parameters.

## Credits and certificates

### get_certificates

Companion certificates and lounge-pass bundles across the wallet -- what's pending, available, used, or expired, plus an estimated total value. The quantity-aware sibling of `get_free_nights` (a lounge-pass bundle grants more than one use; a companion fare does not).

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `status` | `string` |  |
| `program` | `string` |  |

### get_credit_usage

Which of the wallet's recurring card credits are still unused this period -- the read half of the reconciliation loop `get_reconciliation_needs` opens.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `card_name` | `string` |  |
| `only_unused` | `boolean` |  |

### get_free_nights

Free-night hotel certificates across the wallet (Marriott/Hilton/ Hyatt/IHG-style annual and spend-triggered certs): status (available/pending/used/expired/may_have_expired/unconfirmed), estimated expiry, and estimated value.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `status` | `string` |  |
| `program` | `string` |  |

### set_certificate_status

Record a companion certificate or lounge-pass bundle's status. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `card_id` | `string` | required |
| `cert_id` | `string` | required |
| `status` | `string` | required |
| `count` | `integer` |  |
| `expected_used_count` | `integer` |  |
| `used_on` | `string` |  |
| `source` | `string` |  |

### set_credit_usage

Record which recurring card credits were used, for a batch of periods -- the write half of the reconciliation loop `get_reconciliation_needs` opens. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `entries` | `object[]` | required |

### set_free_night_status

Record a free-night certificate as used, or confirm a pending spend-threshold certificate was earned. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `card_name` | `string` |  |
| `status` | `string` |  |
| `cert_id` | `string` |  |
| `used_on` | `string` |  |
| `card_id` | `string` |  |
| `source` | `string` |  |

## Gift cards

### add_gift_card

Save a gift card to the member's wallet. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `merchant` | `string` | required |
| `amount` | `number` |  |
| `expiration` | `string` |  |
| `card_number_last4` | `string` |  |
| `notes` | `string` |  |

### get_gift_cards

The wallet's stored gift cards: merchant, balance, and expiration only.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

No parameters.

### remove_gift_card

Delete a gift card from the wallet -- a spent card, or one saved by mistake. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `lookup_merchant` | `string` |  |
| `card_id` | `string` |  |

### update_gift_card

Change a gift card already in the wallet -- most often its balance after the member spends some of it. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `lookup_merchant` | `string` |  |
| `card_id` | `string` |  |
| `merchant` | `string` |  |
| `amount` | `number` |  |
| `expiration` | `string` |  |
| `card_number_last4` | `string` |  |
| `notes` | `string` |  |

## Elite status

### get_elite_status

The airline/hotel elite status the user has told Miles about -- program, tier, when they said it, and whether Miles recognizes the pair. This is SELF-REPORTED status the member holds; it is not the status a credit card confers (get_wallet_benefits owns that).

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

No parameters.

### get_status_benefits

What an airline/hotel elite TIER grants -- checked bags, lounge access, upgrades, breakfast, late checkout, points bonus, and an estimated annual value. Reference data about the program; it reads nothing about the member (`get_elite_status` is what they hold).

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `program` | `string` | required |
| `tier` | `string` |  |

### remove_elite_status

Forget a stored elite status -- the member lost it, never had it, or it was recorded against the wrong program. Requires wallet-change access. Removes every stored spelling of the program.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `program` | `string` | required |

### set_elite_status

Record elite status the member says they hold. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `program` | `string` | required |
| `tier` | `string` | required |

## Watchlist

### add_to_watchlist

Add a card to the member's watchlist -- considering it, not yet applied for. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `card_name` | `string` | required |
| `cardholder` | `string` |  |
| `notes` | `string` |  |

### get_watchlist

Cards the member is considering -- not yet in their wallet.

| Scope | Quota |
| --- | --- |
| `miles:read` | standard |

No parameters.

### remove_from_watchlist

Remove a card from the member's watchlist. Requires wallet-change access. Use lookup_card_name to identify the entry by name; if multiple entries match, use entry_id on retry.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `lookup_card_name` | `string` |  |
| `entry_id` | `string` |  |

### update_watchlist_entry

Edit a watched card's cardholder, its notes, the date the member means to decide by, or any combination. Requires wallet-change access.

| Scope | Quota |
| --- | --- |
| `miles:write` | standard |

| Name | Type | Required |
| --- | --- | --- |
| `cardholder` | `string` |  |
| `notes` | `string` |  |
| `decide_by` | `string` |  |
| `lookup_card_name` | `string` |  |
| `entry_id` | `string` |  |

## Knowledge

### knowledge_search

Retrieval over indexed points-and-miles articles, guides and reviews -- reach for this when a question needs explanation or strategy that Miles' structured tools don't cover: how a transfer bonus mechanic actually works, what changed about a lounge network, how to think through a redemption trade-off. If the answer is a fact about the member's own wallet or the card dataset -- current benefits, transfer ratios, eligibility -- use the structured tool for it instead (`get_card_info`, `get_transfer_partners`, `get_wallet_summary`); those cost nothing beyond the shared per-day ceiling and are exact, and this tool is not a substitute for them.

| Scope | Quota |
| --- | --- |
| `miles:read` | expensive |

| Name | Type | Required |
| --- | --- | --- |
| `query` | `string` | required |
