Skip to main content
Glama
JerBouma

Finance Toolkit

by JerBouma

fixed_income

Read-onlyIdempotent

Calculate bond duration, present value, yield-to-maturity, derivative prices, spreads, and price-change estimates from supplied parameters. Use for bond and derivative valuation and risk analysis.

Instructions

Bond and derivative valuation calculations (bond duration, present value, yield-to-maturity, derivative pricing, par yield, forward rate, breakeven inflation rate, key rate duration, yield curve spread, Z-spread, bond-equivalent yield, Taylor-series price change estimate). No tickers or countries needed — provide bond/derivative parameters (e.g. face_value, coupon_rate, maturity, spot_rates) directly as arguments.

Available indicators: get_derivative_price, get_duration, get_present_value, get_yield_to_maturity, get_par_yield, get_forward_rate, get_breakeven_inflation_rate, get_key_rate_duration, get_yield_curve_spread, get_z_spread, get_bond_equivalent_yield, get_taylor_price_change.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
guessNoValue for guess. Leave unset to use the default of the indicator you selected. Defaults are 0.01 for get_z_spread; 0.05 for get_yield_to_maturity.
modelNoValue for model.black
tenorNoValue for tenor.
end_dateNoEnd of the date range in YYYY-MM-DD format.2026-10-02
maturityNoValue for maturity.
notionalNoValue for notional.
countriesNoComma-separated country names, e.g. 'United States,Germany,Japan'.
frequencyNoValue for frequency.
indicatorYesName of the specific metric to calculate, e.g. 'get_asset_turnover_ratio'. Required — omitting it returns the list of available indicators.
par_valueNoValue for par_value.
quarterlyNoReturn quarterly data instead of annual when True.
toleranceNoValue for tolerance.
bond_priceNoClean price of the bond per 100 face value.
real_ratesNoValue for real_rates.
spot_ratesNoValue for spot_rates.
start_dateNoStart of the date range in YYYY-MM-DD format.2021-10-03
volatilityNoValue for volatility.
coupon_rateNoAnnual coupon rate as a decimal, e.g. 0.05 for 5 %. Leave unset to use the default of the indicator you selected. Defaults are 0.05 for get_key_rate_duration, get_yield_to_maturity, get_z_spread; None for get_duration, get_present_value, get_taylor_price_change.
is_receiverNoValue for is_receiver.
strike_rateNoOption strike price.
far_maturityNoValue for far_maturity.
forward_rateNoValue for forward_rate.
show_columnsNoComma-separated names to filter the output. For historical data use the key names visible in any response record (e.g. 'Close,Volume,Return'). For financial statements use the 'metric' field values from the response (e.g. 'Revenue,Net Income,EBITDA'). Call the tool once without this parameter to see all available names, then repeat with show_columns to reduce response size and token usage.
yield_changeNoValue for yield_change. Leave unset to use the default of the indicator you selected. Defaults are 0.0001 for get_key_rate_duration; 0.01 for get_taylor_price_change.
duration_typeNoValue for duration_type.modified
long_maturityNoValue for long_maturity.
near_maturityNoValue for near_maturity.
nominal_ratesNoValue for nominal_rates.
discount_yieldNoValue for discount_yield.
include_payoffNoValue for include_payoff.
max_iterationsNoValue for max_iterations.
risk_free_rateNoValue for risk_free_rate.
short_maturityNoValue for short_maturity.
show_input_infoNoValue for show_input_info.
volatility_typeNoValue for volatility_type.
days_to_maturityNoValue for days_to_maturity.
key_rate_maturityNoValue for key_rate_maturity.
payment_frequencyNoValue for payment_frequency.
years_to_maturityNoYears remaining until the bond matures.
yield_to_maturityNoValue for yield_to_maturity.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv2.2.1
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-08-19"New value: +"2026-10-02"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-08-20"New value: +"2021-10-03"
  2. Changed21 schema fields changedv2.2.0
    • changedInput schema / properties / coupon_rate / description
      Previous value: -"Annual coupon rate as a decimal, e.g. 0.05 for 5 %."New value: +"Annual coupon rate as a decimal, e.g. 0.05 for 5 %. Leave unset to use the default of the indicator you selected. Defaults are 0.05 for get_key_rate_duration, get_yield_to_maturity, get_z_spread; None for get_duration, get_present_value, get_taylor_price_change."
    • addedInput schema / properties / days_to_maturity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for days_to_maturity.",
      +  "title": "Days To Maturity"
      +}
    • addedInput schema / properties / discount_yield
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for discount_yield.",
      +  "title": "Discount Yield"
      +}
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-07-14"New value: +"2026-08-19"
    • addedInput schema / properties / far_maturity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for far_maturity.",
      +  "title": "Far Maturity"
      +}
    • addedInput schema / properties / guess / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / guess / default
      Previous value: -0.05New value: +null
    • changedInput schema / properties / guess / description
      Previous value: -"Value for guess."New value: +"Value for guess. Leave unset to use the default of the indicator you selected. Defaults are 0.01 for get_z_spread; 0.05 for get_yield_to_maturity."
    • removedInput schema / properties / guess / type
      Removed value: -"number"
    • changedInput schema / properties / indicator / enum
      Previous value: -[
      -  "get_derivative_price",
      -  "get_duration",
      -  "get_present_value",
      -  "get_yield_to_maturity"
      -]New value: +[
      +  "get_derivative_price",
      +  "get_duration",
      +  "get_present_value",
      +  "get_yield_to_maturity",
      +  "get_par_yield",
      +  "get_forward_rate",
      +  "get_breakeven_inflation_rate",
      +  "get_key_rate_duration",
      +  "get_yield_curve_spread",
      +  "get_z_spread",
      +  "get_bond_equivalent_yield",
      +  "get_taylor_price_change"
      +]
    • addedInput schema / properties / key_rate_maturity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for key_rate_maturity.",
      +  "title": "Key Rate Maturity"
      +}
    • addedInput schema / properties / long_maturity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for long_maturity.",
      +  "title": "Long Maturity"
      +}
    • addedInput schema / properties / maturity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for maturity.",
      +  "title": "Maturity"
      +}
    • addedInput schema / properties / near_maturity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for near_maturity.",
      +  "title": "Near Maturity"
      +}
    • addedInput schema / properties / nominal_rates
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for nominal_rates.",
      +  "title": "Nominal Rates"
      +}
    • addedInput schema / properties / real_rates
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for real_rates.",
      +  "title": "Real Rates"
      +}
    • addedInput schema / properties / short_maturity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for short_maturity.",
      +  "title": "Short Maturity"
      +}
    • addedInput schema / properties / spot_rates
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for spot_rates.",
      +  "title": "Spot Rates"
      +}
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-07-15"New value: +"2021-08-20"
    • addedInput schema / properties / volatility_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for volatility_type.",
      +  "title": "Volatility Type"
      +}
    • addedInput schema / properties / yield_change
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for yield_change. Leave unset to use the default of the indicator you selected. Defaults are 0.0001 for get_key_rate_duration; 0.01 for get_taylor_price_change.",
      +  "title": "Yield Change"
      +}
  3. Changed4 schema fields changed
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-07-09"New value: +"2026-07-14"
    • addedInput schema / properties / payment_frequency
      Added value: +{
      +  "default": 2,
      +  "description": "Value for payment_frequency.",
      +  "title": "Payment Frequency",
      +  "type": "integer"
      +}
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-07-10"New value: +"2021-07-15"
    • addedInput schema / properties / tenor
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for tenor.",
      +  "title": "Tenor"
      +}
  4. Changed2 schema fields changedv2.1.4
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-06-27"New value: +"2026-07-09"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-06-28"New value: +"2021-07-10"
  5. Changed2 schema fields changedv2.1.3
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-06-23"New value: +"2026-06-27"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-06-24"New value: +"2021-06-28"
  6. Changed3 schema fields changedv0.1.2
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-06-22"New value: +"2026-06-23"
    • addedInput schema / properties / show_columns
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Comma-separated names to filter the output. For historical data use the key names visible in any response record (e.g. 'Close,Volume,Return'). For financial statements use the 'metric' field values from the response (e.g. 'Revenue,Net Income,EBITDA'). Call the tool once without this parameter to see all available names, then repeat with show_columns to reduce response size and token usage.",
      +  "title": "Show Columns"
      +}
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-06-23"New value: +"2021-06-24"
  7. Addedv0.1.1

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds that parameters are passed directly without tickers or countries, which is helpful behavioral context, but it does not disclose anything further about execution, error handling, or output behavior beyond what the output schema provides.

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?

