Central Bank Rates MCP Server
Central Bank Rates MCP Server — @allratestoday/central-bank-mcp
Dale a tu asistente de IA los tipos de cambio oficiales que compliance, impuestos y contabilidad realmente requieren. Un servidor de Model Context Protocol que permite a Claude Code, Cursor, Claude Desktop, Windsurf y cualquier cliente compatible con MCP obtener tasas publicadas por bancos centrales y autoridades fiscales de más de 60 instituciones — BCE, Fed, Banco de Japón, HMRC, Tesoro de EE. UU. y más — a través de la API de AllRatesToday.
Después de la instalación, tu asistente puede responder preguntas como:
"¿Cuál es la tasa oficial USD/EUR del BCE hoy?"
"¿Qué tasa de HMRC debo usar para esta factura de marzo?"
"Muéstrame la tasa oficial del Banco de Japón para cada día del primer trimestre."
"Compara la tasa oficial USD/LKR en todos los bancos centrales que publiquen una."
⚖️ Tasas oficiales vs. tasas de mercado medio
Todo lo que devuelve este servidor es una tasa oficial publicada: fijada una vez que la institución la publica, con la fecha de publicación propia de esa institución — el número que exigen las autoridades fiscales, auditores y aduanas. No es la tasa de mercado en vivo. Para tasas de mercado medio en vivo (visualización de precios, conversión, cualquier cosa que deba seguir el mercado), usa el servidor complementario @allratestoday/mcp-server. Los dos pueden diferir en varios puntos porcentuales — elige según el caso de uso. Metodología: allratestoday.com/official-rates-methodology.
Related MCP server: plinth-fx-mcp
🚀 ¿Por qué este servidor?
🏛️ Más de 60 fuentes oficiales — bancos centrales (BCE, Fed, BOJ, SNB, RBI, …) además de autoridades fiscales (HMRC, Tesoro de EE. UU., …), cada una servida desde sus propias tablas publicadas
📅 Corrección en el tiempo — pide cualquier fecha; los fines de semana y días festivos retroceden a la tasa legalmente vigente, y la respuesta te indica qué fecha de publicación se aplicó
📊 Comparación entre bancos — una sola llamada devuelve la tasa de cada institución para un par, con estadísticas de mínimo, máximo, mediana y dispersión
🧮 Derivaciones honestas — los pares que un banco no publica directamente se calculan de forma cruzada solo dentro de la propia tabla de ese banco y se marcan como
derived; los bancos nunca se mezclan🧰 Cinco herramientas enfocadas — superficie pequeña, fácil para que el modelo las use correctamente
🔌 Funciona dondequiera que MCP funcione — transporte stdio, MCP 1.x; Claude Code, Cursor, Claude Desktop, Windsurf o cualquier host genérico
🔑 Obtén tu clave de API
El servidor no se iniciará sin una ALLRATES_API_KEY válida. Una clave gratuita cubre las últimas tablas publicadas — sin necesidad de tarjeta de crédito. Las tablas con fecha e historial requieren un plan de pago.
Regístrate en allratestoday.com/register — 30 segundos
Verifica tu correo electrónico
Copia tu clave desde el panel (formato:
art_live_xxxxx)Úsala como
ALLRATES_API_KEYen las configuraciones a continuación
📦 Instalación
# Run without installing (recommended)
npx -y @allratestoday/central-bank-mcp# Or install globally
npm install -g @allratestoday/central-bank-mcp
central-bank-mcpAmbos comandos lanzan el servidor MCP stdio y esperan a que un cliente se conecte — tu cliente MCP los lanza como subproceso.
🏁 Configuración rápida por cliente
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_xxxxxReinicia Claude Code. Verifica preguntando: "¿De qué bancos centrales puedes obtener tasas oficiales?"
Cursor
Edita ~/.cursor/mcp.json (o .cursor/mcp.json dentro de tu proyecto):
{
"mcpServers": {
"central-bank-rates": {
"command": "npx",
"args": ["-y", "@allratestoday/central-bank-mcp"],
"env": {
"ALLRATES_API_KEY": "art_live_xxxxx"
}
}
}
}Claude Desktop
Edita claude_desktop_config.json (Configuración → Desarrollador → Editar configuración) y agrega el mismo bloque mcpServers que en el ejemplo de Cursor, luego reinicia Claude Desktop.
🧰 Herramientas
Herramienta | Qué hace | Plan |
| Todas las instituciones cubiertas con códigos, metadatos, fecha más reciente | Gratis |
| La tabla publicada de un banco (o un par), más reciente o para una fecha dada | Gratis (más reciente) / De pago (con fecha) |
| Serie oficial fecha por fecha para un par | De pago, facturado ~1 llamada por mes cubierto |
| Un par en todos los bancos, con estadísticas de dispersión | Gratis |
| Fechas en que un banco realmente publicó (sin valores) | Gratis |
🔒 Privacidad
Solo los parámetros de la solicitud y tu clave de API llegan a allratestoday.com — nunca el contexto de la conversación.
📚 Más de AllRatesToday
@allratestoday/mcp-server— servidor MCP de tasas de mercado medio en vivo
Licencia
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.
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.7 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 gradedqualityBmaintenanceConvert currencies, get FX rates, and query historical ECB exchange rate data via MCP.408 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