Developers · AI builders
Give an AI agent live African FX rates with MCP
A language model asked for today's GBP→NGN rate will produce a plausible number from its training data. Connected to a source it can query, it produces the actual quotes, with timestamps, and can say which provider delivers the most. The Model Context Protocol is how that connection works.
Updated 28 Sep 2026 · 5 min read · by Modan
Why a tool beats a search
Search results give a model pages to read, most of which show a mid nobody transacts at and few of which carry a timestamp the model can trust. A tool gives it structured, dated data with definitions attached. Modan's MCP server returns the same objects as the REST API — provider entries with rate, fee, spread_bps, vs_mid_bps, rate_type, provider_type, stale and last_checked — and the server's own instructions tell the model what each field means, so it does not have to guess that spread is measured within a provider type and rate type.
What the model can do with it
get_rates— the full provider book for a corridor, with the independent mid.convert— what an amount delivers per provider net of fees, and who delivers the most, overall and within each provider type.fetch_rates— mid-market rates from one base to up to 20 quotes in one call.get_history— timestamped observations over a window, optionally one provider.list_corridors,list_providers,list_currencies— discovery, so the model can answer "what do you cover?" without browsing.get_rates,convert,fetch_rates,get_historyandlist_corridorsalso take an optionalprovider_type, such as["imto"], to answer for one kind of provider; kinds are never ranked against each other.
Connecting a client
The server is remote — nothing to install — at https://modan.io/api/mcp, streamable HTTP with plain JSON responses, authenticated with an X-API-Key header. The MCP setup page has the exact configuration for Claude Code, Cursor, VS Code and a generic JSON block for other clients, plus a keyless tools/list probe to confirm the connection before adding a key.
claude mcp add --transport http modan https://modan.io/api/mcp \ --header "X-API-Key: mdn_live_YOUR_KEY_HERE"
What a conversation looks like
Ask "Which provider gives the most naira for £500 right now?" and the model calls convert with GBP, NGN and 500, then answers with the provider, the net amount, and — if it is well behaved — the observation time and the plan's freshness. Ask "which money-transfer operator gives the most?" and it can pass provider_type: ["imto"], or read best_by_type. Ask "how has LemFi's GBP→NGN rate moved this month?" and it calls get_history with a provider filter. Ask "what corridors do you cover into GHS?" and it calls list_corridors and filters.
What to know before you rely on it
- Each tool call uses one request of the key's daily quota — 50 on a free key, 250 on Individual, 1,000 on Team — shared with the REST API.
- Answers are labelled hourly or real-time by plan; the model receives
data_freshnessandas_ofand can repeat them. Ask it to. - Reference prints (official, parallel) and stale quotes (not checked for 24 hours) come back labelled and are never chosen as best; stablecoin corridors carry no mid.
- ChatGPT's connectors cannot send an API-key header today; a Custom GPT Action built from
openapi.jsoncan call the REST endpoints instead.
Frequently asked questions
- Does the agent get real-time rates?
- It gets what the key's plan allows and the response says which: hourly (as of the top of the current UTC hour) on Free and Individual keys, real-time on Team keys. Either way every provider entry carries last_checked, the time the quote was last confirmed, and is marked stale once it has gone 24 hours without a check.
- What does it cost?
- A key is free on signup and allows 50 requests a day, each tool call counting as one. Individual (250 a day) and Team (1,000 a day, real-time) plans are on the pricing page.
- Which clients work?
- Any MCP client that accepts a remote streamable-HTTP server URL with a custom header: Claude Code, Cursor, VS Code with GitHub Copilot, Codex, Windsurf and others. The setup page shows the configuration for the first three and a generic block for the rest.