DEV Community

Nucleus OS
Nucleus OS

Posted on • Originally published at eidetic.works

How to connect an MCP server to Cursor, Windsurf, and Gemini

Every AI coding editor now supports MCP (Model Context Protocol). But they all have different config file locations, different field names, and different gotchas. Here's the cheat sheet for connecting a remote MCP server to all three major editors.

Cursor

Config location: ~/.cursor/mcp.json (global) or .cursor/mcp.json (per-project)

Remote server (Streamable HTTP):

{
  "mcpServers": {
    "nucleus": {
      "url": "https://relay.nucleusos.dev/mcp-readonly",
      "type": "streamableHttp"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Local server (stdio):

{
  "mcpServers": {
    "nucleus": {
      "command": "python3",
      "args": ["-m", "mcp_server_nucleus"],
      "env": {
        "NUCLEAR_BRAIN_PATH": "/path/to/.brain"
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Gotcha: You must completely quit and restart Cursor after editing the config. MCP servers only load at startup.

UI path: Settings → Tools & MCP → Add new MCP server


Windsurf

Config location: ~/.codeium/windsurf/mcp_config.json (global only — no per-project)

Remote server (Streamable HTTP):

{
  "mcpServers": {
    "nucleus": {
      "serverUrl": "https://relay.nucleusos.dev/mcp-readonly"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Local server (stdio):

{
  "mcpServers": {
    "nucleus": {
      "command": "python3",
      "args": ["-m", "mcp_server_nucleus"],
      "env": {
        "NUCLEAR_BRAIN_PATH": "/path/to/.brain"
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Gotcha #1: Windsurf uses serverUrl instead of url. If you copy a Cursor config, it silently fails — no error, no connection.

Gotcha #2: The path is .codeium/windsurf/, not .windsurf/.

Gotcha #3: Windsurf supports variable interpolation: ${env:VAR_NAME} and ${file:/path} in config fields.

UI path: Plugins icon → Manage plugins → View raw config


Google Gemini / Antigravity

Config location: ~/.gemini/config/mcp_config.json

Remote server (Streamable HTTP):

{
  "mcpServers": {
    "nucleus": {
      "serverUrl": "https://relay.nucleusos.dev/mcp-readonly"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Local server (stdio):

{
  "mcpServers": {
    "nucleus": {
      "command": "python3",
      "args": ["-m", "mcp_server_nucleus"],
      "env": {
        "NUCLEAR_BRAIN_PATH": "/path/to/.brain"
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Gotcha: Gemini Enterprise only accepts Streamable HTTP (not deprecated SSE). The Antigravity MCP Store is a closed curated list — no public submission. Users configure custom servers via the raw config file.

UI path: Antigravity → ... menu → MCP Store → Manage MCP Servers → View raw config


Comparison table

Editor Config path Remote field Per-project?
Cursor ~/.cursor/mcp.json url Yes (.cursor/mcp.json)
Windsurf ~/.codeium/windsurf/mcp_config.json serverUrl No (global only)
Antigravity ~/.gemini/config/mcp_config.json serverUrl No (global only)

The one that catches everyone

If your MCP server works in Cursor but not in Windsurf, check the field name. Cursor uses url, Windsurf uses serverUrl. Same JSON structure, different key. Silent failure, no error message.

If it works in Windsurf but not in Antigravity, check the transport. Antigravity rejects deprecated SSE — it only accepts Streamable HTTP.


Full guides


Building Nucleus — persistent memory for AI coding agents. Open source on GitHub. Install: pip install nucleus-mcp && nucleus-init --scan.

Top comments (0)