MCP

MCP Troubleshooting

Symptom, cause, and fix tables for CurrencyCore MCP connection, OAuth, organization, plan, quota, config format, and client-specific problems.


Use this page when a client will not connect, connects but shows the wrong tools, or returns an error on a tool call. Start with the symptom, then apply the fix.

More detail:

Connection

SymptomLikely causeFix
The server does not appear in the client’s MCP listThe config file is in the wrong place, the entry is not inside the expected object, or the client was not reloadedConfirm the file path for your client, save valid JSON, then restart the client or reload the window.
The client connects, but every keyed tool failsThe OAuth sign-in was never completed, or the browser flow was closed earlyTrigger a tool call again, or use the client’s connect or authenticate action, and finish the browser sign-in.
The connection worked yesterday and now failsThe token expired, the organization disabled MCP, or your membership changedReconnect. If it still fails, check the MCP switch and your organization membership.
The client reports a network or timeout errorThe request took longer than the client’s timeout, or a transient API failure occurredRetry once. Analytics calls over long windows are the slowest. If it repeats, narrow the date range.
A browser opens a page that does not finishThe consent page was opened in a different browser profile, or the redirect was blockedFinish the flow in the same browser where you are signed in to CurrencyCore. Allow the redirect back to the client.
The server responds but no tools are listedThe client cached an older tool list, or the connection is unauthenticatedReconnect and refresh the client’s tool list. In ChatGPT, start a new chat after changing the connector.

Only two tools and no sign-in prompt

This is a specific pre-fix symptom from the 2026-11-10 audit. It is not caused by your config file.

SymptomCauseFix
The client lists only list_countries and list_currencies, never opens a browser, and keyed calls are unavailableThis was a server-side issue in older deployments: an unauthenticated MCP initialize returned 200 with only the two public tools and no WWW-Authenticate challenge, and the protected-resource metadata named the bare origin instead of the /mcp URL. The current server returns a 401 challenge and the /mcp resource.If you still see it, your client may be on a cached connection or an older deployment. Remove and re-add the connector, then retry. If it persists, report the client name, server URL and time of the attempt. Do not start by editing your JSON.

The two reference tools are unmetered, but the current server requires an authorized connection for every /mcp request. Seeing them is normal only after sign-in. Seeing only them, with no sign-in attempt and no keyed tools, means the client is on an older deployment or a cached tool list.

Authentication

SymptomLikely causeFix
401 unauthorizedMissing, expired, or invalid token; the client grant was revoked; or your organization membership was removedReconnect and sign in. Then confirm you still belong to the organization you selected.
Sign-in succeeds, but the next call returns 401The client did not persist the token, or it is using a different profile or workspaceRemove and re-add the server in that profile. In Cursor, check whether a cloud agent is running in a separate environment.
Sign-in loops back to the consent pageThe browser session is signed into a different CurrencyCore account, or cookies are blockedSign out, sign in with the intended account, and allow cookies for the app and auth domains.
403 after a successful sign-inThis is usually not authentication. It can be a plan gate, a disabled MCP switch, or an out-of-window history date.Read the message and see the plan and organization tables below. If the text only says to reconnect, check error.code in the structured tool result.
You cannot find an API key to pasteRemote MCP uses OAuth and does not issue an MCP API keyAdd the URL and complete the browser sign-in. Do not put a REST key in the MCP config.

Organization selection

SymptomLikely causeFix
The organization picker is emptyYour account belongs to no organizationCreate an organization in the dashboard, or ask an owner to invite you.
Calls are billed to the wrong organizationThe connection is bound to the organization chosen at consentDisconnect, reconnect, and choose the correct organization.
A teammate sees different usageGrants are per user and per client applicationEach person signs in and selects their own organization. Usage belongs to the organization, not the client.
Access stops after a team changeMembership is revalidated on every requestAsk an owner to confirm you are still a member. Reconnect after the membership is restored.

Plan and feature gates

SymptomLikely causeFix
403 forbidden on analyze_* toolsAnalytics require Growth or higherUpgrade the organization, or use convert, get_rates, get_history, and get_ppp_factor on Free and Starter.
403 forbidden on get_history for older datesFree history is limited to the last 30 daysRequest a recent window, or upgrade to Starter or higher for full history.
403 on every keyed toolMCP is disabled for the organizationTurn the MCP switch back on in Dashboard, Developer, MCP server.
403 mentions live keysMCP is exempt from the live-key requirement, so this usually comes from a REST call, not MCPCheck whether the tool is actually calling REST with a key. MCP runs on every plan.
A tool is missing from the listThe client has not refreshed its tool list, or it hides tools it cannot authorizeReconnect and refresh. The analytics tools stay listed even on Free; they fail at call time with 403.

