# CurrencyCore

> Live FX rates, conversion, IMF PPP, and historical currency analytics.

- name: io.github.CurrencyCore/currency-core-mcp
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 97/100
- quality: 89/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.CurrencyCore%2Fcurrency-core-mcp
- tools: https://api.protogrid.dev/v1/servers/io.github.CurrencyCore%2Fcurrency-core-mcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "currency-core-mcp": {
      "type": "http",
      "url": "https://mcp.currency-core.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-100% +updated-4d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 89/100 (new)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 14 of 14 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 5,112 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`, `stability.new_links`: tool history recorded for 3 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 14, about 5,112 tokens to load them all
- tool set hash: 3a4d56c26f3a38db05fccb5fcca6b40e
- tools last changed: 2026-11-11T17:39:20.350Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.CurrencyCore/currency-core-mcp.svg)](https://protogrid.dev/servers/io.github.CurrencyCore/currency-core-mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-11 `analyze_mean_reversion` changed (title, description, outputSchema) **meaning changed**
  - before: Ranks currencies by how strongly they revert to their mean (crossing frequency + reversion half-life). Growth plan or higher.
  - after: Rank currencies by how strongly they revert to their historical mean, using a composite 0–100 score (crossing frequency + reversion half-life), plus current deviation and half-life in days. Use for questions like "does EUR snap back to its average". Provide `currencies` to score specific codes, or omit to rank the liquid set. Use `analyze_history` for raw change and `analyze_volatility` for dispersion. Defaults: roughly a 2-year window, `base` USD, `limit` 10. Returns `{ base, from, to, results[] }`; `score` and `halfLifeDays` are null when there is not enough reverting data. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- 2026-11-11 `analyze_safe_haven` changed (title, description, outputSchema) **meaning changed**
  - before: Ranks currencies by a composite safe-haven score (low volatility + shallow drawdown + 2008-crisis resilience). Growth plan or higher.
  - after: Rank currencies by a 0–100 safe-haven score that combines low volatility, shallow drawdown, and 2008-crisis resilience. Use for "which currency holds up in a crisis" questions. Provide `currencies` to score specific codes, or omit to rank the liquid-fiat pool. Precious metals are not supported. Use `analyze_volatility` for pure dispersion and `analyze_drawdown` for peak-to-trough loss. Defaults: window from 2007-01-01 (or 20 years before `to`), `base` USD, `limit` 10. Returns `{ base, from, to, crisis, results[] }`. Returns an error when no rate data is available for the window. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- 2026-11-11 `analyze_drawdown` changed (title, description, inputSchema, outputSchema) **meaning changed**
  - before: Maximum peak-to-trough decline vs a base (with peak/trough/recovery), or a drawdown ranking. Growth plan or higher.
  - after: Return the worst peak-to-trough decline of each currency vs `base`, with peak, trough, and recovery dates/days. Use for "how far did it fall and did it recover" questions or to rank the deepest drawdowns. Omit `currency` to rank the universe (`sort` deepest or recovery); provide one currency or a list to compare. Use `analyze_volatility` for dispersion and `analyze_safe_haven` for crisis behaviour. Defaults: 365-day window, `base` USD, `sort` deepest, `universe` liquid, `limit` 10. Returns `{ base, from, to, mode, results[] }`; peak/trough dates are omitted and recovery fields are null when there is no drawdown or recovery in the window. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- 2026-11-11 `analyze_correlation` changed (title, description, outputSchema) **meaning changed**
  - before: Correlation of each currency's daily returns with a base currency's, over a window. Growth plan or higher.
  - after: Return the Pearson correlation of each currency's daily returns with `base` over a window (−1..1), plus the number of overlapping observations. Use for diversification or co-movement questions such as "does CHF track EUR?". `currencies` is required and comma-separated; a non-USD `base` is usually more meaningful. Use `analyze_volatility` for dispersion and `analyze_history` for raw change. Defaults: 365-day window ending today. Returns `{ base, from, to, results[] }`; `correlation` is null when it is undefined for the window. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- 2026-11-11 `analyze_volatility` changed (title, description, inputSchema, outputSchema) **meaning changed**
  - before: Annualized volatility of a currency vs a base, or a stability ranking of the liquid currencies. Growth plan or higher.
  - after: Return annualized volatility (%) for each currency against `base`, with the number of daily returns used. Use to rank stability or find the most volatile currency or pair. Omit `currency` to rank the universe (`sort` stable or volatile); provide one currency or a comma-separated list to compare. Use `analyze_drawdown` for worst peak-to-trough loss and `analyze_safe_haven` for crisis resilience. Defaults: 365-day window, `base` USD, `sort` stable, `universe` liquid, `limit` 10. Returns `{ base, from, to, mode, basis, results[] }`; `volatility` is null when there is too little data. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- 2026-11-11 `analyze_ppp` changed (title, description, inputSchema, outputSchema) **meaning changed**
  - before: PPP over time: how a country's purchasing-power-parity factor changed, comparing countries, or 'movers'. Growth plan or higher.
  - after: Measure how a country's IMF PPP conversion factor changed over a year window: start/end year and factor, % change, and optional min/max/avg. Use for purchasing-power trends and cross-country PPP rankings. Omit `countries` to rank all countries (movers); provide ISO alpha-3 codes to compare specific ones. Use `get_ppp_factor` for a single country/year value, and `convert` with `ppp=true` to price an amount. Defaults: 10-year window, `sort` increased, `limit` 10, `stats` true. Returns `{ from, to, mode, stats, results[] }`, with `projected: true` marking an IMF projection. Returns an error when no PPP data exists in the window. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- 2026-11-11 `get_ppp_factor` changed (title, description, outputSchema) **meaning changed**
  - before: A single country's purchasing-power-parity conversion factor for a year (IMF World Economic Outlook).
  - after: Return the IMF World Economic Outlook PPP conversion factor for one country and year: local currency units per international dollar. Use when the user needs the raw multiplier for one country/year, for example a cost-of-living comparison. Use `convert` with `ppp=true` to price an amount, and `analyze_ppp` for change over time or a cross-country ranking. `year` defaults to the latest configured PPP year (2024). Returns `{ year, countryCode, pppFactor, projected }`; `projected: true` marks an IMF projection rather than observed data. An unknown country or year is a 404. Requires a signed-in connection; each successful call bills 1 API request.
- 2026-11-11 `analyze_history` changed (title, description, inputSchema, outputSchema) **meaning changed**
  - before: Trends, comparisons & 'movers': % change, strength, and min/max/avg over a window. Growth plan or higher.
  - after: Summarise how currencies moved against `base` over a window: start/end rate, change %, strengthened % (positive = stronger vs base), and optional min/max/avg. Use for questions like "how did EUR do over 10 years" and for movers rankings. Omit `currencies` to rank the universe (movers mode); provide them to compare specific ones. Use `get_history` for raw points, and the other `analyze_*` tools for volatility, correlation, drawdown, safe-haven, or mean-reversion questions. Defaults: 20-year window, `base` USD, `sort` strengthened, `assetClass` fiat, `limit` 10, `stats` true. Returns `{ base, from, to, mode, sort?, assetClass?, stats, results[] }`. A 404 means no rate data at the window edges. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- 2026-11-11 `get_history` changed (title, description, inputSchema, outputSchema) **meaning changed**
  - before: A single currency's daily rate time series over a date range. Free: last 30 days; Starter and above: full history.
  - after: Return one currency's rate series over a date range, expressed against `base`: `rates` maps each date (or aggregated period) to units of `currency` per 1 `base`. Use for a line chart or raw daily/weekly/monthly/yearly points for one currency. Use `analyze_history` for computed change, trend, and movers; use `convert` or `get_rates` for a single value or snapshot. Defaults: `to` today, `from` 7 days earlier, `base` USD, `interval` daily; coarser intervals average the daily rates per bucket. Returns `{ currency, base, interval, from, to, rates }`. Free plans are limited to the last 30 days; an invalid code or missing history is a 404. Requires a signed-in connection; each successful call bills 1 API request.
- 2026-11-11 `get_rates_by_base` changed (title, description, outputSchema) **meaning changed**
  - before: The same snapshot re-expressed against any base currency.
  - after: Return the daily FX snapshot re-based to `base`: every supported currency quoted as units per 1 unit of `base`, with `base` itself at 1. Use when the user wants a multi-currency table in a non-USD base (for example "rates in EUR"). Use `get_rates` for the USD table, `convert` for one pair or amount, and `get_history` for a time series. Omitting `date` returns the latest available snapshot, which is not necessarily today. Returns `{ base, date, rates }`; an unsupported base or a date with no snapshot is a 404. Requires a signed-in connection; each successful call bills 1 API request.

Full history: https://api.protogrid.dev/v1/servers/io.github.CurrencyCore%2Fcurrency-core-mcp/changes

## Remotes

- https://mcp.currency-core.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (14)

- `analyze_correlation`: Return the Pearson correlation of each currency's daily returns with `base` over a window (−1..1), plus the number of overlapping observations. Use for diversification or co-movement questions such as "does CHF track EUR?". `currencies` is required and comma-separated; a non-USD `base` is usually more meaningful. Use `analyze_volatility` for dispersion and `analyze_history` for raw change. Defaults: 365-day window ending today. Returns `{ base, from, to, results[] }`; `correlation` is null when it is undefined for the window. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- `analyze_drawdown`: Return the worst peak-to-trough decline of each currency vs `base`, with peak, trough, and recovery dates/days. Use for "how far did it fall and did it recover" questions or to rank the deepest drawdowns. Omit `currency` to rank the universe (`sort` deepest or recovery); provide one currency or a list to compare. Use `analyze_volatility` for dispersion and `analyze_safe_haven` for crisis behaviour. Defaults: 365-day window, `base` USD, `sort` deepest, `universe` liquid, `limit` 10. Returns `{ base, from, to, mode, results[] }`; peak/trough dates are omitted and recovery fields are null when there is no drawdown or recovery in the window. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- `analyze_history`: Summarise how currencies moved against `base` over a window: start/end rate, change %, strengthened % (positive = stronger vs base), and optional min/max/avg. Use for questions like "how did EUR do over 10 years" and for movers rankings. Omit `currencies` to rank the universe (movers mode); provide them to compare specific ones. Use `get_history` for raw points, and the other `analyze_*` tools for volatility, correlation, drawdown, safe-haven, or mean-reversion questions. Defaults: 20-year window, `base` USD, `sort` strengthened, `assetClass` fiat, `limit` 10, `stats` true. Returns `{ base, from, to, mode, sort?, assetClass?, stats, results[] }`. A 404 means no rate data at the window edges. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- `analyze_mean_reversion`: Rank currencies by how strongly they revert to their historical mean, using a composite 0–100 score (crossing frequency + reversion half-life), plus current deviation and half-life in days. Use for questions like "does EUR snap back to its average". Provide `currencies` to score specific codes, or omit to rank the liquid set. Use `analyze_history` for raw change and `analyze_volatility` for dispersion. Defaults: roughly a 2-year window, `base` USD, `limit` 10. Returns `{ base, from, to, results[] }`; `score` and `halfLifeDays` are null when there is not enough reverting data. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- `analyze_ppp`: Measure how a country's IMF PPP conversion factor changed over a year window: start/end year and factor, % change, and optional min/max/avg. Use for purchasing-power trends and cross-country PPP rankings. Omit `countries` to rank all countries (movers); provide ISO alpha-3 codes to compare specific ones. Use `get_ppp_factor` for a single country/year value, and `convert` with `ppp=true` to price an amount. Defaults: 10-year window, `sort` increased, `limit` 10, `stats` true. Returns `{ from, to, mode, stats, results[] }`, with `projected: true` marking an IMF projection. Returns an error when no PPP data exists in the window. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- `analyze_safe_haven`: Rank currencies by a 0–100 safe-haven score that combines low volatility, shallow drawdown, and 2008-crisis resilience. Use for "which currency holds up in a crisis" questions. Provide `currencies` to score specific codes, or omit to rank the liquid-fiat pool. Precious metals are not supported. Use `analyze_volatility` for pure dispersion and `analyze_drawdown` for peak-to-trough loss. Defaults: window from 2007-01-01 (or 20 years before `to`), `base` USD, `limit` 10. Returns `{ base, from, to, crisis, results[] }`. Returns an error when no rate data is available for the window. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- `analyze_volatility`: Return annualized volatility (%) for each currency against `base`, with the number of daily returns used. Use to rank stability or find the most volatile currency or pair. Omit `currency` to rank the universe (`sort` stable or volatile); provide one currency or a comma-separated list to compare. Use `analyze_drawdown` for worst peak-to-trough loss and `analyze_safe_haven` for crisis resilience. Defaults: 365-day window, `base` USD, `sort` stable, `universe` liquid, `limit` 10. Returns `{ base, from, to, mode, basis, results[] }`; `volatility` is null when there is too little data. Requires a signed-in connection and the Growth plan or higher; each successful call bills 1 API request.
- `convert`: Convert an amount from one currency to one or more targets at the reference rate for `date`, optionally PPP-adjusted. Use for any single-pair or amount conversion (for example "100 USD to EUR"). Use `get_rates`/`get_rates_by_base` for a full rate table, `get_history` for a series, and the `analyze_*` tools for statistics. `amount` defaults to 1 (each result then equals the rate); `ppp=true` applies purchasing-power parity and needs `CUR:COUNTRY` when a currency is used in more than one country; `date` must be today or earlier and defaults to the latest rate date. Returns `{ from, amount, date, results[] }`, each result carrying `result`, `rate`, and an optional `ppp` block. Invalid codes or dates return a 4xx error; no rate for the date is a 404. Requires a signed-in connection; each successful call bills 1 API request.
- `get_history`: Return one currency's rate series over a date range, expressed against `base`: `rates` maps each date (or aggregated period) to units of `currency` per 1 `base`. Use for a line chart or raw daily/weekly/monthly/yearly points for one currency. Use `analyze_history` for computed change, trend, and movers; use `convert` or `get_rates` for a single value or snapshot. Defaults: `to` today, `from` 7 days earlier, `base` USD, `interval` daily; coarser intervals average the daily rates per bucket. Returns `{ currency, base, interval, from, to, rates }`. Free plans are limited to the last 30 days; an invalid code or missing history is a 404. Requires a signed-in connection; each successful call bills 1 API request.
- `get_ppp_factor`: Return the IMF World Economic Outlook PPP conversion factor for one country and year: local currency units per international dollar. Use when the user needs the raw multiplier for one country/year, for example a cost-of-living comparison. Use `convert` with `ppp=true` to price an amount, and `analyze_ppp` for change over time or a cross-country ranking. `year` defaults to the latest configured PPP year (2024). Returns `{ year, countryCode, pppFactor, projected }`; `projected: true` marks an IMF projection rather than observed data. An unknown country or year is a 404. Requires a signed-in connection; each successful call bills 1 API request.
- `get_rates`: Return the full USD-based exchange-rate snapshot for one date: `rates` maps every supported currency to units per 1 USD. Use when the user wants a multi-currency table in USD (for example "today's rates"). Use `get_rates_by_base` for a non-USD base, `convert` for one pair or amount, and `get_history` for a time series. Omitting `date` returns the latest available snapshot, which is not necessarily today. Returns `{ base: "USD", date, rates }`; a date with no snapshot is a 404. Requires a signed-in connection; each successful call bills 1 API request.
- `get_rates_by_base`: Return the daily FX snapshot re-based to `base`: every supported currency quoted as units per 1 unit of `base`, with `base` itself at 1. Use when the user wants a multi-currency table in a non-USD base (for example "rates in EUR"). Use `get_rates` for the USD table, `convert` for one pair or amount, and `get_history` for a time series. Omitting `date` returns the latest available snapshot, which is not necessarily today. Returns `{ base, date, rates }`; an unsupported base or a date with no snapshot is a 404. Requires a signed-in connection; each successful call bills 1 API request.
- `list_countries`: Return the supported countries and their official currencies as an array of `{ code, name, currencies }`. Use to resolve a country name to its ISO alpha-3 code before `get_ppp_factor` or `analyze_ppp`, or to check which countries are covered. Use `list_currencies` for currency codes. Returns the full list in one call and takes no parameters. Public tool: no sign-in and no API request billed.
- `list_currencies`: Return the full ISO 4217 currency catalogue as an array of `{ code, numeric, name, symbol }`. Use to resolve a currency name or symbol to its code, or to confirm a currency is supported before calling another tool, so a typo fails at selection rather than silently. Use `list_countries` for country codes. Non-ISO codes CNH, GGP, IMP, and JEP have an empty `numeric`. Returns the full list in one call and takes no parameters. Public tool: no sign-in and no API request billed.
