MCP
MCP vs REST
When to use the CurrencyCore MCP server and when to call the REST API directly. Same data, same quota, different integration shape.
The MCP server is a thin, authenticated proxy over the public REST API. It does not have a separate dataset, a separate price, or a separate quota. The choice is about who is calling: an AI client that discovers tools, or your own code.
At a glance
| MCP | REST | |
|---|---|---|
| Base | https://mcp.currency-core.com/mcp | https://api.currency-core.com/v1 |
| Caller | An MCP client (Claude, ChatGPT, Cursor, VS Code, and others) | Your service, script, or SDK |
| Auth | OAuth with organization selection | Authorization: Bearer <key> or x-api-key |
| Data | The same REST data, exposed as 14 tools | 15 public paths, including /v1/ai |
| Quota | Shared by the organization | Shared by the organization |
| Metering | One successful keyed tool call equals one API request | One successful request equals one API request |
| Public data | list_countries, list_currencies are unmetered after sign-in | /v1/countries, /v1/currencies are public and unmetered |
| AI endpoint | Not exposed as a tool | GET /v1/ai |
| Writes | None, every tool is read-only | None, every endpoint is a GET |
| Setup | Add a URL and sign in | Create a key and send a header |
Same call, two shapes
A conversion is the clearest comparison. Over REST:
curl "https://api.currency-core.com/v1/convert?from=USD&to=INR&amount=100" \
-H "Authorization: Bearer cc_live_your_key"
Over MCP, the client sends a tools/call request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "convert",
"arguments": { "from": "USD", "to": "INR", "amount": 100 }
}
}
The REST response is the familiar envelope. The MCP result wraps the same body
in content and structuredContent, and adds _meta for metering:
{
"content": [
{
"type": "text",
"text": "{\"from\":\"USD\",\"amount\":100,\"date\":\"2026-11-10\",\"results\":[{\"to\":\"INR\",\"result\":8345.0,\"rate\":83.45}]}"
}
],
"structuredContent": {
"from": "USD",
"amount": 100,
"date": "2026-11-10",
"results": [{ "to": "INR", "result": 8345.0, "rate": 83.45 }]
},
"_meta": {
"currencycore/billed_requests": 1,
"currencycore/status": 200
}
}
The data matches. The shape and the authentication path differ. Most MCP clients handle the JSON-RPC envelope for you; this example is for understanding what the client sends, not for hand-writing requests.
Decision table
| Your situation | Use | Why |
|---|---|---|
| A person chats with an assistant and asks currency questions | MCP | The client discovers tools, handles OAuth, and shows results in the conversation. |
| A coding agent needs a rate while writing or checking code | MCP | No wrapper code, and the agent can call the same server across projects. |
| You are building a pricing page, invoice job, or ledger service | REST | You control retries, caching, validation, and deployment. |
You need the natural-language /v1/ai endpoint | REST | The AI endpoint is HTTP-only and is not an MCP tool. |
| You need a high-volume nightly backfill | REST | Batch the calls, cache dated history, and tune concurrency yourself. |
| You want a quick internal tool or prototype | MCP | The setup is a URL plus consent, not an integration project. |
| You need per-call logs tied to your own request IDs | REST | Your service owns the logging and tracing layer. |
| You need one answer that covers several currencies | MCP or REST | convert accepts up to 25 targets in one call, so batch instead of looping. |
| You need a stable, typed contract checked in CI | REST | Consume the OpenAPI 3.1 spec and validate responses in your pipeline. |
| You want a non-developer to query rates from a chat client | MCP | No key handling and no code. |
The quota is the same
There is a common assumption that MCP is a free side channel or a separate sandbox. It is neither.
- A successful keyed tool call counts as one API request against the organization’s monthly quota. Public tool calls are unmetered, but the current server still requires an authorized connection before it exposes any tool.
- MCP and REST share the organization’s per-minute rate limit and monthly quota.
- A failed tool call is not billed, just like a failed REST request.
- MCP uses no AI credits. Only the HTTP AI endpoint consumes AI credits.
- Analytics tools require Growth or higher whether you call them over MCP or REST.
An agent that calls three tools to answer one question uses three requests. If
that matters, ask the agent to batch: one convert call with several targets is
one request, while a loop of single conversions is several.
What MCP adds
MCP is more than a URL wrapper around REST. It also provides:
- Discovery. The client asks the server which tools exist and what arguments they take. You do not hard-code endpoint names in a prompt.
- Schemas. Tool inputs are declared, so the client can validate arguments before sending them.
- Resources. The bundled API docs and the OpenAPI spec are available inside the conversation.
- Prompts. Four guided workflows:
convert_with_ppp,compare_cost_of_living,build_rate_table, andexplain_error. - Structured errors. Tool results carry
isErrorand_metafields such ascurrencycore/billed_requestsandcurrencycore/retry_after_s.
Those features matter to an agent. They add little to a backend service that already knows which endpoint it needs.
What REST adds
- The AI endpoint.
/v1/aianswers a natural-language question and returnsanswer,data, andtoolCalls. There is no MCP equivalent. - Explicit control. Your code decides timeouts, retries, concurrency, and caching. The MCP server applies its own short retry policy.
- Typed contracts. Use the OpenAPI 3.1 document to generate clients or validate responses. See OpenAPI.
- Deployment fit. Server-side calls fit existing secrets management, egress rules, and observability.
- Every parameter. Tool schemas mirror the REST parameters, but a backend can use the full endpoint surface without a client in the middle.
Using both
A common pattern:
- Prototype the workflow in Claude, ChatGPT, Cursor, or VS Code with MCP.
- Once the calls are stable, move the hot path into a service that calls REST.
- Keep MCP for the interactive, exploratory part of the workflow.
The data is the same, so a result you validate over MCP should match the REST
response for the same arguments and date. If it does not, check the date field
first: a call without a date uses the latest available reference rate, and that
can change between the two calls.