Skip to main content
Glama

Annual cost

annual_cost
Read-onlyIdempotent

Project the cumulative cost of a fee list over 1-30 years by straight multiplication of each recurring fee's annualized amount, with one-time fees counted once (no compounding or inflation), with a per-fee breakdown. Use for 'what will these cost me over N years'. It does not flag fees: use audit_fees to find problem charges, benchmark_fees for typical ranges.

Input Schema

NameRequiredDescriptionDefault
feesYesNon-empty list of fees to project, each {name, amount, frequency, category?}; category is accepted but not used here
yearsNoNumber of years to project, integer 1-30; default 1

Output Schema

NameRequiredDescriptionDefault
noteYesMethod note: recurring fees multiplied by years, one-time fees counted once, no compounding
yearsYesNumber of years projected (1-30)
per_feeYesPer-fee projection, in input order
cumulative_totalYesSum of all per-fee cumulative amounts, USD

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / fees / items / properties / category / description
      Previous value: -"Optional benchmark category key (case-insensitive; spaces/hyphens become underscores). One of: bank_overdraft, bank_monthly_maintenance, atm_out_of_network, late_payment, gym_membership_monthly, streaming_monthly, airline_checked_bag, airline_seat_fee, ticket_convenience, rental_application, subscription_app_monthly, delivery_fee, airline_change_fee, hotel_resort_fee. Unknown keys are ignored."New value: +"Optional benchmark category key (case-insensitive; spaces/hyphens become underscores). One of: bank_overdraft, bank_monthly_maintenance, atm_out_of_network, late_payment, gym_membership_monthly, streaming_monthly, airline_checked_bag, airline_seat_fee, ticket_convenience, rental_application, subscription_app_monthly, delivery_fee, airline_change_fee, hotel_resort_fee. Unknown keys are ignored for benchmarking and listed in audit_fees' note."
    • changedOutput schema / properties / note / description
      Previous value: -"Method note: straight multiplication, no compounding"New value: +"Method note: recurring fees multiplied by years, one-time fees counted once, no compounding"
    • changedOutput schema / properties / per_fee / items / properties / annualized / description
      Previous value: -"Yearly cost of this fee, USD"New value: +"Yearly cost of this fee, USD (monthly x12; annual as-is; one-time = the single charge, counted once)"
    • changedOutput schema / properties / per_fee / items / properties / cumulative / description
      Previous value: -"annualized x years, USD"New value: +"Total over the period, USD: annualized x years for monthly/annual fees; the single amount for one-time fees"
  2. Changed13 schema fields changed
    • changedInput schema / properties / fees / description
      Previous value: -"List of yearly fees as numbers in ISO currency code"New value: +"Non-empty list of fees to project, each {name, amount, frequency, category?}; category is accepted but not used here"
    • addedInput schema / properties / fees / items / properties / amount / description
      Added value: +"Amount per charge in USD, greater than 0, e.g. 38 or 15.99 (for monthly fees, the monthly amount)"
    • addedInput schema / properties / fees / items / properties / amount / exclusiveMinimum
      Added value: +0
    • addedInput schema / properties / fees / items / properties / category / description
      Added value: +"Optional benchmark category key (case-insensitive; spaces/hyphens become underscores). One of: bank_overdraft, bank_monthly_maintenance, atm_out_of_network, late_payment, gym_membership_monthly, streaming_monthly, airline_checked_bag, airline_seat_fee, ticket_convenience, rental_application, subscription_app_monthly, delivery_fee, airline_change_fee, hotel_resort_fee. Unknown keys are ignored."
    • addedInput schema / properties / fees / items / properties / frequency / description
      Added value: +"How often the fee is charged: 'monthly' (x12 per year), 'annual' or 'one-time'"
    • addedInput schema / properties / fees / items / properties / name / description
      Added value: +"Fee label as it appears on the statement, e.g. 'Overdraft fee' or 'Netflix'"
    • addedInput schema / properties / fees / items / properties / name / minLength
      Added value: +1
    • addedInput schema / properties / fees / minItems
      Added value: +1
    • changedInput schema / properties / years / description
      Previous value: -"Years to project (integer 1-30), default 1"New value: +"Number of years to project, integer 1-30; default 1"
    • addedInput schema / properties / years / maximum
      Added value: +30
    • addedInput schema / properties / years / minimum
      Added value: +1
    • changedInput schema / properties / years / type
      Previous value: -"number"New value: +"integer"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "cumulative_total": {
      +      "description": "Sum of all per-fee cumulative amounts, USD",
      +      "type": "number"
      +    },
      +    "note": {
      +      "description": "Method note: straight multiplication, no compounding",
      +      "type": "string"
      +    },
      +    "per_fee": {
      +      "description": "Per-fee projection, in input order",
      +      "items": {
      +        "properties": {
      +          "annualized": {
      +            "description": "Yearly cost of this fee, USD",
      +            "type": "number"
      +          },
      +          "cumulative": {
      +            "description": "annualized x years, USD",
      +            "type": "number"
      +          },
      +          "name": {
      +            "description": "Trimmed fee name",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "annualized",
      +          "cumulative"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "years": {
      +      "description": "Number of years projected (1-30)",
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "years",
      +    "per_fee",
      +    "cumulative_total",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "feeBreakdown": {
      -      "description": "The cost of each fee over the specified number of years.",
      -      "items": {
      -        "properties": {
      -          "name": {
      -            "description": "The name of the fee.",
      -            "type": "string"
      -          },
      -          "totalAmount": {
      -            "description": "The total cost of the fee over the specified number of years.",
      -            "type": "number"
      -          },
      -          "yearlyAmounts": {
      -            "description": "The cost of the fee for each year in the projection.",
      -            "items": {
      -              "properties": {
      -                "amount": {
      -                  "description": "The cost of the fee for that year.",
      -                  "type": "number"
      -                },
      -                "year": {
      -                  "description": "The year number in the projection.",
      -                  "type": "integer"
      -                }
      -              },
      -              "required": [
      -                "year",
      -                "amount"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          }
      -        },
      -        "required": [
      -          "name",
      -          "totalAmount",
      -          "yearlyAmounts"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "totalCost": {
      -      "description": "The cumulative cost of all fees over the specified number of years.",
      -      "type": "number"
      -    },
      -    "yearlyBreakdown": {
      -      "description": "The cost of all fees for each year in the projection.",
      -      "items": {
      -        "properties": {
      -          "cost": {
      -            "description": "The total cost for that year.",
      -            "type": "number"
      -          },
      -          "year": {
      -            "description": "The year number in the projection.",
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "year",
      -          "cost"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    }
      -  },
      -  "required": [
      -    "totalCost",
      -    "yearlyBreakdown",
      -    "feeBreakdown"
      -  ],
      -  "type": "object"
      -}New value: +null
  4. Changed1 schema field changed
    • addedInput schema / properties / fees / description
      Added value: +"List of yearly fees as numbers in ISO currency code"
  5. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "feeBreakdown": {
      +      "description": "The cost of each fee over the specified number of years.",
      +      "items": {
      +        "properties": {
      +          "name": {
      +            "description": "The name of the fee.",
      +            "type": "string"
      +          },
      +          "totalAmount": {
      +            "description": "The total cost of the fee over the specified number of years.",
      +            "type": "number"
      +          },
      +          "yearlyAmounts": {
      +            "description": "The cost of the fee for each year in the projection.",
      +            "items": {
      +              "properties": {
      +                "amount": {
      +                  "description": "The cost of the fee for that year.",
      +                  "type": "number"
      +                },
      +                "year": {
      +                  "description": "The year number in the projection.",
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "year",
      +                "amount"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "totalAmount",
      +          "yearlyAmounts"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "totalCost": {
      +      "description": "The cumulative cost of all fees over the specified number of years.",
      +      "type": "number"
      +    },
      +    "yearlyBreakdown": {
      +      "description": "The cost of all fees for each year in the projection.",
      +      "items": {
      +        "properties": {
      +          "cost": {
      +            "description": "The total cost for that year.",
      +            "type": "number"
      +          },
      +          "year": {
      +            "description": "The year number in the projection.",
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "year",
      +          "cost"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "totalCost",
      +    "yearlyBreakdown",
      +    "feeBreakdown"
      +  ],
      +  "type": "object"
      +}
  6. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description's real contribution is the calculation semantics: no compounding, no inflation, one-time fees counted once, per-fee breakdown. That is genuinely useful behavioral context beyond the annotations, though it leaves limits/rate behavior unaddressed.

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?

Two tight sentences with the core computation front-loaded and the sibling routing at the end. Every clause carries information; the only slight density cost is the parenthetical negation about compounding.

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

Completeness5/5

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

An output schema exists, so return values need not be described. With parameters fully covered by the schema, safety covered by annotations, and the calculation methodology, scope, and sibling boundaries all stated, nothing an agent needs in order to call this correctly is missing.

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%, so both parameters (fees, years) are already fully documented, including the enum values, the 1-30 bound, and the note that category is ignored. The description restates the multiplication logic but adds no syntax or format detail the schema lacks; baseline 3 applies.

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?

Names a specific verb+resource (project cumulative cost of a fee list) and pins the mechanism (straight multiplication, 1-30 years). It explicitly distinguishes itself from siblings audit_fees and benchmark_fees, so an agent can route without opening 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?

Gives a concrete trigger phrase ("what will these cost me over N years") and an explicit exclusion clause ("It does not flag fees") that names the two correct alternatives. Both when-to-use and when-not-to-use are stated.

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.

Resources