AI coding tools are great at writing code and explaining diffs, but they're unreliable at anything numeric and time-sensitive. Ask Claude Code "what's today's USD to EUR rate?" and you'll get a stale guess. The Model Context Protocol (MCP) fixes this by letting clients call real tools. This post walks through the Exchange Rate API MCP server — what it does, how to install it in four different clients, and how to debug when something goes wrong.
What is the Exchange Rate API MCP server?
It's a small npm package — @exchangerateapi/mcp-server — that exposes four currency tools over the MCP stdio transport. Any MCP-compatible client (Claude Code, Cursor, Claude Desktop, ChatGPT Desktop, and any custom MCP host) can call them:
| Tool | API key? | Description |
|---|---|---|
get_exchange_rate | no | Current mid-market rate between two currencies. |
get_historical_rates | yes | Time series over 1d, 7d, 30d, or 1y. |
get_rates_authenticated | yes | Multi-target rates with higher limits. |
list_currencies | no | All 160+ supported currencies. |
Two of the four tools (get_exchange_rate and list_currencies) work without an API key. Set EXCHANGERATE_API_KEY for the historical and multi-target endpoints.
Prerequisites
- Node.js 18 or newer.
npxships with Node and handles installing the package on first run. - An MCP-compatible client. Claude Code, Cursor (0.42+), Claude Desktop, or ChatGPT Desktop all qualify.
- Optional: Exchange Rate API key — register for a free one if you need higher limits.
Install in Claude Code
claude mcp add exchangerateapi -- npx -y @exchangerateapi/mcp-server
claude mcp env exchangerateapi EXCHANGERATE_API_KEY=your_key_here # optional
Claude Code will install the package on first invocation via npx. Verify it's loaded:
claude mcp list
# should show: exchangerateapi running (4 tools)
Now open any chat and ask: "What's the USD to EUR rate right now?" Claude Code picks up the get_exchange_rate tool, calls it, and answers with the live number.
Install in Cursor
Edit ~/.cursor/mcp.json (or create a project-local .cursor/mcp.json):
{
"mcpServers": {
"exchangerateapi": {
"command": "npx",
"args": ["-y", "@exchangerateapi/mcp-server"],
"env": {
"EXCHANGERATE_API_KEY": "your_key_here"
}
}
}
}
Restart Cursor. Settings → Cursor Settings → MCP should now list "exchangerateapi" with a green indicator. You can toggle individual tools there if you want.
Install in Claude Desktop (and ChatGPT Desktop)
Edit the desktop client's config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - ChatGPT Desktop uses the same JSON shape in its own config — paste the block below.
{
"mcpServers": {
"exchangerateapi": {
"command": "npx",
"args": ["-y", "@exchangerateapi/mcp-server"],
"env": {
"EXCHANGERATE_API_KEY": "your_key_here"
}
}
}
}
Fully quit and reopen the app. The "Search and tools" icon should show exchangerateapi with four tools.
Example prompts
A few prompts that exercise each tool:
- "What's 1,250 GBP in Singapore dollars?" — calls
get_exchange_rate, multiplies client-side. - "Show me the trend of USD/JPY over the last 30 days." — calls
get_historical_rateswithperiod=30d. - "Get me today's rates for EUR against USD, GBP, and CHF in one call." — calls
get_rates_authenticatedwith comma-separated targets (requires API key). - "What currencies does Exchange Rate API support?" — calls
list_currencies.
Debugging tool calls
If the assistant isn't calling the tool, or calls are failing, there are three quick checks.
1. Is the server actually running?
In your terminal:
npx -y @exchangerateapi/mcp-server
# waits on stdin — this is correct, stdio transport
Press Ctrl+C to exit. If this errors (e.g. command not found: npx), install Node 18+.
2. Send a raw tools/list request
MCP is JSON-RPC over stdio. You can drive it manually:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
| npx -y @exchangerateapi/mcp-server
You'll see the handshake plus a list of all tool schemas. If this works, the server is healthy — the problem is in the client config.
3. Check the client's MCP log
Claude Desktop writes a log you can read at:
# macOS
~/Library/Logs/Claude/mcp*.log
# Windows
%APPDATA%\Claude\logs\mcp*.log
Look for exchangerateapi lines. A common issue: the config's JSON is invalid (trailing comma, missing quote). The log will say so.
Do I need an API key?
Only for two of the four tools. get_exchange_rate and list_currencies call public endpoints and work without a key. get_historical_rates and get_rates_authenticated both require EXCHANGERATE_API_KEY. Set one if you want:
- Historical rate data (1d/7d/30d/1y periods).
- Multi-target single-call lookups (e.g. EUR against USD + GBP + CHF).
- Higher rate limits (the public endpoints have reasonable but not unlimited quotas).
A free key is available at registration — no credit card.
What about privacy?
The MCP server runs locally on your machine and talks to exchange-rateapi.com/api directly. It doesn't log prompts, and it doesn't proxy through a third party. Source is on GitHub — you can read it end-to-end in under 15 minutes.
Related integrations
- DeepSeek (Python):
exchange-rateapi-deepseek— same tools, wired into DeepSeek's function calling. - Any LLM with browsing: our /llms.txt tells them the public endpoint to call.
- Every supported client: the full rundown is on the MCP landing page.
Next steps
- Install the server in your preferred client (above).
- Ask your assistant for a live rate — confirm it cites the number.
- If you need multi-target or higher limits, grab a free API key and set
EXCHANGERATE_API_KEY. - Open an issue or PR on the repo if something's missing.
Start building in seconds
npm install @exchangerateapi/sdk
Give your AI assistant real currency data
Install in one line. Free tier with real-time rates. No credit card.
Get Your Free API Key →