Source checked: 2026-06-19 Official source: https://cursor.com/docs/mcp.md
Cursor supports MCP configuration through Cursor settings and mcp.json. Use the markdown docs as the source of truth because they are easier for agents to fetch. Cursor supports remote Streamable HTTP MCP servers through a url field and handles OAuth for remote servers.
Core hosted remote MCP URL: https://core.gradien.ai/mcp
Global config path: ~/.cursor/mcp.json. Project config path: .cursor/mcp.json. Prefer global config for Core so the user carries Core across projects.
Expected global config shape:
{
"mcpServers": {
"core": {
"url": "https://core.gradien.ai/mcp"
}
}
}
Recommended setup path:
- Fetch current Cursor MCP docs before changing config; Cursor labels and auth behavior change over time.
- Use Cursor native config first: inspect existing
~/.cursor/mcp.json, back it up, preserve othermcpServers, and add only the Core server entry. - If the user wants a guided CLI walkthrough, run the setup CLI with
--harness cursor --yes; it should create Core signup/login, then merge Core into~/.cursor/mcp.jsonand back up the previous file. - Do not put bearer tokens or connector keys in Cursor config unless OAuth is impossible and the user explicitly approves that fallback.
- Ask the user to reload Cursor or run Cmd+Shift+P -> Developer: Reload Window. Existing Cursor chats may not hot-load new MCP servers.
- If Cursor prompts for OAuth, have the user approve Core in the browser.
- If Cursor shows Core as
user-core, unauthenticated, or with onlymcp_auth, that is an auth-ready state, not a failed install. Run the visiblemcp_authtool if the agent can, or ask the user to click Connect/Authenticate in Cursor Settings -> Features -> Model Context Protocol. - If Cursor stays on
Waiting for callback...orExchanging token...after the browser opened Cursor, stop repeated Connect/Allow clicks. Fully quit and relaunch Cursor once, then inspect Cursor MCP Logs before another auth attempt. - In logs, repeated unauthenticated requests from
Cursor/<version>to/mcpmean the server is reachable but Cursor did not complete/store OAuth. Treat this as a Cursor OAuth callback state, not a badmcp.jsonURL. - Verify after reload/auth with Cursor MCP tools or Cursor MCP logs. Logs are in the Output panel (Cmd+Shift+U) -> MCP Logs.
- If native OAuth keeps hanging after one clean relaunch, use the fallback only with explicit user approval: create a scoped Core connector key from Core Settings -> Connectors, then add it as an HTTP
Authorizationheader in Cursormcp.json. Prefer${env:CORE_CONNECTOR_KEY}interpolation if Cursor resolves it in the user's version; otherwise warn that a pasted key is stored locally in plaintext and should be rotated later.
If Cursor rejects the minimal remote config, retry using the latest Cursor-documented remote server shape. Some examples include an explicit type for HTTP servers; keep the URL as the source of truth and do not add secrets.
