> ## Documentation Index
> Fetch the complete documentation index at: https://www.worldmonitor.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP tools: Macro & economic data

> World Monitor MCP tool reference for macro indicators, FRED, Eurostat, debt and capital flows: parameters, freshness, backing API endpoints and example calls.

Part of the [MCP Tools Reference](https://www.worldmonitor.app/docs/mcp-tools-reference.md), which indexes every tool. Connection, auth, plans and errors are in the [MCP Server overview](https://www.worldmonitor.app/docs/mcp-overview.md).

The `curl` examples assume `export WM_KEY="wm_…"`. With an OAuth token, replace `-H "X-WorldMonitor-Key: $WM_KEY"` with `-H "Authorization: Bearer $TOKEN"`.

### `get_economic_data`

Macro economic indicators: Fed Funds rate (FRED), economic calendar events, fuel prices, ECB FX rates, Bank of Russia official RUB rates and key policy rate, EU yield curve, earnings calendar, COT positioning, energy storage data, BIS household debt service ratio (DSR, quarterly, leading indicator of household financial stress across \~40 advanced economies), and BIS residential + commercial property price indices (real, quarterly).

**Parameters (tool-specific):**

| Name | Type | Description |
| - | - | - |
| `dataset` | `array<string: fedfunds / econ-calendar / china-macro / china-release-calendar / fuel-prices / ecb-fx-rates / cbr-rates / yield-curve-eu / spending / earnings-calendar / cot / dsr / property-residential / property-commercial>` | Restrict the response to one or more sub-datasets. Omit for the full economic bundle. |
| `country` | string | Filter the country-keyed datasets (fuel-prices, BIS DSR/property, economic calendar) to one ISO 3166-1 alpha-2 code. Country names and alpha-3 codes are accepted; unresolved inputs return Invalid params. |
| `limit` | number | Cap each list dataset (calendar, spending, earnings) to at most this many items (default 30, pass 0 for no cap). |

* **API endpoints:** `GET /api/economic/v1/get-china-macro-snapshot`, `GET /api/economic/v1/get-ecb-fx-rates`, `GET /api/economic/v1/get-economic-calendar`, `GET /api/economic/v1/get-eu-yield-curve`, `GET /api/economic/v1/list-fuel-prices`, `GET /api/market/v1/get-cot-positioning`, `GET /api/market/v1/list-earnings-calendar`
* **Access:** `free-account` — callable by any signed-in account; free accounts spend the daily free allowance, Pro calls spend the daily quota. Accepts the universal `summary` argument.
* **Kind:** cache read — sub-second response from Redis bootstrap cache.
* **Freshness budget:** up to **1 d** before `stale: true` is flagged (set by the seeder cron's expected interval).
* **Per-dataset caveat:** the single `stale` flag is derived from a subset of these sub-datasets, so it is not a per-dataset guarantee. `cbr-rates` is not one of them — it is published daily on a 3-day staleness budget with a 14-day content-age contract, both monitored on `/api/health` rather than through this flag. Read `cbr-rates.effectiveDate` when the age of that dataset specifically matters.

```bash curl theme={null}
curl -s https://worldmonitor.app/mcp \
  -H "X-WorldMonitor-Key: $WM_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc":"2.0","id":1,
    "method":"tools/call",
    "params":{"name":"get_economic_data","arguments":{}}
  }'
```

### `get_fred_series`

**Access:** `subscription`.

Read up to 20 macroeconomic series from the same seeded cache and allowlist used by the dashboard. Calls the canonical `POST /api/economic/v1/get-fred-series-batch` RPC; it never calls FRED at request time. The live `series_ids` description lists all supported IDs, including `UNRATE`, `CPIAUCSL`, and `FEDFUNDS`.

**Parameters (tool-specific):**

| Name | Type | Description |
| - | - | - |
| `series_ids` | `array<string>` | Required FRED IDs, normalized to uppercase. Up to 20 are forwarded. Unlisted IDs are ignored by the canonical reader. |
| `limit` | integer | Observations per series, newest-last. Default 24; valid range 1–1000. |

Returns `results` keyed by series ID, with title, units, frequency and observations. `requested` counts the unique allowlisted IDs looked up; `fetched` counts the ones present in cache. Missing seeded data remains missing; this call does not trigger a refresh. Large responses may be compacted by the MCP output budget.

Example: `get_fred_series({"series_ids":["UNRATE","CPIAUCSL"],"limit":24})`.

### `get_country_macro`

Per-country macroeconomic indicators from IMF WEO (\~210 countries, monthly cadence). Bundles fiscal/external balance (inflation, current account, gov revenue/expenditure/primary balance, CPI), growth & per-capita (real GDP growth, GDP/capita USD & PPP, savings & investment rates, savings-investment gap), labor & demographics (unemployment, population), and external trade (current account USD, import/export volume % changes). Latest available year per series. Use for country-level economic screening, peer benchmarking, and stagflation/imbalance flags. NOTE: export/import LEVELS in USD (exportsUsd, importsUsd, tradeBalanceUsd) are returned as null — WEO retracted broad coverage for BX/BM indicators in 2026-04; use currentAccountUsd or volume changes (import/exportVolumePctChg) instead.

**Parameters (tool-specific):**

| Name | Type | Description |
| - | - | - |
| `countries` | `array<string>` | ISO 3166-1 alpha-2 country codes to keep across all four IMF datasets (e.g. \["US","DE","CN"]). Omit for all \~210 countries. Country names and alpha-3 codes are accepted; unresolved inputs return Invalid params. |
| `limit` | integer | Cap each IMF dataset country map to at most this many entries when no countries filter is supplied (default 30, pass 0 for no cap). |

* **API endpoints:** none directly — reads from a bootstrap-aggregate cache key (no 1:1 REST endpoint).
* **Access:** `free-account` — callable by any signed-in account; free accounts spend the daily free allowance, Pro calls spend the daily quota. Accepts the universal `summary` argument.
* **Kind:** cache read — sub-second response from Redis bootstrap cache.
* **Freshness budget:** up to **70 d** before `stale: true` is flagged (set by the seeder cron's expected interval).

```bash curl theme={null}
curl -s https://worldmonitor.app/mcp \
  -H "X-WorldMonitor-Key: $WM_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc":"2.0","id":1,
    "method":"tools/call",
    "params":{"name":"get_country_macro","arguments":{}}
  }'
```

### `get_eu_housing_cycle`

Eurostat annual house price index (prc\_hpi\_a, base 2015=100) for all 27 EU members plus EA20 and EU27\_2020 aggregates. Each country entry includes the latest value, prior value, date, unit, and a 10-year sparkline series. Complements BIS WS\_SPP with broader EU coverage for the Housing cycle tile.

**Parameters (tool-specific):**

| Name | Type | Description |
| - | - | - |
| `countries` | `array<string>` | Eurostat geo codes to keep — ISO 3166-1 alpha-2, but "EL" for Greece, plus aggregates "EA20" and "EU27\_2020". Omit for all. Country names and alpha-3 codes are accepted; unresolved inputs return Invalid params. |
| `limit` | integer | Cap the country map to at most this many entries when no countries filter is supplied (default 30, pass 0 for no cap). |

* **API endpoints:** none directly — reads from a bootstrap-aggregate cache key (no 1:1 REST endpoint).
* **Access:** `free-account` — callable by any signed-in account; free accounts spend the daily free allowance, Pro calls spend the daily quota. Accepts the universal `summary` argument.
* **Kind:** cache read — sub-second response from Redis bootstrap cache.
* **Freshness budget:** up to **50 d** before `stale: true` is flagged (set by the seeder cron's expected interval).

```bash curl theme={null}
curl -s https://worldmonitor.app/mcp \
  -H "X-WorldMonitor-Key: $WM_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc":"2.0","id":1,
    "method":"tools/call",
    "params":{"name":"get_eu_housing_cycle","arguments":{}}
  }'
```

### `get_eu_quarterly_gov_debt`

Eurostat quarterly general government gross debt (gov\_10q\_ggdebt, %GDP) for all 27 EU members plus EA20 and EU27\_2020 aggregates. Each country entry includes latest value, prior value, quarter label, and an 8-quarter sparkline series. Provides fresher debt-trajectory signal than annual IMF GGXWDG\_NGDP for EU panels.

**Parameters (tool-specific):**

| Name | Type | Description |
| - | - | - |
| `countries` | `array<string>` | Eurostat geo codes to keep — ISO 3166-1 alpha-2, but "EL" for Greece, plus aggregates "EA20" and "EU27\_2020". Omit for all. Country names and alpha-3 codes are accepted; unresolved inputs return Invalid params. |
| `limit` | integer | Cap the country map to at most this many entries when no countries filter is supplied (default 30, pass 0 for no cap). |

* **API endpoints:** none directly — reads from a bootstrap-aggregate cache key (no 1:1 REST endpoint).
* **Access:** `free-account` — callable by any signed-in account; free accounts spend the daily free allowance, Pro calls spend the daily quota. Accepts the universal `summary` argument.
* **Kind:** cache read — sub-second response from Redis bootstrap cache.
* **Freshness budget:** up to **14 d** before `stale: true` is flagged (set by the seeder cron's expected interval).

```bash curl theme={null}
curl -s https://worldmonitor.app/mcp \
  -H "X-WorldMonitor-Key: $WM_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc":"2.0","id":1,
    "method":"tools/call",
    "params":{"name":"get_eu_quarterly_gov_debt","arguments":{}}
  }'
```

### `get_eu_industrial_production`

Return the Eurostat monthly industrial production index (sts\_inpr\_m: NACE B-D industry excluding construction, seasonally and calendar adjusted, 2021=100) for the 27 EU members plus the EA20 and EU27\_2020 aggregates. Each country entry has the latest value, prior value, month label and a 12-month series. Monthly data; the seed is flagged stale after 5 days. Covers the EU industrial index only; no other production or GDP measures. Seeded-cache read with no live fetch: weight 1 on API plans, included in the signed-in free allowance. countries uses Eurostat geo codes (ISO alpha-2 except EL for Greece); limit caps the country map when no filter is given (default 30, 0 for no cap).

**Parameters (tool-specific):**

| Name | Type | Description |
| - | - | - |
| `countries` | `array<string>` | Eurostat geo codes to keep — ISO 3166-1 alpha-2, but "EL" for Greece, plus aggregates "EA20" and "EU27\_2020". Omit for all. Country names and alpha-3 codes are accepted; unresolved inputs return Invalid params. |
| `limit` | integer | Cap the country map to at most this many entries when no countries filter is supplied (default 30, pass 0 for no cap). |

* **API endpoints:** none directly — reads from a bootstrap-aggregate cache key (no 1:1 REST endpoint).
* **Access:** `free-account` — callable by any signed-in account; free accounts spend the daily free allowance, Pro calls spend the daily quota. Accepts the universal `summary` argument.
* **Kind:** cache read — sub-second response from Redis bootstrap cache.
* **Freshness budget:** up to **5 d** before `stale: true` is flagged (set by the seeder cron's expected interval).

```bash curl theme={null}
curl -s https://worldmonitor.app/mcp \
  -H "X-WorldMonitor-Key: $WM_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc":"2.0","id":1,
    "method":"tools/call",
    "params":{"name":"get_eu_industrial_production","arguments":{}}
  }'
```

### `get_price_and_debt_indicators`

Return the seeded price and debt indicator bundle: the Economist Big Mac index by country, the FAO Food Price Index and per-country national debt levels. Each sub-dataset has its own staleness budget (Big Mac a week, FAO and debt 60 days). No tariff rates: a dataset value of tariffs is rejected with a validation error. Seeded-cache read with no live fetch: weight 1 on API plans, included in the signed-in free allowance. dataset selects bigmac, fao-ffpi or national-debt; country narrows Big Mac and debt rows (alpha-2, alpha-3 or name); limit caps each list (default 30, 0 for no cap).

Formerly `get_tariff_trends`. A call to that old name with only the tariffs dataset runs `get_tariff_averages` and returns the US MFN series. Any other dataset on the old name still returns this bundle. This bundle has carried no tariff series since #9301. The US MFN series is Pro data. Call `get_tariff_averages` with reporter `840` and no partner or product group. `dataset: ["tariffs"]` on this tool returns Invalid params.

**Parameters (tool-specific):**

| Name | Type | Description |
| - | - | - |
| `dataset` | `array<string: bigmac / fao-ffpi / national-debt>` | Restrict the response to one or more sub-datasets. Omit for the full bundle. |
| `country` | string | Filter the per-country datasets to one ISO 3166-1 alpha-2 country code (e.g. "US"). It is translated to alpha-3 internally for the national-debt dataset; passing an alpha-3 code directly also works. Country names and alpha-3 codes are accepted; unresolved inputs return Invalid params. |
| `limit` | number | Cap each list dataset (BigMac countries, debt entries) to at most this many items (default 30, pass 0 for no cap). |

* **API endpoints:** `GET /api/economic/v1/get-fao-food-price-index`, `GET /api/economic/v1/get-national-debt`, `GET /api/economic/v1/list-bigmac-prices`
* **Access:** `free-account` — callable by any signed-in account; free accounts spend the daily free allowance, Pro calls spend the daily quota. Accepts the universal `summary` argument.
* **Kind:** cache read — sub-second response from Redis bootstrap cache.
* **Freshness budget:** per sub-dataset — BigMac **7 d**, FAO FFPI and national debt **60 d** each. The single `stale` flag ORs all three checks: it flips as soon as any one sub-dataset exceeds its own budget.

```bash curl theme={null}
curl -s https://worldmonitor.app/mcp \
  -H "X-WorldMonitor-Key: $WM_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc":"2.0","id":1,
    "method":"tools/call",
    "params":{"name":"get_price_and_debt_indicators","arguments":{}}
  }'
```

### `get_capital_flows`

Return where money enters and leaves about 230 economies, and between any two, from official statistics. IMF balance of payments: gross inflows and outflows split into FDI, portfolio and other investment, quarterly or annual by country, with derived Forbes-Warnock states (surge or stop for inflows, flight or retrenchment for outflows) and z-scores. Per country and per pair: BIS cross-border bank deposits and lending, IMF portfolio holdings and IMF direct-investment positions. People changing residence are not a BOP flow. Sources lag 1-3 quarters (FDI \~2 years); stale after 10 days or when the newest BOP quarter is over a year old. Seeded-cache read: weight 1 on API plans, included in the signed-in free allowance. country (max 10) returns full views; counterpart adds both directions of each pair, each leg marked reported, not\_itemized or not\_published. Without country, a ranking of countries that have the sort metric (default outflow\_z; annual-only series have none) capped by limit (default 30, 0 for no cap).

Works for any economy and any pair: pass several `country` values to compare, add `counterpart` for bilateral detail, or omit `country` to rank the economies that have the chosen `sort` metric (the default `outflow_z` leaves out annual-only series, which have no z-score). Episode labels follow Forbes and Warnock (2012) and are derived from the reported flows. See [Capital Flows methodology](https://www.worldmonitor.app/docs/methodology/capital-flows.md) for every view, leg and status.

**Parameters (tool-specific):**

| Name | Type | Description |
| - | - | - |
| `country` | `array<string>` | Countries to return in full: ISO 3166-1 alpha-2 (e.g. "GB"), alpha-3 ("ARE") or English names. Omit to get the cross-country ranking. |
| `include_series` | boolean | With country, also return the period-by-period BOP flows (12 quarters or 6 years). Default false. |
| `counterpart` | string | With country, a partner country (alpha-2, alpha-3 or name). Returns pairs\[]: deposits each side's non-banks hold in the other's banks and bank lending each way (stock, 4-quarter flow, 8 quarters of history), each side's holdings of the other's securities, and direct investment each way with both sides' figures, plus the counterpart's own view. |
| `sort` | `string: outflow_z / inflow_z / outflows_pct_gdp / inflows_pct_gdp / net_usd_bn / bank_deposits_abroad_flow_4q / foreign_portfolio_change_pct` | Ranking field when country is omitted. outflow\_z / inflow\_z rank the latest Forbes-Warnock z-score; \*\_pct\_gdp rank trailing gross flows as a share of GDP; net\_usd\_bn ranks inflows minus outflows; bank\_deposits\_abroad\_flow\_4q ranks the 4-quarter change in non-bank deposits held in foreign banks; foreign\_portfolio\_change\_pct ranks the year-on-year change in foreign holdings of the country's securities. Default outflow\_z. |
| `ascending` | boolean | Sort ascending instead of descending. Default false. |
| `limit` | number | Cap the ranking to this many countries (default 30, pass 0 for no cap). Ignored with country. |

* **API endpoints:** `GET /api/economic/v1/get-capital-flows`
* **Access:** `free-account` — callable by any signed-in account; free accounts spend the daily free allowance, Pro calls spend the daily quota. Accepts the universal `summary` argument.
* **Kind:** cache read — sub-second response from Redis.
* **Freshness budget:** **10 d** since the last weekly seed, plus a content-age check: `stale` flips when the newest IMF BOP quarter is more than 12 months old.

```bash curl theme={null}
curl -s https://worldmonitor.app/mcp \
  -H "X-WorldMonitor-Key: $WM_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc":"2.0","id":1,
    "method":"tools/call",
    "params":{"name":"get_capital_flows","arguments":{"country":["DE"],"counterpart":"JP"}}
  }'
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.