The description is front-loaded with the scope and the 'no tickers' caveat, then lists available indicators, which is reasonable for a gateway tool. It is somewhat repetitive because it names metrics in the opening parenthesis and again in the explicit indicator list, but that redundancy helps map human-readable concepts to exact enum values.

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?

Given 40 parameters, an output schema, and read-only/idempotent annotations, the description covers the essential calling context: the domain, the required indicator concept, and the direct-argument usage style. It does not explain which parameters apply to which indicator, but that detail is largely available in the schema and output schema.

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 the structured schema already documents all 40 parameters, setting the baseline at 3. The description adds only a general note that bond/derivative parameters like face_value, coupon_rate, maturity, and spot_rates should be supplied directly, which is marginally useful but does not meaningfully extend parameter semantics beyond the schema.

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

Purpose4/5

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

The description names a specific domain (bond and derivative valuation) and enumerates twelve concrete calculations, so an agent can tell it apart from generic siblings like valuation or risk. However, it does not explicitly differentiate itself from potentially overlapping siblings such as options or rates, which limits it from a 5.

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

Usage Guidelines3/5

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

It gives one useful usage note ('No tickers or countries needed — provide bond/derivative parameters directly as arguments') and lists available indicators, which implies when the tool is relevant. But it provides no explicit when-to-use or when-not-to-use guidance relative to the many sibling category tools.

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