Give Claude, Cursor, or any MCP-compatible agent live access to central bank policy rates, interbank benchmarks, and treasury yields for 50+ countries — no scraping, no stale training data.
Sections
The Model Context Protocol (MCP) lets AI assistants call external tools and fetch live data mid-conversation, instead of relying on outdated training data. Point an MCP-compatible agent at our endpoint and it can pull real interest rate data — current or historical — the moment you ask.
Example: ask Claude "What's the spread between SOFR and EURIBOR 3M right now?" and it calls the latest tool automatically — no manual API calls, no copy-pasting JSON.
50+ countries, updated on each institution's own publication schedule.
Ask questions in plain English — the agent maps them to the right tool.
MCP calls use your existing plan. One tool call = one API request.
Seven tools, one per REST endpoint — see the full API reference for parameters.
symbols
List all 44+ available rate symbols with metadata (category, country, currency, frequency). Use this first to discover valid symbol names.
latest
Most recent value for one or more symbols, with the exact observation date and currency per symbol.
historical
Value of one or more symbols on a specific past date, with an optional `nearest` fallback for daily symbols on weekends/holidays.
timeseries
Full history of one or more symbols between two dates, keyed by observation date — ideal for charting.
fluctuation
Start/end value, absolute and percentage change, and min/max over a date range, for one or more symbols.
ohlc
Open/High/Low/Close aggregates over weekly, monthly, or quarterly periods, computed from daily observations.
convert
Compare total interest cost of a loan amount under two different rate symbols over a given term.
One endpoint for every client. Authenticate with your API key as a header or query parameter — no separate MCP credential to manage.
MCP endpoint
https://mcp.interestratesapi.com/mcp
Two ways to authenticate, depending on your client:
Authorization: Bearer YOUR_API_KEY or X-API-Key: YOUR_API_KEY.We don't support putting the key directly in the URL as ?apikey= for Claude specifically — Claude Desktop and claude.ai strip query-string credentials from connector URLs before connecting, and the MCP spec recommends against URL-embedded tokens anyway (they end up in logs and browser history). Use OAuth or a header instead.
Need a key first? Register for a free trial, then grab it from your dashboard.
This uses OAuth — Claude detects it automatically and shows a sign-in prompt. There's no key or client ID to paste anywhere.
Interest Rates API) and paste the Remote MCP server URL:https://mcp.interestratesapi.com/mcp
Two options — pick whichever fits how you work.
Option A: OAuth (opens a browser to sign in)
claude mcp add --transport http interestratesapi https://mcp.interestratesapi.com/mcp
Then run /mcp inside a session, select the server, and choose Authenticate.
Option B: static key (no browser needed)
claude mcp add --transport http interestratesapi https://mcp.interestratesapi.com/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
Verify either way with claude mcp list from the terminal.
In Cursor Settings → MCP → Add Custom MCP Server, paste the URL below. Cursor detects OAuth support and prompts you to sign in — no key needed for this path.
https://mcp.interestratesapi.com/mcp
Prefer a static key instead? Add this to ~/.cursor/mcp.json instead of using the OAuth prompt:
{
"mcpServers": {
"interestratesapi": {
"url": "https://mcp.interestratesapi.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Save, then fully quit and reopen Cursor. Try: "What's the current Fed Funds Rate?"
A minimal client that calls the latest tool over MCP's JSON-RPC 2.0 protocol.
import httpx
import json
import asyncio
MCP_SERVER_URL = "https://mcp.interestratesapi.com/mcp"
API_KEY = "YOUR_API_KEY"
async def call_mcp_tool(tool_name: str, arguments: dict):
async with httpx.AsyncClient(timeout=30) as client:
init_response = await client.post(
MCP_SERVER_URL,
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"jsonrpc": "2.0",
"id": "1",
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "PythonClient", "version": "1.0.0"},
},
},
)
session_id = init_response.headers.get("Mcp-Session-Id")
response = await client.post(
MCP_SERVER_URL,
headers={"Authorization": f"Bearer {API_KEY}", "Mcp-Session-Id": session_id},
json={
"jsonrpc": "2.0",
"id": "2",
"method": "tools/call",
"params": {"name": tool_name, "arguments": arguments},
},
)
return response.json()
async def main():
result = await call_mcp_tool("latest", {"symbols": "FED_FUNDS,SOFR"})
print(json.dumps(result, indent=2))
asyncio.run(main())
Authorization: Bearer YOUR_API_KEY or X-API-Key header, for CLI tools and scripts. We don't support a key embedded in the URL (?apikey=) for Claude specifically — Claude Desktop/claude.ai strip query-string credentials from connector URLs, so that path silently fails there.
POST /oauth/token with grant_type=client_credentials to exchange your key for a short-lived bearer token with no browser involved. See /auth.md for details.