Skip to main content
Glama
JerBouma

Finance Toolkit

macroeconomics

Read-onlyIdempotent

Retrieve macroeconomic indicators by country—GDP, inflation, trade balance, exchange rates, and crisis signals—to analyze economic conditions over custom date ranges.

Instructions

Macroeconomic indicators by country (GDP, real GDP, CPI, PPI, inflation rate, trade balance, imports, exports, investment, consumption, business/consumer confidence, house prices, rent prices, exchange rates, real effective exchange rate, money supply, household savings rate, household debt-to-income ratio, output gap, real interest rate, misery index, banking/currency/sovereign debt crisis indicators, commercial real estate prices, commodity forward curves). Requires countries='United States' — use comma-separated values for multiple countries. Do NOT use tickers= for this tool. Supports start_date/end_date. Indicators with a period come at the highest frequency they are published at unless period= says otherwise (daily, else weekly, monthly, quarterly, yearly); house prices, rent prices, the household savings rate and the household debt-to-income ratio come quarterly from the OECD (quarterly=false for yearly); the others are yearly. quarterly=true returns quarterly data only where a source has it (a note says when it does not). Supports rolling=N (moving-average smoothing) and trailing=N (trailing N-period sum, e.g. a trailing-4-quarter sum) on the raw series. get_gross_domestic_product_growth returns the latest quarterly real GDP growth (quarter on quarter, or year_over_year=true) without an API key. get_shiller_stock_market_data returns Robert Shiller's monthly US stock market data from 1871 (price, dividend, earnings, CPI, long rate, CAPE; no countries needed). get_exchange_rates returns each country's currency per US dollar (e.g. countries='Japan' for yen per dollar, not a currency pair; for a pair such as EURUSD use the market_data tool with tickers='EURUSD'), defaults to daily rates and accepts end_of_period=true for month-, quarter- or year-end rates (BIS, no key). get_commercial_real_estate_prices covers around twenty economies (BIS, no key). get_inflation_rate and get_consumer_price_index default to monthly data (period='yearly' for annual), without an API key (Eurostat incl. the euro area flash estimate, the ONS for the United Kingdom, the Statistics Bureau of Japan, and the BIS for around sixty other countries incl. the United States, China, India and Brazil). get_consumer_price_index also accepts oecd_source=true for monthly/quarterly OECD data only. get_commodity_forward_curve requires a commodity= argument instead of countries= (e.g. 'Crude Oil', 'Gold') and returns dated futures contracts, not a country series. Also includes six US-only indicators that only return a 'United States' column regardless of the countries= argument: get_industrial_production_index (Federal Reserve G.17) and get_recession_indicator (NBER business cycle dates) work without an API key, while get_retail_sales, get_housing_starts, get_real_personal_income and get_commercial_real_estate_prices require a free FRED API key (optional; get one at https://fred.stlouisfed.org/docs/api/api_key.html). get_economic_calendar returns scheduled economic data releases (event, previous, estimate, actual, impact) rather than a country series. By default it returns only High impact releases from the past 23 days to the coming 7 days; narrow it with countries= (e.g. 'United States') and currencies= (e.g. 'USD,EUR'), filter on event names with events= (e.g. events='PMI' for the purchasing managers' indices with consensus, or 'CPI,Unemployment'), pass impact='Medium' or 'High,Medium' for more, impact='All' for every release, and start_date/end_date for another window (keep it to a few weeks: one month of every country is over 2,000 releases). Its Unit column gives each release's unit; releases quoted in percent and its Change % column are decimals like the rest. Every rate and ratio this tool returns is a decimal fraction, not a percentage: an inflation rate of 4.1% comes back as 0.0412 and a debt-to-GDP ratio of 131.7% as 1.3173. Multiply by 100 before presenting them as percentages. Global Macro Database options: usd=true returns GDP, GDP per capita, consumption, investment, fixed investment, exports, imports, trade balance and current account in millions of US dollars (comparable across countries); get_total_consumption and get_total_consumption_to_gdp_ratio accept component='total', 'household' or 'government'; get_house_prices with inflation_adjusted=true returns real house prices. Yearly GMDB series end at the last observation; pass gmdb_forecasts=true to include the IMF projections up to five years ahead. get_implied_volatility returns volatility indices by market and maturity as decimals, no countries needed (markets='US Equity' VIX 9D-1Y from 1990, 'Euro Area Equity' VSTOXX 1M-24M from 1999, 'Emerging Markets Equity', 'US Equity Volatility' VVIX, 'US Treasury Bonds' VXTLT, 'Crude Oil', 'Gold'; with an FMP key also 'US Treasury Rates' MOVE and 'Japan Government Bonds'), period='daily', 'weekly' or 'monthly'. get_stress_test_scenario returns regulators' stress test scenarios (authority='federal_reserve' quarterly US and international variables incl. Treasury and BBB yields, equity, house prices and VIX; authority='esrb' the EBA bank stress test, yearly, every EU country plus iTraxx spreads), scenario='baseline', 'adverse' or 'historic' (Fed history from 1976), countries= optional; the scenario path is not cut to start_date/end_date. Long-horizon data: get_long_run_asset_returns returns yearly total returns 1870-2020 for 18 advanced economies (Jordà-Schularick-Taylor; asset_class='equity'|'housing'|'bonds'|'bills'|'risky'|'safe'|'wealth', real=true for real returns; licensed for non-commercial use only, so it requires accept_licence=true; countries= optional). get_millennium_of_macroeconomic_data returns the Bank of England's annual UK series from as early as 1086 to 2016 (series= e.g. 'Bank Rate,Consols,Share prices'; set start_date far back, e.g. 1700-01-01). get_scenario_set returns De Nederlandsche Bank's pension scenario set (20,000 scenarios over 100 years, measure='real_world' or 'market_consistent'): quantiles per horizon year of nominal zero rates 1Y-30Y, the euro area 10Y real rate, equity returns and EU/NL inflation; the first call takes one to two minutes. get_asset_class_proxies returns daily total returns of listed funds tracking private equity, infrastructure, hedge funds, merger arbitrage, private credit, real estate and investment grade and high yield credit (asset_classes=, period='daily'|'weekly'|'monthly').

Input Schema

NameRequiredDescriptionDefault
lagNoNumber of periods to lag when computing growth rates.
usdNoReturn levels in millions of US dollars instead of national currency when True, which makes them comparable across countries (Global Macro Database).
realNoWhether to deflate the returns by consumer price inflation.
yearNoThe year of the Federal Reserve's stress test, from 2025.
limitNoThe rows to return, like head and tail: 5 for the first five, -5 for the last five (the most recent of a time series). A table with its periods as columns (financial statements, ratios) keeps its first or last periods instead. For ETF holdings the largest (or, negative, the smallest) by weight, and for a list (e.g. news or a screener) its length.
eventsNoParts of event names to keep, matched without regard to case, e.g. "PMI" for every purchasing managers' index or ["CPI", "Unemployment"].
growthNoReturn period-over-period growth rates instead of absolute values.
impactNoThe market impact to keep: "Low", "Medium" and/or "High", or "All" for every release. Leave unset to use the default of the indicator you selected. Defaults are 'High' for get_economic_calendar.
periodNoObservation frequency, e.g. 'daily', 'weekly', 'monthly', 'quarterly', or 'annual' (supported values differ per method). Leave unset to use the default of the indicator you selected. Defaults are None for get_consumer_price_index, get_exchange_rates, get_inflation_rate, get_producer_price_index, get_share_prices; 'daily' for get_asset_class_proxies, get_implied_volatility.
seriesNoAnalyze the indicators of other tools instead of the tickers' prices: references separated by ';', each tool:indicator:tickers-or-countries with an optional :column, e.g. 'valuation:get_price_to_earnings_ratio:AAPL,MSFT; macroeconomics:get_inflation_rate:United States' or 'rates:get_government_bond_yield_curve:United States,Germany:10Y'. Every ticker or country becomes a series named after it, which dependent_ticker and independent_tickers then name. Use start_date for a long enough history.
marketsNoThe markets to retrieve, from "US Equity", "Euro Area Equity", "Emerging Markets Equity", "US Equity Volatility", "US Treasury Bonds", "Crude Oil", "Gold", "US Treasury Rates" and "Japan Government Bonds".
measureNoSub-measure selector, e.g. 'M1', 'M2', or 'M3' for money supply. Leave unset to use the default of the indicator you selected. Defaults are None for get_money_supply; 'real_world' for get_scenario_set.
returnsNoWhether to return the total return per period instead of the dividend-adjusted price.
rollingNoRolling window size in number of periods. When set, the metric is computed over a smoothly overlapping trailing window across the full history (e.g. period='monthly' and rolling=6 gives a rolling 6-month value) instead of one value per period, or (for economics indicators) a simple moving average used to smooth the raw series.
end_dateNoEnd of the date range in YYYY-MM-DD format.2026-10-27
scenarioNo"baseline", "adverse" (the Federal Reserve's severely adverse scenario) or "historic".adverse
trailingNoTrailing window size in number of periods. Sums the raw values over the trailing N periods (e.g. trailing=4 on quarterly data gives a trailing-4-quarter / TTM-style sum) instead of returning one value per period.
authorityNoFor get_stress_test_scenario: "federal_reserve" or "esrb". For get_scenario_set: The regulator: "dnb". Leave unset to use the default of the indicator you selected. Defaults are 'dnb' for get_scenario_set; 'federal_reserve' for get_stress_test_scenario.
commodityNoThe commodity to retrieve the curve for. One of "Crude Oil", "Natural Gas", "Gold", "Silver", "Copper", "Corn", "Wheat" or "Soybeans". Leave unset to use the default of the indicator you selected. Required by: get_commodity_forward_curve.
componentNoPart of final consumption: 'total', 'household' or 'government'.total
contractsNoThe number of contracts to return, the nearest listed ones from the current month on.
countriesNoCountry names, comma-separated or as a list, e.g. 'United States,Germany,Japan'.
indicatorYesName of the specific metric to calculate, one of the listed values. Required — search_metrics finds the indicator (and its tool) for a metric by name.
quantilesNoThe quantiles of the distribution per year.
quarterlyNoReturn quarterly data instead of annual when True.
rate_typeNoWhich nominal interest rate to use. Can be 'long_term' (10-year government bond yield) or 'short_term' (3-month money market rate).long_term
scenariosNoWhether to return every scenario instead of the distribution.
variablesNoThe variables to include, from "Nominal rate 1Y", "Nominal rate 5Y", "Nominal rate 10Y", "Nominal rate 20Y", "Nominal rate 30Y", "Real rate EU 10Y", "Equity return", "Inflation EU" and "Inflation NL".
currenciesNoThe currencies to keep, e.g. "USD" or ["USD", "EUR"].
start_dateNoStart of the date range in YYYY-MM-DD format.2021-10-28
asset_classNo"equity", "housing", "bonds", "bills", "risky", "safe" or "wealth".equity
gmdb_sourceNoUse the Global Macro Database as the data source when True, rather than the OECD. The two are independent providers with different country and period coverage; both return rates and ratios as decimal fractions.
oecd_sourceNoWhether to get the data from the OECD instead of the Global Macro Database (GMDB).
standardizeNoReturn the Z-Score (standard score) instead of the raw values, i.e. how many standard deviations each value is from the mean of its own series. When combined with growth=True, the growth values are standardized instead of the raw values.
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.
asset_classesNoThe asset classes to include, from "Private Equity", "Infrastructure", "Hedge Funds", "Merger Arbitrage", "Private Credit", "Real Estate", "Investment Grade Credit" and "High Yield Credit".
end_of_periodNoWhether to return the rate at the end of each month, quarter or year instead of its average.
accept_licenceNoConfirms that the data is used for non-commercial purposes, as its licence (CC BY-NC-SA 4.0) requires.
gmdb_forecastsNoSet to true to include the years the Global Macro Database projects (IMF World Economic Outlook, up to five years ahead); by default a yearly series ends with its last observation.
year_over_yearNoWhether to return the change on the same quarter a year earlier instead of on the previous quarter.
inflation_adjustedNoAdjust nominal values for inflation when True.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv2.3.0
    • changedInput schema / properties / contracts / description
      Previous value: -"The number of sequential monthly contracts ahead of today to attempt to fetch."New value: +"The number of contracts to return, the nearest listed ones from the current month on."
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-10-14"New value: +"2026-10-27"
    • changedInput schema / properties / period / description
      Previous value: -"Observation frequency, e.g. 'daily', 'weekly', 'monthly', 'quarterly', or 'annual' (supported values differ per method). Leave unset to use the default of the indicator you selected. Defaults are None for get_consumer_price_index, get_exchange_rates, get_inflation_rate, get_producer_price_index, get_share_prices; 'daily' for get_implied_volatility; 'monthly' for get_asset_class_proxies."New value: +"Observation frequency, e.g. 'daily', 'weekly', 'monthly', 'quarterly', or 'annual' (supported values differ per method). Leave unset to use the default of the indicator you selected. Defaults are None for get_consumer_price_index, get_exchange_rates, get_inflation_rate, get_producer_price_index, get_share_prices; 'daily' for get_asset_class_proxies, get_implied_volatility."
    • changedInput schema / properties / series / description
      Previous value: -"The series to include, matched on (part of) their name without regard to case, e.g. \"Bank Rate\" or [\"consols\", \"share prices\"]."New value: +"Analyze the indicators of other tools instead of the tickers' prices: references separated by ';', each tool:indicator:tickers-or-countries with an optional :column, e.g. 'valuation:get_price_to_earnings_ratio:AAPL,MSFT; macroeconomics:get_inflation_rate:United States' or 'rates:get_government_bond_yield_curve:United States,Germany:10Y'. Every ticker or country becomes a series named after it, which dependent_ticker and independent_tickers then name. Use start_date for a long enough history."
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-10-15"New value: +"2021-10-28"
    • changedInput schema / properties / year / description
      Previous value: -"The year of the Federal Reserve's stress test."New value: +"The year of the Federal Reserve's stress test, from 2025."
  2. Changed55 schema fields changedv2.2.3
    • addedInput schema / properties / accept_licence
      Added value: +{
      +  "default": false,
      +  "description": "Confirms that the data is used for non-commercial purposes, as its licence (CC BY-NC-SA 4.0) requires.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / asset_class
      Added value: +{
      +  "default": "equity",
      +  "description": "\"equity\", \"housing\", \"bonds\", \"bills\", \"risky\", \"safe\" or \"wealth\".",
      +  "type": "string"
      +}
    • addedInput schema / properties / asset_classes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The asset classes to include, from \"Private Equity\", \"Infrastructure\", \"Hedge Funds\", \"Merger Arbitrage\", \"Private Credit\", \"Real Estate\", \"Investment Grade Credit\" and \"High Yield Credit\"."
      +}
    • addedInput schema / properties / authority
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "For get_stress_test_scenario: \"federal_reserve\" or \"esrb\". For get_scenario_set: The regulator: \"dnb\". Leave unset to use the default of the indicator you selected. Defaults are 'dnb' for get_scenario_set; 'federal_reserve' for get_stress_test_scenario."
      +}
    • changedInput schema / properties / commodity / description
      Previous value: -"Value for commodity. Leave unset to use the default of the indicator you selected. Required by: get_commodity_forward_curve."New value: +"The commodity to retrieve the curve for. One of \"Crude Oil\", \"Natural Gas\", \"Gold\", \"Silver\", \"Copper\", \"Corn\", \"Wheat\" or \"Soybeans\". Leave unset to use the default of the indicator you selected. Required by: get_commodity_forward_curve."
    • removedInput schema / properties / commodity / title
      Removed value: -"Commodity"
    • addedInput schema / properties / component
      Added value: +{
      +  "default": "total",
      +  "description": "Part of final consumption: 'total', 'household' or 'government'.",
      +  "type": "string"
      +}
    • changedInput schema / properties / contracts / description
      Previous value: -"Value for contracts."New value: +"The number of sequential monthly contracts ahead of today to attempt to fetch."
    • removedInput schema / properties / contracts / title
      Removed value: -"Contracts"
    • addedInput schema / properties / countries / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / countries / description
      Previous value: -"Comma-separated country names, e.g. 'United States,Germany,Japan'."New value: +"Country names, comma-separated or as a list, e.g. 'United States,Germany,Japan'."
    • removedInput schema / properties / countries / title
      Removed value: -"Countries"
    • removedInput schema / properties / countries / type
      Removed value: -"string"
    • addedInput schema / properties / currencies
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The currencies to keep, e.g. \"USD\" or [\"USD\", \"EUR\"]."
      +}
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-10-02"New value: +"2026-10-14"
    • removedInput schema / properties / end_date / title
      Removed value: -"End Date"
    • addedInput schema / properties / end_of_period
      Added value: +{
      +  "default": false,
      +  "description": "Whether to return the rate at the end of each month, quarter or year instead of its average.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / events
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Parts of event names to keep, matched without regard to case, e.g. \"PMI\" for every purchasing managers' index or [\"CPI\", \"Unemployment\"]."
      +}
    • addedInput schema / properties / gmdb_forecasts
      Added value: +{
      +  "default": false,
      +  "description": "Set to true to include the years the Global Macro Database projects (IMF World Economic Outlook, up to five years ahead); by default a yearly series ends with its last observation.",
      +  "type": "boolean"
      +}
    • removedInput schema / properties / gmdb_source / title
      Removed value: -"Gmdb Source"
    • removedInput schema / properties / growth / title
      Removed value: -"Growth"
    • addedInput schema / properties / impact
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The market impact to keep: \"Low\", \"Medium\" and/or \"High\", or \"All\" for every release. Leave unset to use the default of the indicator you selected. Defaults are 'High' for get_economic_calendar."
      +}
    • changedInput schema / properties / indicator / description
      Previous value: -"Name of the specific metric to calculate, e.g. 'get_asset_turnover_ratio'. Required — omitting it returns the list of available indicators."New value: +"Name of the specific metric to calculate, one of the listed values. Required — search_metrics finds the indicator (and its tool) for a metric by name."
    • changedInput schema / properties / indicator / enum
      Previous value: -[
      -  "get_business_confidence_index",
      -  "get_composite_leading_indicator",
      -  "get_consumer_confidence_index",
      -  "get_consumer_price_index",
      -  "get_current_account_balance",
      -  "get_current_account_balance_to_gdp_ratio",
      -  "get_exchange_rates",
      -  "get_exports",
      -  "get_exports_to_gdp_ratio",
      -  "get_fixed_investment",
      -  "get_fixed_investment_to_gdp_ratio",
      -  "get_gross_domestic_product",
      -  "get_gross_domestic_product_deflator",
      -  "get_house_prices",
      -  "get_imports",
      -  "get_imports_to_gdp_ratio",
      -  "get_inflation_rate",
      -  "get_investment",
      -  "get_investment_to_gdp_ratio",
      -  "get_money_supply",
      -  "get_producer_price_index",
      -  "get_rent_prices",
      -  "get_share_prices",
      -  "get_total_consumption",
      -  "get_total_consumption_to_gdp_ratio",
      -  "get_household_savings_rate",
      -  "get_household_debt_to_income_ratio",
      -  "get_retail_sales",
      -  "get_industrial_production_index",
      -  "get_housing_starts",
      -  "get_real_personal_income",
      -  "get_recession_indicator",
      -  "get_commercial_real_estate_prices",
      -  "get_commodity_forward_curve",
      -  "get_output_gap",
      -  "get_real_interest_rate",
      -  "get_real_effective_exchange_rate",
      -  "get_misery_index",
      -  "get_banking_crisis",
      -  "get_currency_crisis",
      -  "get_sovereign_debt_crisis",
      -  "get_real_gross_domestic_product_usd",
      -  "get_real_gross_domestic_product_per_capita",
      -  "get_trade_balance"
      -]New value: +[
      +  "get_business_confidence_index",
      +  "get_composite_leading_indicator",
      +  "get_consumer_confidence_index",
      +  "get_consumer_price_index",
      +  "get_current_account_balance",
      +  "get_current_account_balance_to_gdp_ratio",
      +  "get_exchange_rates",
      +  "get_exports",
      +  "get_exports_to_gdp_ratio",
      +  "get_fixed_investment",
      +  "get_fixed_investment_to_gdp_ratio",
      +  "get_gross_domestic_product",
      +  "get_gross_domestic_product_deflator",
      +  "get_gross_domestic_product_growth",
      +  "get_shiller_stock_market_data",
      +  "get_house_prices",
      +  "get_imports",
      +  "get_imports_to_gdp_ratio",
      +  "get_inflation_rate",
      +  "get_investment",
      +  "get_investment_to_gdp_ratio",
      +  "get_money_supply",
      +  "get_producer_price_index",
      +  "get_rent_prices",
      +  "get_share_prices",
      +  "get_total_consumption",
      +  "get_total_consumption_to_gdp_ratio",
      +  "get_household_savings_rate",
      +  "get_household_debt_to_income_ratio",
      +  "get_retail_sales",
      +  "get_industrial_production_index",
      +  "get_housing_starts",
      +  "get_real_personal_income",
      +  "get_recession_indicator",
      +  "get_commercial_real_estate_prices",
      +  "get_commodity_forward_curve",
      +  "get_output_gap",
      +  "get_real_interest_rate",
      +  "get_real_effective_exchange_rate",
      +  "get_misery_index",
      +  "get_banking_crisis",
      +  "get_currency_crisis",
      +  "get_sovereign_debt_crisis",
      +  "get_real_gross_domestic_product_usd",
      +  "get_real_gross_domestic_product_per_capita",
      +  "get_trade_balance",
      +  "get_implied_volatility",
      +  "get_stress_test_scenario",
      +  "get_long_run_asset_returns",
      +  "get_millennium_of_macroeconomic_data",
      +  "get_scenario_set",
      +  "get_asset_class_proxies",
      +  "get_economic_calendar"
      +]
    • removedInput schema / properties / indicator / title
      Removed value: -"Indicator"
    • removedInput schema / properties / inflation_adjusted / title
      Removed value: -"Inflation Adjusted"
    • removedInput schema / properties / lag / title
      Removed value: -"Lag"
    • addedInput schema / properties / limit
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The rows to return, like head and tail: 5 for the first five, -5 for the last five (the most recent of a time series). A table with its periods as columns (financial statements, ratios) keeps its first or last periods instead. For ETF holdings the largest (or, negative, the smallest) by weight, and for a list (e.g. news or a screener) its length."
      +}
    • addedInput schema / properties / markets
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The markets to retrieve, from \"US Equity\", \"Euro Area Equity\", \"Emerging Markets Equity\", \"US Equity Volatility\", \"US Treasury Bonds\", \"Crude Oil\", \"Gold\", \"US Treasury Rates\" and \"Japan Government Bonds\"."
      +}
    • changedInput schema / properties / measure / description
      Previous value: -"Sub-measure selector, e.g. 'M1', 'M2', or 'M3' for money supply."New value: +"Sub-measure selector, e.g. 'M1', 'M2', or 'M3' for money supply. Leave unset to use the default of the indicator you selected. Defaults are None for get_money_supply; 'real_world' for get_scenario_set."
    • removedInput schema / properties / measure / title
      Removed value: -"Measure"
    • changedInput schema / properties / oecd_source / description
      Previous value: -"Value for oecd_source."New value: +"Whether to get the data from the OECD instead of the Global Macro Database (GMDB)."
    • removedInput schema / properties / oecd_source / title
      Removed value: -"Oecd Source"
    • changedInput schema / properties / period / description
      Previous value: -"Observation frequency, e.g. 'monthly', 'quarterly', or 'annual'."New value: +"Observation frequency, e.g. 'daily', 'weekly', 'monthly', 'quarterly', or 'annual' (supported values differ per method). Leave unset to use the default of the indicator you selected. Defaults are None for get_consumer_price_index, get_exchange_rates, get_inflation_rate, get_producer_price_index, get_share_prices; 'daily' for get_implied_volatility; 'monthly' for get_asset_class_proxies."
    • removedInput schema / properties / period / title
      Removed value: -"Period"
    • addedInput schema / properties / quantiles
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The quantiles of the distribution per year."
      +}
    • removedInput schema / properties / quarterly / title
      Removed value: -"Quarterly"
    • changedInput schema / properties / rate_type / description
      Previous value: -"Value for rate_type."New value: +"Which nominal interest rate to use. Can be 'long_term' (10-year government bond yield) or 'short_term' (3-month money market rate)."
    • removedInput schema / properties / rate_type / title
      Removed value: -"Rate Type"
    • addedInput schema / properties / real
      Added value: +{
      +  "default": false,
      +  "description": "Whether to deflate the returns by consumer price inflation.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / returns
      Added value: +{
      +  "default": true,
      +  "description": "Whether to return the total return per period instead of the dividend-adjusted price.",
      +  "type": "boolean"
      +}
    • removedInput schema / properties / rolling / title
      Removed value: -"Rolling"
    • addedInput schema / properties / scenario
      Added value: +{
      +  "default": "adverse",
      +  "description": "\"baseline\", \"adverse\" (the Federal Reserve's severely adverse scenario) or \"historic\".",
      +  "type": "string"
      +}
    • addedInput schema / properties / scenarios
      Added value: +{
      +  "default": false,
      +  "description": "Whether to return every scenario instead of the distribution.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / series
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The series to include, matched on (part of) their name without regard to case, e.g. \"Bank Rate\" or [\"consols\", \"share prices\"]."
      +}
    • removedInput schema / properties / show_columns / title
      Removed value: -"Show Columns"
    • removedInput schema / properties / standardize / title
      Removed value: -"Standardize"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-10-03"New value: +"2021-10-15"
    • removedInput schema / properties / start_date / title
      Removed value: -"Start Date"
    • removedInput schema / properties / trailing / title
      Removed value: -"Trailing"
    • addedInput schema / properties / usd
      Added value: +{
      +  "default": false,
      +  "description": "Return levels in millions of US dollars instead of national currency when True, which makes them comparable across countries (Global Macro Database).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / variables
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The variables to include, from \"Nominal rate 1Y\", \"Nominal rate 5Y\", \"Nominal rate 10Y\", \"Nominal rate 20Y\", \"Nominal rate 30Y\", \"Real rate EU 10Y\", \"Equity return\", \"Inflation EU\" and \"Inflation NL\"."
      +}
    • addedInput schema / properties / year
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The year of the Federal Reserve's stress test."
      +}
    • addedInput schema / properties / year_over_year
      Added value: +{
      +  "default": false,
      +  "description": "Whether to return the change on the same quarter a year earlier instead of on the previous quarter.",
      +  "type": "boolean"
      +}
    • removedInput schema / title
      Removed value: -"macroeconomicsArguments"
  3. 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"
  4. Changed8 schema fields changedv2.2.0
    • addedInput schema / properties / commodity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for commodity. Leave unset to use the default of the indicator you selected. Required by: get_commodity_forward_curve.",
      +  "title": "Commodity"
      +}
    • addedInput schema / properties / contracts
      Added value: +{
      +  "default": 12,
      +  "description": "Value for contracts.",
      +  "title": "Contracts",
      +  "type": "integer"
      +}
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-07-14"New value: +"2026-08-19"
    • changedInput schema / properties / gmdb_source / description
      Previous value: -"Use the OECD Global Macro Data Bank as the data source when True."New value: +"Use the Global Macro Database as the data source when True, rather than the OECD. The two are independent providers with different country and period coverage; both return rates and ratios as decimal fractions."
    • changedInput schema / properties / indicator / enum
      Previous value: -[
      -  "get_business_confidence_index",
      -  "get_composite_leading_indicator",
      -  "get_consumer_confidence_index",
      -  "get_consumer_price_index",
      -  "get_current_account_balance",
      -  "get_current_account_balance_to_gdp_ratio",
      -  "get_exchange_rates",
      -  "get_exports",
      -  "get_exports_to_gdp_ratio",
      -  "get_fixed_investment",
      -  "get_fixed_investment_to_gdp_ratio",
      -  "get_gross_domestic_product",
      -  "get_gross_domestic_product_deflator",
      -  "get_house_prices",
      -  "get_imports",
      -  "get_imports_to_gdp_ratio",
      -  "get_inflation_rate",
      -  "get_investment",
      -  "get_investment_to_gdp_ratio",
      -  "get_money_supply",
      -  "get_rent_prices",
      -  "get_share_prices",
      -  "get_total_consumption",
      -  "get_total_consumption_to_gdp_ratio"
      -]New value: +[
      +  "get_business_confidence_index",
      +  "get_composite_leading_indicator",
      +  "get_consumer_confidence_index",
      +  "get_consumer_price_index",
      +  "get_current_account_balance",
      +  "get_current_account_balance_to_gdp_ratio",
      +  "get_exchange_rates",
      +  "get_exports",
      +  "get_exports_to_gdp_ratio",
      +  "get_fixed_investment",
      +  "get_fixed_investment_to_gdp_ratio",
      +  "get_gross_domestic_product",
      +  "get_gross_domestic_product_deflator",
      +  "get_house_prices",
      +  "get_imports",
      +  "get_imports_to_gdp_ratio",
      +  "get_inflation_rate",
      +  "get_investment",
      +  "get_investment_to_gdp_ratio",
      +  "get_money_supply",
      +  "get_producer_price_index",
      +  "get_rent_prices",
      +  "get_share_prices",
      +  "get_total_consumption",
      +  "get_total_consumption_to_gdp_ratio",
      +  "get_household_savings_rate",
      +  "get_household_debt_to_income_ratio",
      +  "get_retail_sales",
      +  "get_industrial_production_index",
      +  "get_housing_starts",
      +  "get_real_personal_income",
      +  "get_recession_indicator",
      +  "get_commercial_real_estate_prices",
      +  "get_commodity_forward_curve",
      +  "get_output_gap",
      +  "get_real_interest_rate",
      +  "get_real_effective_exchange_rate",
      +  "get_misery_index",
      +  "get_banking_crisis",
      +  "get_currency_crisis",
      +  "get_sovereign_debt_crisis",
      +  "get_real_gross_domestic_product_usd",
      +  "get_real_gross_domestic_product_per_capita",
      +  "get_trade_balance"
      +]
    • addedInput schema / properties / oecd_source
      Added value: +{
      +  "default": false,
      +  "description": "Value for oecd_source.",
      +  "title": "Oecd Source",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / rate_type
      Added value: +{
      +  "default": "long_term",
      +  "description": "Value for rate_type.",
      +  "title": "Rate Type",
      +  "type": "string"
      +}
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-07-15"New value: +"2021-08-20"
  5. Changed5 schema fields changed
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-07-09"New value: +"2026-07-14"
    • addedInput schema / properties / rolling
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Rolling window size in number of periods. When set, the metric is computed over a smoothly overlapping trailing window across the full history (e.g. period='monthly' and rolling=6 gives a rolling 6-month value) instead of one value per period, or (for economics indicators) a simple moving average used to smooth the raw series.",
      +  "title": "Rolling"
      +}
    • addedInput schema / properties / standardize
      Added value: +{
      +  "default": false,
      +  "description": "Return the Z-Score (standard score) instead of the raw values, i.e. how many standard deviations each value is from the mean of its own series. When combined with growth=True, the growth values are standardized instead of the raw values.",
      +  "title": "Standardize",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-07-10"New value: +"2021-07-15"
    • addedInput schema / properties / trailing
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Trailing window size in number of periods. Sums the raw values over the trailing N periods (e.g. trailing=4 on quarterly data gives a trailing-4-quarter / TTM-style sum) instead of returning one value per period.",
      +  "title": "Trailing"
      +}
  6. 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"
  7. 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"
  8. Changed4 schema fields changedv0.1.2
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-06-22"New value: +"2026-06-23"
    • removedInput schema / properties / rounding
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "integer"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Number of decimal places to round results to.",
      -  "title": "Rounding"
      -}
    • 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"
  9. Addedv0.1.1

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld, and the description adds genuinely behavioral content beyond them: all rates and ratios return as decimal fractions (0.0412 for 4.1%) that must be multiplied by 100, licence acceptance is required for the Jordà-Schularick-Taylor data, and the DNB scenario call takes one to two minutes on first invocation. It does not describe output shape, but an output schema exists.

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

