Central Bank Rates MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Central Bank Rates MCP ServerWhat is the ECB's official USD/EUR rate for today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Central Bank Rates MCP Server — @allratestoday/central-bank-mcp
Give your AI assistant the official exchange rates that compliance, tax, and accounting actually require. A Model Context Protocol server that lets Claude Code, Cursor, Claude Desktop, Windsurf, and any MCP-compatible client fetch published central-bank and tax-authority rates from 60+ institutions — ECB, Fed, Bank of Japan, HMRC, US Treasury, and more — via the AllRatesToday API.
After installation, your assistant can answer questions like:
"What is the ECB's official USD/EUR rate today?"
"What HMRC rate should I use for this March invoice?"
"Show me the Bank of Japan's official rate for every day of Q1."
"Compare the official USD/LKR rate across every central bank that publishes one."
⚖️ Official rates vs mid-market rates
Everything this server returns is an official published rate: fixed once the institution publishes it, carrying that institution's own publication date — the number tax authorities, auditors, and customs require. It is not the live market rate. For live mid-market rates (price display, conversion, anything that should track the market), use the companion server @allratestoday/mcp-server. The two can diverge by several percent — pick by use case. Methodology: allratestoday.com/official-rates-methodology.
Related MCP server: Realtime Exchange Rate MCP Server
🚀 Why this server?
🏛️ 100+ official sources — central banks (ECB, Fed, BOJ, SNB, RBI, …) plus tax authorities (HMRC, US Treasury, …), each served from its own published tables
📅 Point-in-time correctness — ask for any date; weekends and holidays roll back to the rate legally in force, and the response tells you which publication date applied
📊 Cross-bank comparison — one call returns every institution's rate for a pair, with min/max/median and spread stats
🧮 Honest derivations — pairs a bank doesn't publish directly are cross-computed only within that bank's own table and flagged
derived; banks are never mixed🔓 Works with no API key — installs and answers out of the box; the latest published table of every source is open
🧰 Five focused tools — small surface, easy for the model to use correctly
🔌 Works everywhere MCP does — stdio transport, MCP 1.x; Claude Code, Cursor, Claude Desktop, Windsurf, or any generic host
🔓 Keyless mode — what works with no setup
Install it with no configuration at all and it starts, connects, and answers:
Tool | Keyless | What you get |
| ✅ | Every covered institution, from a catalogue bundled with the package (no coverage dates). |
| ✅ | The latest published table of any source, or one pair from it, with the publisher's own |
| 🔑 | One sentence explaining how to get a key. |
| 🔑 | Same. |
| 🔑 | Same. |
| 🔑 | Same. |
The keyless path reads the open, edge-cached /api/open/central-bank/{bank}
endpoint — free to use with a visible attribution link back to allratestoday.com
(the exact wording ships in each response's attribution field).
🔑 Get your API key (free)
A key adds historical dates, time series, cross-bank comparison and publication calendars. The free tier covers the latest published tables and light historical use — no credit card required. Deep history and dated tables need a paid plan.
Register at allratestoday.com/register — 30 seconds
Verify your email
Copy your key from the dashboard (format:
art_live_xxxxx)Use it as
ALLRATES_API_KEYin the configs below
Without one the server prints a short summary of keyless mode on stderr and keeps running — it never exits, because an MCP server that exits breaks the host client's whole configuration.
🧩 Easiest install: the Claude Code plugin
If you use Claude Code, install the plugin instead of configuring this server by
hand — it bundles both AllRatesToday MCP servers, two skills, and five slash
commands (/rate, /convert, /official-rate, /fx-history,
/add-currency-support):
/plugin marketplace add AllRates-Today/claude-code-plugin
/plugin install allratestoday@allratestodayEverything below still applies for other MCP clients.
📦 Installation
# Run without installing (recommended)
npx -y @allratestoday/central-bank-mcp# Or install globally
npm install -g @allratestoday/central-bank-mcp
central-bank-mcpBoth commands launch the stdio MCP server and wait for a client to connect — your MCP client launches them as a subprocess.
🏁 Quick setup per client
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_xxxxxRestart Claude Code. Verify by asking: "Which central banks can you fetch official rates from?"
Cursor
Edit ~/.cursor/mcp.json (or .cursor/mcp.json inside your project):
{
"mcpServers": {
"central-bank-rates": {
"command": "npx",
"args": ["-y", "@allratestoday/central-bank-mcp"],
"env": {
"ALLRATES_API_KEY": "art_live_xxxxx"
}
}
}
}Claude Desktop
Edit claude_desktop_config.json (Settings → Developer → Edit Config) and add the same mcpServers block as the Cursor example above, then restart Claude Desktop.
🧰 Tools
Tool | What it does | Plan |
| All covered institutions with codes, metadata, latest date | Free (keyless: bundled catalogue) |
| A bank's published table (or one pair), latest or for a given date | Keyless (latest) / Paid (dated) |
| Date-by-date official series for one pair | Paid, billed ~1 call per month covered |
| One pair across every bank, with spread stats | Free (key required) |
| Dates a bank actually published (no values) | Free (key required) |
🔒 Privacy
Only the request parameters and your API key ever reach allratestoday.com — never conversation context.
📚 More from AllRatesToday
@allratestoday/mcp-server— live mid-market rates MCP server
License
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
Official exchange rates from central banks: latest & historical rates plus currency conversion.
ExchangeRate MCP — wraps open.er-api.com (free, no auth)
Real-time & historical crypto and fiat exchange rates, median-aggregated from multiple sources.
National Bank of Romania (Banca Naţională a României, BNR) FX reference rates MCP. Keyless.
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.8ISC
- AlicenseAqualityBmaintenanceProvides real-time foreign-exchange rates, historical data, and multi-currency lookups to MCP-compatible AI coding assistants like Claude Code and Cursor.4135MIT
- -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.631Apache 2.0