Back to Browse

Cahthuranag MCP Server

Developer ToolsLow Risk10.0MCP RegistryLocal
Free

Server data from the Official MCP Registry

Real-time & historical exchange rates for 160+ currencies. No API key needed to start.

About

Real-time & historical exchange rates for 160+ currencies. No API key needed to start.

Security Report

10.0
Low Risk10.0Low Risk

Valid MCP server (2 strong, 3 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.

7 files analyzed · 1 issue found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

env_vars

Check that this permission is expected for this type of plugin.

file_system

Check that this permission is expected for this type of plugin.

HTTP Network Access

Connects to external APIs or services over the internet.

Shell Command Execution

Runs commands on your machine. Be cautious — only use if you trust this plugin.

What You'll Need

Set these up before or after installing:

Optional. Without it the server runs keyless: get_exchange_rate answers from the official ECB daily reference table (~30 majors) and list_currencies works. A free key (https://allratestoday.com/register) unlocks real-time mid-market rates for 160+ currencies, historical series, and multi-target/point-in-time lookups.Required

Environment variable: ALLRATES_API_KEY

Override API base URL (default: https://allratestoday.com/api).Optional

Environment variable: ALLRATES_BASE_URL

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-cahthuranag-mcp-server": {
      "env": {
        "ALLRATES_API_KEY": "your-allrates-api-key-here",
        "ALLRATES_BASE_URL": "your-allrates-base-url-here"
      },
      "args": [
        "-y",
        "@allratestoday/mcp-server"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

AllRatesToday MCP Server — @allratestoday/mcp-server

Website: https://allratestoday.com · Hosted endpoint (no install): https://allratestoday.com/api/mcp · Docs: https://allratestoday.com/mcp/

npm version npm downloads license MCP TypeScript

English | 简体中文

Give your AI assistant a live window into the foreign-exchange market. A Model Context Protocol server that lets Claude Code, Cursor, Claude Desktop, Windsurf, and any MCP-compatible client fetch real-time currency rates, historical series, 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."

🚀 Why this server?

  • 📡 Live mid-market rates — 160+ ISO 4217 currencies, refreshed every ~60 seconds
  • 📈 Historical series built in — 1d / 7d / 30d / 1y windows with sensible granularity per period
  • 🧰 Eight focused tools — get_exchange_rate, get_historical_rates, get_rates_authenticated, list_currencies, list_central_banks, get_official_rates, get_reference_rate, request_trial_key; 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
  • 🔓 Works with no API key — installs and answers out of the box from open official central-bank tables (ECB first, else the bank that issues one of the two currencies); a free key unlocks real-time rates for 160+ currencies
  • 🛡️ Honest about what it returned — every keyless answer says which rate it is and when it was published; API errors map to clear, actionable messages
  • 🔒 Nothing leaks — only the request parameters and your API key ever reach allratestoday.com; never conversation context

⚖️ Mid-market vs official central-bank rates

With a key, get_exchange_rate, get_historical_rates and get_rates_authenticated return a mid-market rate, refreshed every ~60 seconds — the right number for price display, conversion, and anything that should track the market. It is not the official rate a tax authority or auditor may require. For those, call get_official_rates: the latest table published by any of 121 central banks and 3 tax authorities (ECB, Fed, HMRC, US Treasury, Swiss BAZG, …), fixed once published and carrying the institution's own rate_date, no key needed. list_central_banks gives the codes. Dated official tables (a past date) need an API key on a paid plan — a free key gets 403 Historical central bank rates require a paid plan; mid-market history (get_historical_rates) works on the free key. See the central bank REST API and per-bank npm SDKs. The two can diverge by several percent, so pick by use case, not convenience.

🔓 Keyless mode — what works with no setup

Install it with no configuration at all and it starts, connects, and answers:

ToolKeylessWhat you get
get_exchange_rate✅An official central-bank rate: the ECB reference table first, else the central bank that issues the target or source currency (USD/GBP → Bank of England, USD/INR → Reserve Bank of India). The response carries bank, rate_date, derived and a note saying so, so the assistant never passes it off as a live quote. Only pairs one bank publishes, or their inverses (flagged derived: true), work keyless; other crosses are refused with a pointer to the key.
list_currencies✅All 160+ supported ISO 4217 codes.
list_central_banks✅Codes, names and latest publication date of all 121 central banks + 3 tax authorities.
get_official_rates✅Latest official table (or one pair) published by any of them. A dated table needs a paid-plan key.
get_reference_rate✅The Daily Reference Rate: one never-revised table per business day, fixed at 16:00 London. A past date needs a paid-plan key.
request_trial_key✅Self-issues a 100-call, 7-day key with no account and adopts it for the session.
get_historical_rates🔑Returns one sentence explaining how to get a key. Needs a paid plan.
get_rates_authenticated🔑Same.

The keyless path reads the open, edge-cached /api/open/central-bank/{bank} endpoints — no upstream cost, no rate limit to trip over, nothing to sign up for.

🔑 Get your API key (free)

A key unlocks real-time mid-market rates across 160+ currencies and multi-target lookups. The free tier (300 requests, lifetime — it does not reset monthly) is enough for development and trying it out — no credit card required. Historical series, point-in-time lookups and dated official and reference-rate tables need a paid plan from €4.99/month.

  1. Register at allratestoday.com/register — 30 seconds
  2. Verify your email
  3. Copy your key from the dashboard (format: art_live_xxxxx)
  4. Use it as ALLRATES_API_KEY in 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@allratestoday

Everything below still applies for other MCP clients.

☁️ Hosted endpoint — nothing to install

The same tools also run as a hosted Streamable HTTP MCP server, which lists 11 tools: the 8 of this stdio package plus get_official_rate_history, compare_official_rates and get_publication_calendar from the sibling central-bank server. Paste the URL into any client that supports remote MCP — Claude.ai and Claude Desktop connectors, ChatGPT, Cursor, VS Code, Codex, Gemini CLI:

https://allratestoday.com/api/mcp
claude mcp add --transport http allratestoday https://allratestoday.com/api/mcp

Works keyless. With a key, send Authorization: Bearer art_live_… or, where the client only takes a URL, connect to https://allratestoday.com/api/mcp?api_key=art_live_…. Registry name: com.allratestoday/mcp. One-click Cursor / VS Code buttons: https://allratestoday.com/mcp/#hosted

📦 Installation

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-mcp

Both commands launch the stdio MCP server and wait for a client to connect — they're not meant to be run interactively 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_xxxxx

Restart 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 eight tools should appear in the MCP tool picker.

Claude Desktop

Edit the config file (path depends on OS):

OSPath
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json
{
  "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 with the same mcpServers block as above, then 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:

  1. Server starts — open the client. The server starts with or without a key (no key ⇒ keyless mode), so a red dot or "failed to connect" means the client could not launch it — usually npx or Node ≥18 (see Troubleshooting below). A wrong key does not stop it starting; calls then return Invalid AllRatesToday API key.
  2. Tools are listed — most clients have a "tools" or "MCP" panel showing the eight tools.
  3. A live call returns a number — ask: "What's the current USD to EUR rate?" The assistant should call get_exchange_rate(source: "USD", target: "EUR") and reply with a real rate. If it fabricates a number without a tool call, the server isn't connected.

📚 Tools reference

get_historical_rates and get_rates_authenticated require ALLRATES_API_KEY; the other six of the eight work keyless. History (get_historical_rates, and time on get_rates_authenticated) needs a paid plan.


get_exchange_rate

Current mid-market rate between two currencies.

Input

FieldTypeRequiredDescription
sourcestringyes3-letter ISO 4217 code, e.g. USD
targetstringyes3-letter ISO 4217 code, e.g. EUR

Example call

{ "source": "USD", "target": "EUR" }

Response (with a key):

{ "rate": 0.888889, "source": "mid-market" }

Response (keyless — USD → GBP, not in the ECB table, so the Bank of England table answers):

{
  "rate": 0.7598784195,
  "source": "Bank of England official rate (keyless mode)",
  "bank": "boe",
  "rate_date": "2026-10-14",
  "derived": true,
  "note": "Keyless mode: this is the Bank of England official rate published on 2026-10-14, not a live mid-market quote. For real-time rates across 160+ currencies set ALLRATES_API_KEY — free tier at https://allratestoday.com/register."
}

derived: true means the bank publishes the inverse (GBP→USD) and the rate was inverted. A pair no single bank publishes is refused keyless with No keyless official source covers … and a pointer to the key.

get_historical_rates

Time-series data points for a currency pair over a fixed period. Needs an API key on a paid plan (free and trial keys get a 403).

Input

FieldTypeRequiredDescription
sourcestringyesSource currency code
targetstringyesTarget currency code
periodstringno (default 7d)One of 1d, 7d, 30d, 1y

Granularity by period

periodData points
1dHourly (24 points)
7dDaily (7 points)
30dDaily (30 points)
1yWeekly (52 points)

Example call

{ "source": "USD", "target": "INR", "period": "30d" }

Response (truncated):

{
  "source": "USD",
  "target": "INR",
  "period": "30d",
  "data": [
    { "date": "2026-09-17", "rate": 96.1006, "timestamp": 1789603200000 },
    { "date": "2026-09-18", "rate": 95.8142, "timestamp": 1789689600000 },
    "...",
    { "date": "2026-10-16", "rate": 94.9643, "timestamp": 1792108800000 }
  ]
}

get_rates_authenticated

Multiple targets in one call, with optional historical timestamp or grouping window.

Input

FieldTypeRequiredDescription
sourcestringyesSource currency code
targetstringyesOne or more codes, comma-separated (EUR,GBP,JPY)
timestring (ISO 8601)noHistorical point in time (paid plans)
groupstringnoOne of hour, day, week, month

Example call

{ "source": "USD", "target": "EUR,GBP,JPY" }

Response:

{
  "rates": [
    { "rate": 0.888889, "source": "USD", "target": "EUR", "time": "2026-10-16T12:16:01+0000" },
    { "rate": 0.749766, "source": "USD", "target": "GBP", "time": "2026-10-16T12:16:01+0000" },
    { "rate": 157.985, "source": "USD", "target": "JPY", "time": "2026-10-16T12:16:01+0000" }
  ]
}

list_currencies

All supported currencies with codes, names, and symbols. Cached upstream for 24 hours — cheap to call for validating user input before the other tools.

Input — none.

Response (truncated):

{
  "currencies": [
    { "code": "USD", "name": "US Dollar", "symbol": "$" },
    { "code": "EUR", "name": "Euro", "symbol": "€" },
    { "code": "GBP", "name": "British Pound", "symbol": "£" },
    "..."
  ],
  "count": 163
}

list_central_banks

Every official source the server can quote — 121 central banks plus HMRC, the US Treasury and Swiss BAZG — with the code that get_official_rates takes as bank, the institution's name, its latest publication date, age_days, its publication cadence and a stale flag when it is behind its own schedule. Keyless.

Input — none.

Response (truncated):

{
  "sources": [
    { "code": "ecb", "name": "European Central Bank", "latest": "2026-10-15", "age_days": 1, "stale": false, "cadence": "daily" },
    { "code": "fed", "name": "US Federal Reserve (H.10)", "latest": "2026-10-09", "age_days": 7, "stale": false, "cadence": "weekly" },
    "..."
  ],
  "stale_count": 3,
  "checked_at": "2026-10-16T12:16:46.232Z"
}

get_official_rates

The fixed, citable rate an institution published — for invoices, VAT and tax returns, customs, transfer pricing and audit. Not a live market rate.

Input:

FieldTypeRequiredDescription
bankstringyesSource code from list_central_banks, e.g. ecb, fed, boe, rbi, hmrc
datestringnoYYYY-MM-DD. Omit for the latest table (keyless). Needs an API key on a paid plan — a free key gets 403 Historical central bank rates require a paid plan. Weekends/holidays roll back to the last published date.
sourcestringnoWith target, narrows to one pair
targetstringnoWith source, narrows to one pair

Response (one pair):

{
  "bank": "ecb",
  "rate_date": "2026-10-15",
  "source": "EUR",
  "target": "USD",
  "rate": 1.1208,
  "rate_type": "reference",
  "derived": false,
  "method": "published",
  "age_days": 1,
  "stale": false,
  "cadence": "daily",
  "attribution": { "source": "Official rates published by ECB, served by AllRatesToday", "url": "https://allratestoday.com/central-bank-rates-api/ecb/", "terms": "Free to use with visible attribution linking to allratestoday.com" }
}

Omit source/target for the whole table as rates: [{ base, quote, type, value }]. Keyless, only pairs the bank publishes and their inverses (flagged derived: true) are served; other crosses are refused. With a key, pairs the bank does not publish directly are cross-computed inside its own table and flagged derived: true. Always cite rate_date.


get_reference_rate

AllRatesToday's Daily Reference Rate: the per-currency median of samples taken in a five-minute window centred on 16:00 London, published once per business day and never revised. Use it when a report, index or research series needs one reproducible rate per day. It is not the WM/Refinitiv fix and not a registered benchmark; every response carries a disclaimer and the rate_date.

Input

FieldTypeRequiredDescription
sourcestringnoWith target, narrows to one pair (crossed via USD, flagged derived)
targetstringnoSee above
datestringnoPast business day YYYY-MM-DD (API key on a paid plan). Omit for the latest table

Output — { rate_date, base, time, rates } for the table, or { rate_date, source, target, rate, derived } for a pair, plus method and disclaimer. Keyless for the latest table. Docs: https://allratestoday.com/reference-rate/


request_trial_key

Self-issues an API key with 100 lifetime calls, valid 7 days, with no account and no email, and switches this server to it for the rest of the session. The reply tells the user to copy the key into the MCP config as ALLRATES_API_KEY to keep it across restarts. Capped at 3 keys per IP per day.

Input — agent (string, optional), purpose (string, optional).

Output — { key, calls, expires_at, adopted, note }.


⚙️ Environment variables

VariableDefaultRequiredPurpose
ALLRATES_API_KEY—noYour API key, sent as Authorization: Bearer. Unset ⇒ keyless mode (see above); set ⇒ real-time rates and multi-target lookups (the historical tools need a paid-plan key).
ALLRATES_BASE_URLhttps://allratestoday.com/apinoOverride for self-hosted or staging deployments.

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. The free tier is 300 requests, lifetime (it never resets), and covers real-time rates and multi-target lookups. All history and dated rates — mid-market history, point-in-time lookups, dated official and reference-rate tables — need a paid plan (free and trial keys get 403 historical_requires_paid_plan). The Official Rates plan covers official central-bank and tax-authority rates only (no market rates).

🛠️ Troubleshooting

SymptomLikely causeFix
Client shows "MCP server failed to start" or red dotNot a missing key — 0.5.0+ starts fine without one. Usually npx cannot reach the registry, or Node is older than 18Run npx -y @allratestoday/mcp-server in a shell and read stderr
Rates look like yesterday's, response mentions "keyless mode"No key set, so answers come from an official central-bank table (see bank and rate_date)Set ALLRATES_API_KEY for real-time mid-market rates
No keyless official source covers X/YKeyless mode, and no single central bank publishes that pair or its inverseSet ALLRATES_API_KEY (free)
HTTP 403 — Historical rates require a paid planget_historical_rates, or time on get_rates_authenticated, on a free or trial keyUpgrade at /pricing — history is paid-only
HTTP 403 — Historical central bank rates require a paid plandate given to get_official_rates / get_reference_rate on a free keyOmit date for the latest table, or upgrade at /pricing
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"Quota used up — the free tier is 300 requests lifetime and never resets; paid plans are monthlyUpgrade at /pricing
Historical tool returns "Bad request"Invalid period or unknown currency codePeriod must be 1d/7d/30d/1y; codes must be 3 letters
Server starts but tools never appearClient didn't reload after config changeFully quit (not just close) and reopen the client
npx runs but hangs foreverThe server is waiting for an MCP client to connect — normal when run from a shellLet your MCP client launch it

To inspect what the server is doing, run it manually with the key set:

ALLRATES_API_KEY=art_live_xxxxx npx -y @allratestoday/mcp-server

No output means healthy (stdio is reserved for the MCP protocol); errors print to stderr.

🛡️ Error reference

The server maps API errors to clear, actionable messages the assistant can relay to the user:

HTTP statusMeaningTool error message
200Success(rate returned)
400Bad request — usually unknown currency codeBad request — possibly an unknown currency code
401Invalid or missing API keyInvalid AllRatesToday API key
403Plan does not include it (e.g. a dated official table on a free key)HTTP 403 — <upstream message>
404 (keyless)No keyless official source covers the pairNo keyless official source covers X/Y. …
429Quota exceededAllRatesToday API quota exceeded
5xxServer-side issue at allratestoday.comHTTP 5xx — <upstream message>

❓ FAQ

Is the free plan really enough for normal use? For trying it out and light dev use. It is 300 requests in total (lifetime, no monthly reset); regular use or production needs a paid tier. Keyless mode costs nothing and has no quota.

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.

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 first call slow? Cold-start of npx (first run downloads the package) plus the initial cache miss. Subsequent calls are typically <200ms.

Can I run this without npm/Node? Not currently — Node ≥18 is required. If a standalone binary matters to you, open an issue.

Is there a self-hosted option? Set ALLRATES_BASE_URL to your own AllRatesToday instance. Contact support@allratestoday.com for self-hosted licensing.

Does this work with ChatGPT? MCP 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/AllRates-Today/mcp-server.git
cd mcp-server
npm install
npm run build
ALLRATES_API_KEY=art_live_xxxxx node dist/index.js

The server runs on stdio and waits for an MCP client to connect; Ctrl+C to exit. npm run dev watches and rebuilds. To test against a local AllRatesToday instance:

ALLRATES_BASE_URL=http://localhost:8080/api ALLRATES_API_KEY=test_key node dist/index.js

Project structure

src/
├── index.ts      # MCP server, tool registration, request handlers
├── client.ts     # HTTP client for AllRatesToday API + error mapping
└── home-banks.ts # currency → issuing central bank, for the keyless get_exchange_rate fallback
dist/             # Compiled JS (gitignored)
server.json       # MCP registry manifest

Contributing — issues and PRs welcome at github.com/AllRates-Today/mcp-server. Before opening a PR: npm run build must succeed, test against a real API key, and update the tool descriptions in src/index.ts plus this README's tools reference if you change tool behavior.

📝 Changelog

See GitHub Releases for the full list. Recent highlights:

  • 0.7.6 — Keyless get_rates_authenticated with time now says a paid plan is needed; README: free tier no longer listed as covering history, source example is mid-market
  • 0.7.4 — Keyless get_exchange_rate falls back from the ECB table to the central bank that issues the target or source currency (USD/GBP, GBP/JPY, USD/INR now answer keyless), same as the hosted endpoint; response adds bank. Dated-table errors say a paid plan is needed. README: real response shapes, tool counts, 300-lifetime free tier
  • 0.7.0 — get_reference_rate (Daily Reference Rate, 16:00 London, keyless latest table) and request_trial_key (self-issued 100-call trial key adopted for the session)
  • 0.6.1 — README: Claude Code plugin and hosted /api/mcp endpoint cross-links; coverage wording refreshed
  • 0.6.0 — Official rates: new keyless list_central_banks and get_official_rates tools expose the latest table from 121 central banks + 3 tax authorities (dated tables need the key)
  • 0.5.0 — Keyless mode: the server starts and answers without an API key (get_exchange_rate via the open ECB reference table, list_currencies unchanged); metered tools return actionable sign-up guidance instead of the process exiting
  • 0.4.x — README overhaul; registry metadata updates
  • 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_rates
  • 0.1.x — Initial release with 5 tools

🔗 Links

📜 License

MIT — see LICENSE.

Reviews

No reviews yet

Be the first to review this server!