?client= query parameter changes. Pick your IDE below.
The query alias (
?client=cursor, ?client=claude-code, etc.) is there so mcp-remote keeps a separate OAuth cache per IDE on the same machine. Without it, connecting Cursor and Claude Code on the same laptop would share one row in Connected Apps; with it they each get their own with independent revoke. It’s a cache-buster only — the server treats every alias as the same endpoint.Pick your IDE
- Cursor
- Claude Code
- Claude Desktop
- Windsurf
Cursor speaks stdio MCP only — it needs the Restart fully. A window reload is not enough — Cursor only re-spawns the MCP subprocess on a full app restart.On the first tool call, your browser opens to the Connie consent screen — it will say “Cursor wants to connect to your Connie workspace”. After you click Allow, Cursor’s AI can call every tool listed on the Overview.
mcp-remote bridge.Config file- Windows:
C:\Users\<you>\.cursor\mcp.json - macOS / Linux:
~/.cursor/mcp.json
Why port 0?
mcp-remote runs a tiny local HTTP server to receive the OAuth callback. The positional 0 tells your OS to pick any free ephemeral port, so you can’t hit EADDRINUSE collisions with another local process — including stale runs of mcp-remote itself. The chosen port is included in the OAuth redirect, so the callback resolves correctly.
If you’re seeing port-related errors anyway, jump to Troubleshooting.
Advanced
Custom MCP hosts (non-IDE clients)
Custom MCP hosts (non-IDE clients)
Building a custom MCP host or internal bot? Use the same pattern as the IDE snippets above — just set Casing and punctuation are normalized server-side —
client_name to whatever you want shown on consent screens and in the Connected Apps row:"cursor", "Cursor", and "CURSOR" all land as Cursor. Unknown names (anything outside Connie’s canonical list of Cursor / Claude Code / Claude Desktop / Windsurf) pass through verbatim, so a custom name shows up in Connected Apps exactly as you wrote it.Why we recommend the metadata flag
Why we recommend the metadata flag
mcp-remote registers as a generic placeholder (MCP CLI Proxy in current builds, MCP CLI Client in older ones) when no --static-oauth-client-metadata is passed. That string is what the OAuth consent screen renders to your user — they see “MCP CLI Proxy wants to connect to your Connie workspace” with no indication it’s actually Cursor. That’s a real UX issue: users hesitate or refuse the grant.Connie has a fallback that lazily upgrades the Connected Apps row to the right IDE name once the first MCP tool call arrives (it reads clientInfo.name from the MCP initialize handshake), but the consent screen has already been rendered by that point. The lazy upgrade only fixes Connected Apps after the fact — it doesn’t help the consent screen.Bottom line: keep the --static-oauth-client-metadata flag in every snippet. The fallback is a safety net for misconfigured clients, not a substitute for correct attribution.Raw mcp-remote for debugging
Raw mcp-remote for debugging
Useful for end-to-end OAuth debugging without an IDE in the loop. Verbose output goes to stderr.Add To force a fresh OAuth flow (clear the local token cache):
--debug for the full handshake log:What’s next
Multi-workspace
One OAuth grant covers every workspace you’re in — here’s how to address a specific one per request.
Troubleshooting
OAuth failures, missing tools, and the
MCP CLI Proxy placeholder explained.