Connect your agent to https://api.exchangerate.dev/v1/mcp and it gains tools to open a human-confirmed billing handoff, discover supported currencies, fetch a rate or USD index, convert an amount, pull a historical series, or search the docs for canonical answers. The server counts each metered tool call against the same per-minute rate limit and monthly quota as your REST key, so plan capacity the same way you would for any API integration.
- The MCP server is at
https://api.exchangerate.dev/v1/mcp, server nameexchangerate-dev. - Tools include
start_checkoutfor a human-confirmed billing handoff;list_currencies,get_rate,get_usd_index,convert, andget_rangecover the FX use cases; andsearch_docsanswers questions about the API itself. - Tool calls share the key's per-minute rate limit (10 rpm on the free tier) and 5,000-call monthly quota.
- Rates are indicative, published for reference and analytics, not as dealing quotes.
- No API key is required to try the server; anonymous calls work but are capped per IP address.
What MCP gives an LLM agent
The Model Context Protocol lets an LLM call external tools during inference without manual HTTP wiring. Rather than asking a developer to build a REST client, the agent discovers the tool list from the server and invokes tools by name. exchangerate.dev exposes its rate data this way: the server at /v1/mcp describes MCP tools, the agent picks the right one for the task, and the result comes back as structured JSON that feeds straight into the next reasoning step.
This is useful when the agent needs rates dynamically. A user might ask "how much is 500 USD in JPY right now?"; the agent calls convert and answers from the response, with no hard-coded rate in the prompt.
The MCP tools and when to use each
Each tool maps to a specific REST endpoint on the API. The agent chooses between them based on what the task requires.
| Tool | Use case | Maps to |
|---|---|---|
start_checkout | Open Checkout or billing management after explicit human confirmation | /v1/account/checkout |
list_currencies | Discover which currency codes are supported before making a rate call | /v1/currencies |
get_rate | Fetch the latest indicative rate for a base/quote pair, or for a specific past date | /v1/latest or /v1/{date} |
get_usd_index | Fetch the latest DXY reconstruction or broad USD Strength Index with methodology metadata | /v1/indices/{index} |
convert | Convert an amount from one currency to another and get the converted value directly | /v1/convert |
get_range | Retrieve a daily time series across a date range for one or more currency pairs | /v1/range |
search_docs | Search the exchangerate.dev FAQ for canonical answers to how-to, pricing, or data-sourcing questions | bundled FAQ (BM25) |
A typical agent workflow runs list_currencies once at setup or when the user names an unfamiliar code. After that it calls get_rate or convert per user query, get_range when a trend, comparison, or historical context is needed, and search_docs when the user asks how the API itself works, pricing, freshness, or where the data comes from.
Combine FX with live metals data
When an agent needs both raw FX and live metals, connect the goldprice.dev MCP server alongside exchangerate.dev. Keep the tools separate: use goldprice.dev for metal prices and exchangerate.dev for currency rates, then preserve the underlying observation and source fields from both responses in the final answer.
Configuring an MCP client
Most MCP clients accept a JSON config block. The dedicated MCP quickstart has copy-paste setup for Claude Code, Claude Desktop, and Cursor. Point the client at the server URL and pass your API key in the Authorization header:
{ "mcpServers": { "exchangerate-dev": { "url": "https://api.exchangerate.dev/v1/mcp", "headers": { "Authorization": "Bearer exr_live_..." } } }}Replace exr_live_... with your key from the dashboard. The server name exchangerate-dev is what surfaces in the agent's tool list. Some clients (Claude for Desktop, Cursor) support an npm package for local (stdio) connections instead of the HTTP URL; tool availability depends on the interface.
Omitting the Authorization header still works for a quick test; anonymous calls are capped per IP address. Add a key at https://exchangerate.dev/signup to raise the limit to 5,000 calls a month and for production use.
Quota and rate limits
Every tool call counts as one API call against your key. The free tier allows 5,000 calls per month at 10 requests per minute. An agent that calls get_rate on every user message in a busy chat interface can exhaust the per-minute limit quickly. Design the agent to batch or cache where the task allows.
get_range is efficient for historical work: one call returns a full date series for multiple symbols rather than one call per day. If an agent needs rates for the past two weeks across three pairs, a single get_range call covers it.
Reading freshness from tool responses
Each tool response includes source and market_session. source labels live indicative spot (~60s on trading days), ecb_daily ECB fixes, or market_daily stored daily market-feed closes for currencies without an ECB fix. market_session is open, weekend, or interbank_closed for a known non-weekend closure.
These fields let the agent give honest context to the user. Rather than stating a number without qualification, the agent can note that the rate is from the ECB daily fix or that the market is currently closed. The notice field on every response carries the indicative disclaimer the agent should surface when presenting rates to end users.
Indicative rates only
All data from the MCP server is indicative, published for reference, analytics, and display. The agent should never present these as dealing quotes or suggest acting on them for a financial transaction. Every tool response carries this in its notice field.
This applies to the agent's output too. If users ask "should I exchange my money now?" or for a forecast, the agent should decline rather than extrapolate from the rate data. The tools provide the current or historical number; any forward-looking interpretation is out of scope.