Central Bank Rates MCP Server
Central Bank Rates MCP Server — @allratestoday/central-bank-mcp
Дайте вашему ИИ-ассистенту официальные обменные курсы, которые действительно нужны для комплаенса, налогов и бухгалтерии. Это сервер Model Context Protocol, который позволяет Claude Code, Cursor, Claude Desktop, Windsurf и любому MCP-совместимому клиенту получать опубликованные курсы центральных банков и налоговых органов из более чем 60 учреждений — ECB, Fed, Bank of Japan, HMRC, US Treasury и других — через AllRatesToday API.
После установки ваш ассистент сможет отвечать на вопросы вроде:
«Каков официальный курс USD/EUR от ECB на сегодня?»
«Какой курс HMRC мне использовать для этого мартовского инвойса?»
«Покажи официальный курс Bank of Japan на каждый день Q1.»
«Сравни официальный курс USD/LKR во всех центральных банках, которые его публикуют.»
⚖️ Официальные курсы против среднерыночных
Всё, что возвращает этот сервер, — это официально опубликованный курс: он фиксируется после публикации учреждением и несёт собственную дату публикации этого учреждения — тот показатель, который требуют налоговые органы, аудиторы и таможня. Это не живой рыночный курс. Для живых среднерыночных курсов (отображение цен, конвертация, всё, что должно отслеживать рынок) используйте сопутствующий сервер @allratestoday/mcp-server. Они могут расходиться на несколько процентов — выбирайте по сценарию использования. Методология: allratestoday.com/official-rates-methodology.
Related MCP server: plinth-fx-mcp
🚀 Почему этот сервер?
🏛️ 60+ официальных источников — центральные банки (ECB, Fed, BOJ, SNB, RBI, …) плюс налоговые органы (HMRC, US Treasury, …), каждый обслуживается из собственных опубликованных таблиц
📅 Точность на момент времени — запросите любую дату; выходные и праздники откатываются к курсу, юридически действующему на этот день, а ответ сообщает, какая дата публикации была применена
📊 Сравнение между банками — один вызов возвращает курсы всех учреждений для пары со статистикой мин/макс/медиана и спреда
🧮 Честные производные курсы — пары, которые банк не публикует напрямую, пересчитываются только внутри таблицы этого же банка и помечаются как
derived; банки никогда не смешиваются🧰 Пять узконаправленных инструментов — компактный набор, который модели легко использовать правильно
🔌 Работает везде, где работает MCP — транспорт stdio, MCP 1.x; Claude Code, Cursor, Claude Desktop, Windsurf или любой универсальный хост
🔑 Получите API-ключ
Сервер не запустится без действующего ALLRATES_API_KEY. Бесплатный ключ покрывает самые свежие опубликованные таблицы — кредитная карта не требуется. Таблицы за конкретные даты и история требуют платного тарифа.
Зарегистрируйтесь на allratestoday.com/register — 30 секунд
Подтвердите вашу электронную почту
Скопируйте ключ из панели управления (формат:
art_live_xxxxx)Используйте его как
ALLRATES_API_KEYв приведённых ниже конфигурациях
📦 Установка
# Run without installing (recommended)
npx -y @allratestoday/central-bank-mcp# Or install globally
npm install -g @allratestoday/central-bank-mcp
central-bank-mcpОбе команды запускают stdio MCP-сервер и ожидают подключения клиента — ваш MCP-клиент запускает их как подпроцесс.
🏁 Быстрая настройка для каждого клиента
Claude Code
claude mcp add central-bank-rates -- npx -y @allratestoday/central-bank-mcp
claude mcp env central-bank-rates ALLRATES_API_KEY=art_live_xxxxxПерезапустите Claude Code. Проверьте, спросив: «Из каких центральных банков ты можешь получать официальные курсы?»
Cursor
Отредактируйте ~/.cursor/mcp.json (или .cursor/mcp.json внутри вашего проекта):
{
"mcpServers": {
"central-bank-rates": {
"command": "npx",
"args": ["-y", "@allratestoday/central-bank-mcp"],
"env": {
"ALLRATES_API_KEY": "art_live_xxxxx"
}
}
}
}Claude Desktop
Отредактируйте claude_desktop_config.json (Settings → Developer → Edit Config) и добавьте тот же блок mcpServers, что и в примере для Cursor выше, затем перезапустите Claude Desktop.
🧰 Инструменты
Инструмент | Что делает | Тариф |
| Все охваченные учреждения с кодами, метаданными и последней датой | Бесплатно |
| Опубликованная таблица банка (или одна пара), последняя или за указанную дату | Бесплатно (последняя) / Платно (за дату) |
| Официальный ряд по датам для одной пары | Платно, тарифицируется ~1 вызов за покрываемый месяц |
| Одна пара по всем банкам со статистикой спреда | Бесплатно |
| Даты, когда банк фактически публиковал (без значений) | Бесплатно |
🔒 Конфиденциальность
На allratestoday.com передаются только параметры запроса и ваш API-ключ — никогда контекст разговора.
📚 Ещё от AllRatesToday
@allratestoday/mcp-server— MCP-сервер с живыми среднерыночными курсами
Лицензия
MIT © AllRatesToday
Available Tools
5 toolscompare_official_ratesCompare one pair across every bankARead-only
Use this when the user wants one currency pair across ALL institutions at once — 'what does each central bank say USD/EUR is?', 'spread between official USD/LKR rates', 'which bank has the highest official rate for X?'. One call returns every covered bank's latest official rate for the pair plus spread stats { min, max, median, spread_bps } over fresh sources (stale quarterly publishers are returned but excluded from stats). Rates a bank doesn't publish directly are cross-computed within that bank's own table only — banks are never mixed. Methodology: https://allratestoday.com/official-rates-methodology/
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ISO 4217 currency code, 3 letters, case-insensitive (e.g. 'USD', 'EUR', 'LKR'). | |
| target | Yes | ISO 4217 currency code, 3 letters, case-insensitive (e.g. 'USD', 'EUR', 'LKR'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/openWorldHint annotations by disclosing what the call returns (latest rates plus spread stats), how stale quarterly publishers are handled, that missing rates are cross-computed only within the same bank's table, and that banks are never mixed. It even links to a methodology page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized: use case and examples first, then return shape, then edge-case handling, then methodology link. Every sentence adds relevant behavioral info, though it is slightly longer than the minimum needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the return contents and stats fields, and by explaining staleness and cross-computation rules. It does not spell out the exact JSON shape or what 'covered bank' means, but the methodology link and sibling list_central_banks fill most gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both source and target fully documented by ISO 4217 patterns and examples. The description reinforces the 'currency pair' concept but adds no new parameter-level meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: compare one currency pair across ALL institutions at once. It gives concrete example queries and emphasizes the cross-bank scope, which distinguishes it from per-bank or per-pair siblings like get_official_rates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'Use this when the user wants one currency pair across ALL institutions at once' and provides example user phrasings. It does not explicitly name alternative tools or state when not to use it, but the use-case framing is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_official_rate_historyGet a bank's official rate historyARead-only
Use this for a date-by-date series of one bank's OFFICIAL rates — 'ECB USD rate for every day of 2025', 'how did the CBSL official rate move last quarter'. Returns one row per published date: { series: [{ date, rate, rate_type, derived, method }] }. Give either symbol (matches either side of the pair vs the bank's home currency) or a source+target pair. Defaults to the last year when from/to omitted. Paid plans only, and BILLED BY VOLUME: one API call per month of history covered (a year-long series costs ~12 calls) — keep ranges as narrow as the question needs. For publication dates without values (free) use get_publication_calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date. Defaults to today. | |
| bank | Yes | Bank/authority code as returned by list_central_banks (lowercase, e.g. 'ecb', 'fed', 'boj', 'hmrc', 'cbsl'). Call list_central_banks first if unsure — codes are short abbreviations of the institution, not country codes. | |
| from | No | Start date. Defaults to one year ago. | |
| source | No | ISO 4217 currency code, 3 letters, case-insensitive (e.g. 'USD', 'EUR', 'LKR'). | |
| symbol | No | One currency vs the bank's home currency, e.g. 'USD'. Alternative to source+target. | |
| target | No | ISO 4217 currency code, 3 letters, case-insensitive (e.g. 'USD', 'EUR', 'LKR'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover readOnly and openWorld hints, so the bar is lower, yet the description still adds high-value non-obvious behavior: the exact return shape since there is no output schema, the paid-plans-only requirement, and the volume-based billing model (one API call per month of history). The BILLED BY VOLUME warning is exactly the kind of behavioral context an agent needs to avoid costly misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six dense sentences, each earning its place: purpose, examples, return shape, parameter alternatives, defaults, billing warning, and sibling routing. The most important scoping info is front-loaded, and the description is structured logically from what → output → how → constraints. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema, the description is complete: it provides the return format inline ({ series: [{ date, rate, rate_type, derived, method }] }), explains parameter alternatives and defaults, discloses billing cost that shapes range choices, and routes to get_publication_calendar for a related use case. Annotations cover safety (readOnly) and world-data behavior (openWorld). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3 applies. The description does add modest semantic value beyond the schema by explaining the either/or relationship between `symbol` and source+target ('Give either symbol... or a source+target pair') and clarifying that symbol 'matches either side of the pair vs the bank's home currency'. This clarifies rather than replaces the schema, which remains the primary parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource+scope: 'Use this for a date-by-date series of one bank's OFFICIAL rates' and grounds it in concrete examples ('ECB USD rate for every day of 2025'). It implicitly distinguishes from siblings through 'one bank's' (vs compare_official_rates) and 'date-by-date series' (vs get_official_rates), and explicitly from get_publication_calendar. An agent can tell exactly what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the when explicitly ('Use this for a date-by-date series...'), gives a direct when-not with an alternative ('For publication dates without values (free) use get_publication_calendar'), and adds hard operational guidance that affects invocation decisions ('keep ranges as narrow as the question needs' due to per-month billing). This fully routes the agent across the sibling space.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_official_ratesGet a bank's official published ratesARead-only
Use this for OFFICIAL rates a specific institution published — 'what is the ECB rate for USD?', 'Bank of Japan official rate on 2026-03-14', 'HMRC rate for invoicing'. These are the fixed rates in force for compliance, tax, customs, and accounting — NOT live market rates. Omit date for the newest published table; give date (paid plans) for the table in force on that day (weekends/holidays roll back to the last published date — the response's rate_date says which). Omit source/target for the bank's full table { rates: [{ base, quote, type, value }] }; give both for one pair — cross-computed via the bank's own home currency when not directly published, flagged derived. For live mid-market rates use the @allratestoday/mcp-server package instead.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank/authority code as returned by list_central_banks (lowercase, e.g. 'ecb', 'fed', 'boj', 'hmrc', 'cbsl'). Call list_central_banks first if unsure — codes are short abbreviations of the institution, not country codes. | |
| date | No | Optional YYYY-MM-DD. Omit for the latest published table (all plans). A specific date requires a paid plan. | |
| source | No | Optional. With target, narrows to one pair. | |
| target | No | Optional. With source, narrows to one pair. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly and openWorld, and the description adds behavior beyond that: weekend/holiday rollback to the last published date, a derived flag when cross-computed, paid-plan gating for date, and the response's rate_date field. This gives the agent operational knowledge not inferable from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the purpose and followed by examples, parameter semantics, and an alternative. No filler or redundancy; each sentence adds a distinct operational fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description covers the return shapes ({rates:[...]} and derived flags), edge cases (weekends/holidays, paid plans), input selection, and the alternative for live rates. Sibling tools are not explicitly routed, but the scope is defined clearly enough that history/comparison/calendar tools are not confused with this point-in-time official rate lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3, but the description meaningfully enriches each parameter: bank codes are lowercase abbreviations (call list_central_banks first), date is optional and requires a paid plan for specific days, and source/target must be given together to narrow to one pair. It also explains output shape implications, which the schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leads with a specific verb and resource: getting official published rates from a specific institution. Concrete examples ('ECB rate for USD', 'HMRC rate for invoicing') and the explicit contrast with live market rates make the tool's purpose unmistakable and distinguish it from other rate-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool ('Use this for OFFICIAL rates...') and when not ('NOT live market rates'), and names the alternative package for live mid-market rates. It also gives parameter-based guidance: omit date for latest, supply date for a specific table, omit source/target for full table, provide both for one pair.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_publication_calendarGet a bank's publication calendarARead-only
Use this to see WHICH dates a bank actually published a rate table — 'did the ECB publish on 2026-01-01?', 'how often does the US Treasury publish?'. Returns dates only, no rate values, so it is available on every plan (unlike history). Gaps reveal weekends, holidays, and weekly/quarterly publication cadence. Give ?year=YYYY or a from/to range; large ranges are capped and flagged truncated.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Calendar date in YYYY-MM-DD format. | |
| bank | Yes | Bank/authority code as returned by list_central_banks (lowercase, e.g. 'ecb', 'fed', 'boj', 'hmrc', 'cbsl'). Call list_central_banks first if unsure — codes are short abbreviations of the institution, not country codes. | |
| from | No | Calendar date in YYYY-MM-DD format. | |
| year | No | Whole calendar year, e.g. '2026'. Alternative to from/to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the read-only nature is covered. The description adds valuable behavior: it returns only dates, caps large ranges and flags them with `truncated`, and interprets gaps as weekends/holidays/cadence. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the primary use case and examples, then constraints and caveats. No wasted words; every sentence carries semantic weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description covers the key operational concerns: what is returned (dates only), what is excluded (rate values), and how range limits behave (truncation). It could be more explicit about the exact output shape, but the 'dates only' statement is a reasonable substitute given the missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 strengthens parameter understanding by prescribing '?year=YYYY or a from/to range', noting `year` is an alternative to from/to, and warning that large ranges are capped. This is genuine added meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource — 'see WHICH dates a bank actually published a rate table' — and gives concrete example questions. It explicitly differentiates itself from history/rates tools by stating it 'Returns dates only, no rate values', so an agent can distinguish it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It frames the tool with use cases ('did the ECB publish on 2026-01-01?', 'how often does the US Treasury publish?') and notes it is 'available on every plan (unlike history)'. It doesn't name every sibling alternative or spell out when to choose get_official_rate_history or compare_official_rates, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_central_banksList covered central banks & tax authoritiesARead-only
Call this FIRST when you need a bank code, or when the user asks 'which central banks do you cover?' or 'do you have rates from X?'. Returns { banks: [{ code, name, country, home_ccy, rate_types, latest date, ... }], disclaimer } for 60+ institutions — central banks (ECB, Fed, BOJ, ...) plus tax authorities (HMRC, US Treasury, ...). The code field is what every other tool takes as its bank parameter. Cheap to call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, and the description adds useful behavioral context: it returns a specific shape, covers 60+ institutions, includes tax authorities as well as central banks, and notes that it is cheap to call. This is more than annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences with the most important instruction front-loaded. Every sentence adds value: when to call, what is returned, and how the result connects to other tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only discovery endpoint, the description is complete enough even without an output schema. It names the key fields of the response, explains coverage, and gives concrete usage triggers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly focuses on what the response provides rather than parameter details, and the input schema already confirms no arguments are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: listing covered central banks and tax authorities. It also distinguishes this discovery tool from rate/history/calendar siblings by emphasizing it is the lookup for bank codes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call this FIRST when a bank code is needed, and shows example user queries that should trigger it. It also explains that the returned `code` is the parameter used by every other tool, making the relationship to alternatives explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.2.0- First observed
compare_official_rates - First observed
get_official_rate_history - First observed
get_official_rates - First observed
get_publication_calendar - First observed
list_central_banks
TDQS
Scored across 5 tools
Each tool maps to a distinct task: bank discovery, single-institution official rate lookup, historical series, cross-institution comparison, and publication-date lookup. Even the two rate retrieval tools are clearly separated by snapshot vs history, and compare_official_rates is explicitly cross-institution.
Most tools follow a readable get_/list_/compare_ + domain-noun pattern, with get_official_rates and get_official_rate_history clearly parallel. list_central_banks and compare_official_rates use different verbs, but the distinction is logical and predictable.
Five tools is well-scoped for a central bank rates server: no redundancy, and each tool covers a distinct query type. The count feels neither thin nor bloated.
The surface covers the core domain completely: discover banks, get current official rates, get history, compare across banks, and check publication calendars. Live market rates are intentionally out of scope and explicitly deferred to another package, so there are no material dead ends.
Maintenance
Related MCP Connectors
Live FX + official central-bank rates, 110+ sources. Hosted, keyless, nothing to install.
Official exchange rates from central banks: latest & historical rates plus currency conversion.
ExchangeRate MCP — wraps open.er-api.com (free, no auth)
Indicative fiat and crypto rates over MCP, paid per request via x402 at $0.0001/request.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceReal-time currency exchange rates and crypto prices via MCP. Convert between 60+ fiat currencies and 30+ cryptocurrencies with multi-source failover. No API keys needed for upstream data.8 npmISC
- -licenseNot gradedqualityNot gradedmaintenanceMCP server that provides real exchange-rate data from the European Central Bank, including latest rates, currency conversion, historical rates, and time series.-
- AlicenseNot gradedqualityAmaintenanceConvert currencies, get FX rates, and query historical ECB exchange rate data via MCP.134 npm1Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables querying official Brazilian Central Bank currency exchange rates and quotes through a read-only MCP tool, with pay-per-use prepaid credits.MIT