Conciseness2/5

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

Roughly a thousand words in a single unstructured paragraph, with no headings or bullets despite covering ~20 distinct sub-tools. It also repeats semantics already present in the schema (rolling, trailing, usd, period defaults), so a substantial share of the text does not earn its place.

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?

For a 41-parameter dispatcher with an output schema, the description covers data sources, coverage windows, frequency defaults, key requirements, unit conventions and edge cases for nearly every indicator. An agent could select and call it correctly without further exploration.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description still earns more by explaining cross-parameter behavior the schema cannot — that commodity= replaces countries= for forward curves, that six indicators return only a 'United States' column regardless of countries=, and how rolling/trailing compose with period. These are real additions rather than restatements.

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 opening sentence names the resource precisely ('macroeconomic indicators by country') and enumerates the covered metrics, and it explicitly rules out the tickers= path. However, the tool is a 52-indicator dispatcher spanning GDP series, stress-test scenarios, pension scenario sets and Shiller data, so a single 'purpose' is hard to hold in mind; the routing still works because it names market_data for FX pairs.

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 states hard requirements (countries='United States', never tickers=), routes alternatives explicitly ('for a pair such as EURUSD use the market_data tool with tickers=EURUSD'), flags which indicators need a free FRED key versus none, and gives per-indicator default windows and frequency behaviour. search_metrics is named as the way to find the right indicator.

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