AllRatesToday MCP Server
AllRatesToday MCP Server
English | 简体中文
Give your AI coding assistant a live window into the foreign-exchange market.
A Model Context Protocol server that lets Claude Code, Cursor, Claude Desktop, Windsurf, and any other MCP-compatible client fetch real-time currency rates, historical data, and multi-currency lookups from the AllRatesToday API.
After installation, your assistant can answer questions like:
"What's the current USD to EUR rate?"
"Show me how GBP/JPY moved over the last 30 days."
"Convert 250 USD into CAD at a real rate."
"Compare USD against EUR, GBP, and JPY simultaneously."
"List every supported currency."
Table of contents
Related MCP server: xe-mcp
What you get
Capability | Detail |
Currencies | 150+ ISO 4217 codes, all major and most exotics |
Update frequency | Mid-market rates refresh every ~60 seconds |
Data source | Tier-1 financial data providers (Reuters / Refinitiv-class) |
Historical depth | Up to 1 year via |
Tools exposed | 4 — |
Transport | stdio (subprocess), MCP 1.x compatible |
Runtime | Node.js ≥18 |
Get an API key (required)
The server will not start without a valid ALLRATES_API_KEY. A free key is enough for development and personal use — no credit card required.
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
If you forget, the server prints clear registration instructions on stderr and exits with code 1.
Install
The server is published as an npm package. The simplest install is zero-install via npx, which is what every config below uses.
# Run without installing (recommended)
npx -y @allratestoday/mcp-server
# Or install globally
npm install -g @allratestoday/mcp-server
allratestoday-mcpBoth commands launch the stdio MCP server and wait for a client to connect. They're not meant to be run directly from your shell — your MCP client launches them as a subprocess.
Quick setup per client
Each client reads MCP servers from a different config file. Pick yours below.
Claude Code
The fastest path uses the built-in CLI:
claude mcp add allratestoday -- npx -y @allratestoday/mcp-server
claude mcp env allratestoday ALLRATES_API_KEY=art_live_xxxxxRestart Claude Code. Verify by asking it: "What's the current USD to EUR rate?"
Cursor
Edit ~/.cursor/mcp.json (or .cursor/mcp.json inside your project for project-scoped servers):
{
"mcpServers": {
"allratestoday": {
"command": "npx",
"args": ["-y", "@allratestoday/mcp-server"],
"env": {
"ALLRATES_API_KEY": "art_live_xxxxx"
}
}
}
}Restart Cursor. The four tools should appear in the MCP tool picker.
Claude Desktop
Edit the config file (path depends on OS):
OS | Path |
macOS |
|
Windows |
|
Linux |
|
{
"mcpServers": {
"allratestoday": {
"command": "npx",
"args": ["-y", "@allratestoday/mcp-server"],
"env": {
"ALLRATES_API_KEY": "art_live_xxxxx"
}
}
}
}Fully quit and reopen Claude Desktop (Cmd+Q on macOS, right-click tray icon → Exit on Windows). Closing the window alone keeps the old config loaded.
Windsurf
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"allratestoday": {
"command": "npx",
"args": ["-y", "@allratestoday/mcp-server"],
"env": {
"ALLRATES_API_KEY": "art_live_xxxxx"
}
}
}
}Restart Windsurf.
Generic stdio MCP client
Any MCP host that supports stdio transport works. The launch command is:
npx -y @allratestoday/mcp-server…with the environment variable ALLRATES_API_KEY set. The protocol version is MCP 1.x.
Verify it works
After configuring your client, test in this order:
Server starts — open the client. If the MCP integration shows a red dot or "failed to connect", the API key is missing or wrong (see Troubleshooting).
Tools are listed — most clients have a "tools" or "MCP" panel. You should see:
get_exchange_rateget_historical_ratesget_rates_authenticatedlist_currencies
A live call returns a number — ask the assistant:
What's the current USD to EUR rate?
The assistant will call
get_exchange_rate(source: "USD", target: "EUR")and reply with a real rate (e.g."USD to EUR is currently 0.9214."). If it fabricates a number without making a tool call, the server isn't connected.
Tools reference
All four tools require ALLRATES_API_KEY.
get_exchange_rate
Current mid-market rate between two currencies.
Input
Field | Type | Required | Description |
| string | yes | 3-letter ISO 4217 code, e.g. |
| string | yes | 3-letter ISO 4217 code, e.g. |
Example call
{ "source": "USD", "target": "EUR" }Example response
{ "rate": 0.92145, "source": "wise" }get_historical_rates
Time-series data points for a currency pair over a fixed period.
Input
Field | Type | Required | Description |
| string | yes | Source currency code |
| string | yes | Target currency code |
| string | no (default | One of |
Granularity by period
| Data points |
| Hourly (24 points) |
| Daily (7 points) |
| Daily (30 points) |
| Weekly (52 points) |
Example call
{ "source": "USD", "target": "INR", "period": "30d" }Example response (truncated)
{
"source": "USD",
"target": "INR",
"period": "30d",
"data": [
{ "date": "2026-03-27T00:00:00Z", "rate": 83.42, "timestamp": 1743033600000 },
{ "date": "2026-03-28T00:00:00Z", "rate": 83.51, "timestamp": 1743120000000 },
"..."
]
}get_rates_authenticated
Multiple targets in one call, with optional historical timestamp or grouping window.
Input
Field | Type | Required | Description |
| string | yes | Source currency code |
| string | yes | One or more codes, comma-separated ( |
| string (ISO 8601) | no | Historical point in time |
| string | no | One of |
Example call
{ "source": "USD", "target": "EUR,GBP,JPY" }Example response
[
{ "rate": 0.9214, "source": "USD", "target": "EUR", "time": "2026-04-26T11:00:00Z" },
{ "rate": 0.7891, "source": "USD", "target": "GBP", "time": "2026-04-26T11:00:00Z" },
{ "rate": 151.34, "source": "USD", "target": "JPY", "time": "2026-04-26T11:00:00Z" }
]list_currencies
All supported currencies with codes, names, and symbols. Cached upstream for 24 hours.
Input — none.
Example response (truncated)
{
"currencies": [
{ "code": "USD", "name": "US Dollar", "symbol": "$" },
{ "code": "EUR", "name": "Euro", "symbol": "€" },
{ "code": "GBP", "name": "British Pound", "symbol": "£" },
"..."
],
"count": 162
}Environment variables
Variable | Default | Required | Purpose |
| — | yes | Your API key. The server exits at startup if unset. |
|
| no | Override for self-hosted or staging deployments. |
You set these in your MCP client's config (in the env block) — not in your shell — because MCP servers are launched as subprocesses with isolated environments.
Plans
A free tier and paid plans are available. See allratestoday.com/pricing for current quotas. All plans include the same currency coverage and historical depth — only the request quotas differ.
Troubleshooting
Symptom | Likely cause | Fix |
Client shows "MCP server failed to start" or red dot |
| Verify the key in your client config; check it matches the dashboard |
Tools show but every call returns "Invalid AllRatesToday API key" | Key is malformed (missing prefix, truncated, or revoked) | Copy a fresh key from the dashboard |
Tools return "AllRatesToday API quota exceeded" | Free-tier monthly limit hit | Wait until next month or upgrade plan |
Historical tool returns "Bad request" | Invalid period or unknown currency code | Period must be |
Server starts but tools never appear in client | Client didn't reload after config change | Fully quit (not just close) and reopen the client |
| The server is waiting for an MCP client to connect — this is normal when run from a shell | Don't run from a shell; let your MCP client launch it |
Inspect server logs
To see what the server is doing, run it manually with the API key set:
ALLRATES_API_KEY=art_live_xxxxx npx -y @allratestoday/mcp-serverYou should see no output when healthy (stdio is reserved for the MCP protocol). Any errors print to stderr.
Error reference
The server maps API errors to clear, actionable messages.
HTTP status | Meaning | Tool error message |
200 | Success | (rate returned) |
400 | Bad request — usually unknown currency code |
|
401 | Invalid or missing API key |
|
429 | Quota exceeded |
|
5xx | Server-side issue at allratestoday.com |
|
The LLM will surface these messages in its response, so a user prompt that hits a 429 results in the assistant saying "the API quota has been exceeded — please try again next month or upgrade your plan."
FAQ
Is the free plan really enough for normal use? Yes for personal/dev use. The free tier covers a few daily questions. Heavy interactive use, multiple chat sessions per day, or running the server in production should consider the paid tiers.
Do you store my conversation or query data? No. Only your API key and the request parameters (source, target, period, time) are sent to allratestoday.com — never the LLM's conversation context, sheet contents, or anything else.
What happens to my API key?
It's only sent as a Bearer token in the Authorization header on requests to the AllRatesToday API. It's never logged or transmitted elsewhere.
Why is my historical request slow on first call?
Cold-start of npx (first run downloads the package) plus the initial AllRatesToday cache miss. Subsequent calls are fast (<200ms typically).
Can I run this without npm/Node? Not currently — Node ≥18 is required. We've considered a standalone binary; if that matters to you, open an issue.
Is there a self-hosted option?
Yes, set ALLRATES_BASE_URL to your own AllRatesToday instance. Contact support@allratestoday.com for self-hosted licensing.
Does this work with ChatGPT? The Anthropic MCP standard works with any MCP-compatible client. ChatGPT Desktop has experimental MCP support; check OpenAI's docs for current status.
Development
git clone https://github.com/cahthuranag/mcp-server.git
cd mcp-server
npm install
npm run build
ALLRATES_API_KEY=art_live_xxxxx node dist/index.jsThe server runs on stdio and waits for an MCP client to connect. Hit Ctrl+C to exit.
To watch and rebuild on changes during development:
npm run devTo test against a local AllRatesToday instance:
ALLRATES_BASE_URL=http://localhost:8080/api ALLRATES_API_KEY=test_key node dist/index.jsProject structure
src/
├── index.ts # MCP server, tool registration, request handlers
└── client.ts # HTTP client for AllRatesToday API + error mapping
dist/ # Compiled JS (gitignored)
server.json # MCP registry manifest
package.json # npm metadata, dependencies, scriptsContributing
Issues and PRs welcome at github.com/cahthuranag/mcp-server. Before opening a PR:
npm run buildshould succeed with no errorsTest against a real AllRatesToday API key (set in
ALLRATES_API_KEY)Update tool descriptions in
src/index.tsif you change tool behaviorUpdate this README's "Tools reference" section if you add or rename a tool
Changelog
See GitHub Releases for the full list. Recent highlights:
0.3.x — API key required for all tools; fail-fast at startup with clear error
0.2.x — Removed news tool, required auth on
get_historical_rates0.1.x — Initial release with 5 tools
Support
API issues: support@allratestoday.com
Bug reports: github.com/cahthuranag/mcp-server/issues
MCP questions: modelcontextprotocol.io — protocol docs
Status / uptime: allratestoday.com (status page in development)
License
MIT — see LICENSE.
Available Tools
4 toolsget_exchange_rateAInspect
Get the current mid-market exchange rate between two currencies. Returns a single rate number. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ISO 4217 currency code (e.g. USD, EUR, GBP). | |
| target | Yes | ISO 4217 currency code (e.g. USD, EUR, GBP). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses key behavioral traits: returns a 'single rate number' (output format), 'No API key required' (authentication needs), and 'current mid-market' (rate type). It doesn't mention rate limits, error conditions, or data freshness, but provides useful operational context.
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 concise sentences that each earn their place: states purpose, specifies return format, and discloses authentication requirement. No wasted words, front-loaded with core functionality.
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 2-parameter read operation with no output schema, the description provides good coverage: purpose, return format, and authentication context. It could mention data source or refresh frequency for completeness, but covers the essentials well given the tool's simplicity.
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%, so the schema already documents both parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema (both parameters are ISO 4217 codes). Baseline 3 is appropriate when schema does the heavy lifting.
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 the verb ('Get'), resource ('current mid-market exchange rate'), and scope ('between two currencies'). It distinguishes from sibling tools by specifying it returns a 'single rate number' (vs. historical rates or authenticated rates) and 'No API key required' (vs. get_rates_authenticated).
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 provides clear context for when to use this tool ('Get the current mid-market exchange rate') and implicitly contrasts with siblings through 'No API key required' (vs. get_rates_authenticated) and 'single rate number' (vs. historical data). However, it doesn't explicitly state when NOT to use this tool or name alternatives directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historical_ratesBInspect
Get historical exchange-rate data points for a currency pair over a period. Periods: 1d (hourly), 7d (daily), 30d (daily), 1y (weekly). Requires an AllRatesToday API key (ALLRATES_API_KEY).
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ISO 4217 currency code (e.g. USD, EUR, GBP). | |
| target | Yes | ISO 4217 currency code (e.g. USD, EUR, GBP). | |
| period | No | Time period to fetch history for. | 7d |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It adds useful context: it specifies the API key requirement (ALLRATES_API_KEY) and describes the data granularity for each period (e.g., hourly for 1d, daily for 7d/30d, weekly for 1y), which goes beyond the input schema. However, it does not cover other behavioral aspects such as rate limits, error handling, response format, or whether it's a read-only operation, leaving gaps for a tool with authentication needs.
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 appropriately sized with two sentences: the first states the purpose and period details, and the second specifies the API key requirement. It is front-loaded with key information and avoids unnecessary words, though it could be slightly more structured (e.g., separating period details into a list). Every sentence adds value, making it efficient but not perfectly optimized.
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?
Given the tool's complexity (3 parameters, authentication requirement, no output schema), the description is moderately complete. It covers the purpose, period options with granularity, and authentication need, but lacks details on output format, error cases, or sibling tool differentiation. Without annotations or an output schema, more behavioral context would be beneficial, but it meets a minimum viable level for basic understanding.
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 input schema has 100% description coverage, with clear documentation for source, target, and period parameters. The description adds minimal value beyond the schema: it mentions 'currency pair' which aligns with source/target, and lists the period options with data granularity details, but does not provide additional syntax, format, or usage examples. Given the high schema coverage, a baseline score of 3 is appropriate as the description compensates slightly but not significantly.
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 the tool's purpose: 'Get historical exchange-rate data points for a currency pair over a period.' It specifies the verb ('Get'), resource ('historical exchange-rate data points'), and scope ('currency pair over a period'), which distinguishes it from siblings like get_exchange_rate (likely current rates) and list_currencies (likely currency metadata). However, it doesn't explicitly differentiate from get_rates_authenticated, which might also provide historical data, leaving some ambiguity.
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 provides implied usage context by listing available periods (1d, 7d, 30d, 1y) and stating it requires an AllRatesToday API key, which suggests when to use it (for historical data with specific timeframes and authentication). However, it lacks explicit guidance on when to use this tool versus alternatives like get_rates_authenticated or get_exchange_rate, and does not mention any exclusions or prerequisites beyond the API key.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rates_authenticatedAInspect
Get rates with higher limits and multi-target support. Requires an AllRatesToday API key (ALLRATES_API_KEY). Supports comma-separated targets like "EUR,GBP,JPY".
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ISO 4217 currency code (e.g. USD, EUR, GBP). | |
| target | Yes | One or more target codes, comma-separated. | |
| time | No | Optional historical ISO 8601 timestamp. | |
| group | No | Optional grouping window. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context: authentication requirements (AllRatesToday API key), rate limit characteristics ('higher limits'), and input format for targets ('comma-separated'). However, it doesn't describe the return format, error conditions, or what 'higher limits' specifically means compared to other tools.
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 extremely concise and front-loaded with the most important information. Every sentence earns its place: the first states the core purpose and key differentiators, the second covers authentication requirements, and the third provides a concrete example of parameter usage. No wasted words.
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?
Given no annotations and no output schema, the description provides adequate but incomplete context. It covers authentication, rate limits, and multi-target format, but doesn't describe the return values, error handling, or how it differs from sibling tools beyond 'higher limits.' For a tool with 4 parameters and authentication requirements, more behavioral context would be helpful.
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%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema: it clarifies the 'target' parameter accepts 'comma-separated targets like EUR,GBP,JPY' which is implied but not explicitly stated in the schema description. This meets the baseline of 3 when schema coverage is high.
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 the tool's purpose: 'Get rates with higher limits and multi-target support.' It specifies the action ('Get rates') and key capabilities (higher limits, multi-target support). However, it doesn't explicitly differentiate from sibling tools like 'get_exchange_rate' or 'get_historical_rates' beyond mentioning higher limits and multi-target support.
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 provides clear context for when to use this tool: when higher limits and multi-target support are needed, and when an AllRatesToday API key is available. It mentions 'comma-separated targets' as a specific usage pattern. However, it doesn't explicitly state when NOT to use it or name alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_currenciesAInspect
List all supported currencies with code, name, and symbol. No API key required. Cached 24h upstream.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively adds context beyond the input schema by specifying that no API key is needed (implying no authentication requirements) and that data is cached for 24 hours upstream (indicating potential rate limits or freshness considerations). However, it does not detail response format or error handling.
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 highly concise and front-loaded, consisting of two sentences that efficiently convey the tool's purpose, key features (no API key, caching), and scope. Every sentence adds value without redundancy, making it easy to parse quickly.
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?
Given the tool's low complexity (0 parameters, no output schema, no annotations), the description is largely complete, covering purpose, authentication, and caching. However, without an output schema, it could benefit from briefly mentioning the return format (e.g., list of objects with code, name, symbol) to fully guide usage.
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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately does not discuss parameters, maintaining focus on the tool's purpose and behavior, which aligns with the baseline expectation for tools with no parameters.
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 the specific action ('List all supported currencies') and resource ('currencies'), with explicit details on what information is included ('code, name, and symbol'). It effectively distinguishes from sibling tools like get_exchange_rate or get_historical_rates, which focus on rates rather than listing currencies.
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 provides clear context by stating 'No API key required' and 'Cached 24h upstream', which helps determine when to use this tool (e.g., for basic currency info without authentication). However, it does not explicitly mention when not to use it or name alternatives among siblings, such as get_rates_authenticated for authenticated rate data.
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.
4 tool updates
v0.2.0- First observed
get_exchange_rate - First observed
get_historical_rates - First observed
get_rates_authenticated - First observed
list_currencies
TDQS
Scored across 4 tools
The tools have some overlap in purpose, particularly between get_exchange_rate and get_rates_authenticated, which both retrieve current exchange rates but with different features (single vs. multi-target). However, the descriptions clarify the distinctions, and the other tools (get_historical_rates, list_currencies) are clearly distinct. This creates a moderate level of ambiguity that agents can navigate with careful reading.
The tool names follow a consistent verb_noun pattern (e.g., get_exchange_rate, get_historical_rates, list_currencies), with all using snake_case. The only minor deviation is get_rates_authenticated, which uses 'authenticated' as an adjective rather than a noun, but it still fits the overall style. This consistency makes the tools predictable and easy to understand.
With 4 tools, this server is well-scoped for its purpose of providing exchange rate data. Each tool serves a distinct function (current rates, historical rates, authenticated rates, currency listing), and there are no redundant or trivial additions. This count is appropriate for the domain, allowing comprehensive coverage without overwhelming complexity.
The tool surface covers the core needs for exchange rate data: retrieving current rates (with both basic and authenticated options), accessing historical data, and listing supported currencies. A minor gap is the lack of tools for currency conversion calculations or advanced analytics, but agents can work around this by combining the provided rates. Overall, it supports key workflows without dead ends.
Maintenance
Related MCP Connectors
Live and historical FX rates (ECB via Frankfurter) — paid per call (x402/credits), 2 tools
Free, keyless real-time currency conversion and exchange rates for any currency pair.
Free, source-labeled FX rates: 465 pairs across 31 currencies, majors update ~60s intraday.
Convert currencies, get FX rates, and query historical ECB exchange rate data.
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.9 npmISC
- AlicenseAqualityCmaintenanceAn MCP server for the Xe Currency Data API that brings live FX rates, historical analysis, and quant-flavored tools into AI tools, working out of the box with zero credentials via Frankfurter/ECB data.129 npm1MIT
- AlicenseNot gradedqualityAmaintenanceReal-time US-equity quotes, company fundamentals, earnings, analyst trends, and financial news via Finnhub. Supports STDIO and Streamable HTTP transports.164 npm1Apache 2.0
- AlicenseAqualityBmaintenanceEnables AI coding tools to access real-time and historical currency exchange rates for 160+ currencies, sourced from Reuters/Refinitiv.446 npmMIT