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

MCPREST
Basehttps://mcp.currency-core.com/mcphttps://api.currency-core.com/v1
CallerAn MCP client (Claude, ChatGPT, Cursor, VS Code, and others)Your service, script, or SDK
AuthOAuth with organization selectionAuthorization: Bearer <key> or x-api-key
DataThe same REST data, exposed as 14 tools15 public paths, including /v1/ai
QuotaShared by the organizationShared by the organization
MeteringOne successful keyed tool call equals one API requestOne successful request equals one API request
Public datalist_countries, list_currencies are unmetered after sign-in/v1/countries, /v1/currencies are public and unmetered
AI endpointNot exposed as a toolGET /v1/ai
WritesNone, every tool is read-onlyNone, every endpoint is a GET
SetupAdd a URL and sign inCreate 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 situationUseWhy
A person chats with an assistant and asks currency questionsMCPThe client discovers tools, handles OAuth, and shows results in the conversation.
A coding agent needs a rate while writing or checking codeMCPNo wrapper code, and the agent can call the same server across projects.
You are building a pricing page, invoice job, or ledger serviceRESTYou control retries, caching, validation, and deployment.
You need the natural-language /v1/ai endpointRESTThe AI endpoint is HTTP-only and is not an MCP tool.
You need a high-volume nightly backfillRESTBatch the calls, cache dated history, and tune concurrency yourself.
You want a quick internal tool or prototypeMCPThe setup is a URL plus consent, not an integration project.
You need per-call logs tied to your own request IDsRESTYour service owns the logging and tracing layer.
You need one answer that covers several currenciesMCP or RESTconvert accepts up to 25 targets in one call, so batch instead of looping.
You need a stable, typed contract checked in CIRESTConsume the OpenAPI 3.1 spec and validate responses in your pipeline.
You want a non-developer to query rates from a chat clientMCPNo 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, and explain_error.
  • Structured errors. Tool results carry isError and _meta fields such as currencycore/billed_requests and currencycore/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/ai answers a natural-language question and returns answer, data, and toolCalls. 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:

  1. Prototype the workflow in Claude, ChatGPT, Cursor, or VS Code with MCP.
  2. Once the calls are stable, move the hot path into a service that calls REST.
  3. 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.