Quota and rate limits

SymptomLikely causeFix
429 with “Monthly quota … exceeded”The organization used its monthly request quotaWait for the next billing period, upgrade, or raise the hard cap if one is configured.
429 with “Rate limit exceeded”The organization hit its per-minute limitWait for the window to reset. The tool result includes currencycore/retry_after_s.
429 returns quickly, even though the first call workedThe MCP server retries transient failures, then surfaces the limit. A long Retry-After is capped at 5 seconds for the retry, so the client still sees a 429.Back off in the client. Do not loop the tool call.
Usage is higher than expectedEach successful keyed tool call is one API request, and an agent may call several tools for one answerCheck the MCP panel in the dashboard. Ask the agent to use fewer tools or a single analytics call.
You expected AI credits to be usedMCP does not use AI creditsMCP calls count as API requests. AI credits apply only to the HTTP /v1/ai endpoint.

Config format

The most common setup failure is using another client’s key name. These are not interchangeable.

ClientFileContainerURL field
Claude Desktop (legacy JSON)claude_desktop_config.jsonmcpServersurl
Claude Code.mcp.jsonmcpServersurl, with type: "http"
Cursor.cursor/mcp.json or ~/.cursor/mcp.jsonmcpServersurl
VS Code portable.mcp.jsonmcpServersurl, with type: "http"
VS Code legacy.vscode/mcp.jsonserversurl, with type: "http"
Windsurf / Devin~/.config/devin/mcp_config.jsonmcpServersserverUrl
Gemini CLI~/.gemini/settings.jsonmcpServershttpUrl
Codexconfig.toml[mcp_servers.<name>]url
OpenCode V2OpenCode configmcp.serversurl, with type: "remote"

Other format problems:

SymptomCauseFix
The whole file fails to loadComments or trailing commas in a .json fileRemove them and validate the file as JSON.
servers is ignored in VS CodeYou are using the portable .mcp.json format, which expects mcpServersUse mcpServers for .mcp.json, and servers only for the legacy .vscode/mcp.json.
Cursor cannot see a serverThe file is in a different project directory than the one Cursor openedPut .cursor/mcp.json in the opened project root, or use the global file.
serverUrl is ignoredYou are editing a client that expects urlCheck the table above. Cursor, Claude, and VS Code use url.
httpUrl is ignoredYou are editing a client that expects urlhttpUrl is the Gemini CLI field.

Client-specific issues

ClientSymptomFix
ClaudeYou cannot find a JSON file for connectorsRemote connectors are added in Settings, then Connectors, then Add custom connector. The JSON file is for local servers. See Claude setup.
ClaudeThe connector was added but Claude does not call itAsk explicitly: “Use the CurrencyCore convert tool.” Confirm the connector is enabled for the conversation.
ChatGPTThe custom MCP option is missingFull MCP requires a Business, Enterprise, or Edu workspace on the web. Pro accounts have limited read/fetch support. A workspace admin may need to allow the connector.
ChatGPTThe tool list is stale after a server changeChatGPT freezes the tool list until the connector is refreshed. Start a new chat or refresh the connector.
CursorTools do not appear after editing JSONOpen Customize, then MCP, and confirm the server is listed. Reload the window. Check the MCP log in the Output panel.
CursorA cloud agent cannot use the serverCloud agents run in a separate environment and do not reuse your local OAuth session. Authenticate in that environment separately.
VS CodeThe server appears but tools are unavailableOpen the Command Palette and run MCP: List Servers, then start the server. Use MCP: Show Output for errors.
Gemini CLISign-in fails in a remote shellgemini mcp auth needs a local browser. Run it on a machine with a browser, or forward the callback to your local browser.
CodexThe server is added but unauthenticatedRun the client’s MCP authentication step, or remove and re-add the server with codex mcp add, then retry.
OpenCodeThe server is not listedCheck the mcp.servers entry in the OpenCode config, then use the client’s MCP authentication flow.
Windsurf / DevinThe server is blocked in a company workspaceAn enterprise admin may need to allow the server URL in the workspace policy.

Still stuck

Collect these before asking for help:

  • The client name and version.
  • The exact config file or UI path you used.
  • The tool name and the full error body, including error.code and any currencycore/* metadata.
  • The time of the attempt, in UTC.
  • The organization you selected.

Then check status for an active incident.