Skip to main content
Glama

Simulate a year of spending

simulate_spending
Read-only

Spends monthly amounts for a year across every card earnrate knows, and ranks single cards and two-card pairs by rewards minus annual fees. Spending is optional: without it, typical U.S. household amounts are used and the answer says so. With cards (named in the conversation) or compareToWallet (the saved wallet), it ranks the cards that would add the most to those cards instead. Use it for "which card fits my spending?" or "is it worth adding a card?". It leaves out welcome bonuses.

Input Schema

NameRequiredDescriptionDefault
kindNocash: cash back cards only. points: points and miles cards only.
cardsNoCards the user named in this conversation, to answer for just those cards without saving anything. Leave out to use the user's saved wallet if they have one; with neither, the answer covers every card earnrate knows.
issuerNoOnly this issuer's cards.
businessNoBusiness cards instead of personal ones.
spendingNoMonthly spending lines, each a category (grocery.supermarket, dining, gas, other) or a merchant (Amazon, Costco). Optional: leave out to use typical amounts, and don't press the user for numbers they haven't offered.
valuationNoflat (default): points at their cash-out value, about 1¢. points-heavy: Amex MR and Chase UR at 1.7¢, for people who transfer points to airlines and hotels.
membershipsNoMemberships the user has, such as amazon-prime. Rates that need one they don't have are listed separately.
noAnnualFeeNoOnly cards with no annual fee.
compareToWalletNoRank the cards that would add the most to the user's saved wallet.

Output Schema

NameRequiredDescriptionDefault
notesYes
pairsYes
currentYes
singlesYes
additionsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / spending / items / properties / category / description
      Previous value: -"A spending category: dining (Restaurants), dining.fast_food (Fast food), grocery (Grocery), grocery.supermarket (Supermarkets), grocery.online (Online grocery and delivery), superstore (Superstores), warehouse_club (Warehouse clubs), convenience_store (Convenience stores), gas (Gas stations), gas.grocery_store (Gas at grocery stores), gas.superstore (Gas at superstores and warehouse clubs), ev_charging (EV charging), transit (Transit), transit.rideshare (Rideshare and taxis), travel (Travel), travel.flights (Flights), travel.hotels (Hotels), travel.car_rental (Car rental), travel.cruise (Cruises), streaming (Streaming services), tv_internet (TV and internet service), phone (Cell phone service), utilities (Home utilities), drugstore (Drugstores and pharmacies), movie_theaters (Movie theaters), entertainment (Live entertainment and events), fitness (Gyms and fitness), department_store (Department stores), clothing (Clothing stores), electronics (Electronics stores), sporting_goods (Sporting goods stores), home_improvement (Home improvement), furniture (Furniture stores), online_retail (Online retail), office_supply (Office supply stores), shipping (Shipping and couriers), online_advertising (Social media and search advertising), other (Everything else)."New value: +"A spending category: dining (Restaurants), dining.fast_food (Fast food), grocery.supermarket (Supermarkets), grocery.online (Online grocery and delivery), superstore (Superstores), warehouse_club (Warehouse clubs), convenience_store (Convenience stores), gas (Gas stations), gas.grocery_store (Gas at grocery stores), gas.superstore (Gas at superstores and warehouse clubs), ev_charging (EV charging), transit (Transit), transit.rideshare (Rideshare and taxis), travel (Travel), travel.flights (Flights), travel.hotels (Hotels), travel.car_rental (Car rental), travel.cruise (Cruises), streaming (Streaming services), tv_internet (TV and internet service), phone (Cell phone service), utilities (Home utilities), drugstore (Drugstores and pharmacies), movie_theaters (Movie theaters), entertainment (Live entertainment and events), fitness (Gyms and fitness), department_store (Department stores), clothing (Clothing stores), electronics (Electronics stores), sporting_goods (Sporting goods stores), home_improvement (Home improvement), furniture (Furniture stores), online_retail (Online retail), office_supply (Office supply stores), shipping (Shipping and couriers), online_advertising (Social media and search advertising), other (Everything else)."
    • changedInput schema / properties / spending / items / properties / category / enum
      Previous value: -[
      -  "dining",
      -  "dining.fast_food",
      -  "grocery",
      -  "grocery.supermarket",
      -  "grocery.online",
      -  "superstore",
      -  "warehouse_club",
      -  "convenience_store",
      -  "gas",
      -  "gas.grocery_store",
      -  "gas.superstore",
      -  "ev_charging",
      -  "transit",
      -  "transit.rideshare",
      -  "travel",
      -  "travel.flights",
      -  "travel.hotels",
      -  "travel.car_rental",
      -  "travel.cruise",
      -  "streaming",
      -  "tv_internet",
      -  "phone",
      -  "utilities",
      -  "drugstore",
      -  "movie_theaters",
      -  "entertainment",
      -  "fitness",
      -  "department_store",
      -  "clothing",
      -  "electronics",
      -  "sporting_goods",
      -  "home_improvement",
      -  "furniture",
      -  "online_retail",
      -  "office_supply",
      -  "shipping",
      -  "online_advertising",
      -  "other"
      -]New value: +[
      +  "dining",
      +  "dining.fast_food",
      +  "grocery.supermarket",
      +  "grocery.online",
      +  "superstore",
      +  "warehouse_club",
      +  "convenience_store",
      +  "gas",
      +  "gas.grocery_store",
      +  "gas.superstore",
      +  "ev_charging",
      +  "transit",
      +  "transit.rideshare",
      +  "travel",
      +  "travel.flights",
      +  "travel.hotels",
      +  "travel.car_rental",
      +  "travel.cruise",
      +  "streaming",
      +  "tv_internet",
      +  "phone",
      +  "utilities",
      +  "drugstore",
      +  "movie_theaters",
      +  "entertainment",
      +  "fitness",
      +  "department_store",
      +  "clothing",
      +  "electronics",
      +  "sporting_goods",
      +  "home_improvement",
      +  "furniture",
      +  "online_retail",
      +  "office_supply",
      +  "shipping",
      +  "online_advertising",
      +  "other"
      +]
  2. First observed

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds real behavioral facts: the default falls back to typical U.S. household amounts and 'the answer says so', and welcome bonuses are excluded from the ranking. It stops short of disclosing cost/latency of simulating every card for a year, which is the main practical caveat for an exhaustive sweep.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six sentences, front-loaded with the core action and ranking logic, then the mode branches and the bonus exclusion. Dense and purposeful, though the optional-spending note is stated twice (in the description and again in the `spending` schema), which is slightly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and annotations cover the read-only profile; the description covers all three input modes and the default behavior. Only gap is no hint about result volume or the cost of the exhaustive all-cards sweep, which matters for a 9-parameter simulation over every card.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the enum meanings for `kind`, `valuation`, and every spending category, so the schema carries the semantic load. The description reinforces `cards` (cards named in conversation, nothing saved) and `compareToWallet` (saved wallet), but adds no syntax or edge-case detail beyond what the schema already documents. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource ('spends monthly amounts for a year across every card') plus the ranking method ('rewards minus annual fees'), and it explicitly says both single cards and two-card pairs are ranked. That output shape distinguishes it from point-purchase siblings like best_card_for_purchase and best_cards_for without needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete when-to-use phrasing ('which card fits my spending?' / 'is it worth adding a card?'), describes the three input modes (default typical amounts, named `cards`, `compareToWallet` against the saved wallet) and states what each does. It also names an exclusion — 'It leaves out welcome bonuses' — which routes the agent away from this tool for bonus questions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.