> ## Documentation Index
> Fetch the complete documentation index at: https://apidocs.neetodesk.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect

> Set up the NeetoDesk MCP server in Claude, ChatGPT, Cursor, VS Code, Windsurf and the terminal clients.

## Server details

|               |                                                               |
| ------------- | ------------------------------------------------------------- |
| Server URL    | `https://connect.neetodesk.com/mcp/messages`                  |
| Workspace URL | `https://<your-subdomain>.neetodesk.com/mcp/messages`         |
| Transport     | Streamable HTTP                                               |
| Credential    | `Authorization: Bearer <token>`, an OAuth token or an API key |

Use the server URL for OAuth and let the browser flow pick the workspace. Use the workspace URL
with an API key, since the subdomain already names the workspace. See
[Authentication](/mcp/authentication) for the difference.

## Which method each client supports

| Client      | OAuth | API key |
| ----------- | ----- | ------- |
| Claude      | Yes   | No      |
| ChatGPT     | Yes   | No      |
| Claude Code | Yes   | Yes     |
| Codex       | Yes   | Yes     |
| Cursor      | Yes   | Yes     |
| Gemini CLI  | Yes   | Yes     |
| VS Code     | Yes   | Yes     |
| Windsurf    | No    | Yes     |

Clients that read a config file appear in both lists below. Which method they use is decided by
whether you put a credential in the file: leave the header out and the client runs the OAuth
flow on its first 401.

## OAuth

<Tabs>
  <Tab title="Claude">
    Go to **Settings** → **Connectors** → **Add** → **Add custom connector**, give it a name,
    paste `https://connect.neetodesk.com/mcp/messages` and save. Claude opens NeetoDesk for you
    to approve the connection.

    This works on claude.ai, the Claude desktop app and Cowork.
  </Tab>

  <Tab title="ChatGPT">
    Turn on **Developer mode** under **Settings** → **Security and login**, then go to
    **Plugins** → **Browse plugins** → **+** → **New Plugin** and paste
    `https://connect.neetodesk.com/mcp/messages`.
  </Tab>

  <Tab title="Claude Code">
    ```bash theme={"system"}
    claude mcp add --transport http neetodesk https://connect.neetodesk.com/mcp/messages
    ```

    Then run `/mcp` inside Claude Code and pick **neetodesk** to sign in. Leaving `--header` off
    is what selects OAuth.
  </Tab>

  <Tab title="Codex">
    Add to `~/.codex/config.toml`:

    ```toml theme={"system"}
    [mcp_servers.neetodesk]
    url = "https://connect.neetodesk.com/mcp/messages"
    ```

    Then sign in:

    ```bash theme={"system"}
    codex mcp login neetodesk
    ```
  </Tab>

  <Tab title="Cursor">
    Add to `~/.cursor/mcp.json`:

    ```json theme={"system"}
    {
      "mcpServers": {
        "neetodesk": {
          "url": "https://connect.neetodesk.com/mcp/messages"
        }
      }
    }
    ```

    Restart Cursor, or reload the window from the command palette. Cursor prompts you to sign in
    the first time it connects.
  </Tab>

  <Tab title="Gemini CLI">
    Add to `~/.gemini/settings.json`:

    ```json theme={"system"}
    {
      "mcpServers": {
        "neetodesk": {
          "httpUrl": "https://connect.neetodesk.com/mcp/messages"
        }
      }
    }
    ```

    The key is `httpUrl`. Using `url` selects SSE, which this server does not serve. The sign-in
    flow starts when the server first answers with a 401.
  </Tab>

  <Tab title="VS Code">
    Add to `.vscode/mcp.json`:

    ```json theme={"system"}
    {
      "servers": {
        "neetodesk": {
          "type": "http",
          "url": "https://connect.neetodesk.com/mcp/messages"
        }
      }
    }
    ```

    Needs VS Code 1.99 or newer, with Copilot chat in Agent mode.
  </Tab>
</Tabs>

## API key

Generate a key from your workspace admin panel first. See the
[API keys help article](https://help.neetodesk.com/articles/api-keys).

Replace `YOUR_SUBDOMAIN` with your [workspace subdomain](/getting-started/workspace-subdomain)
and `YOUR_API_KEY` with the key.

<Tabs>
  <Tab title="Claude Code">
    ```bash theme={"system"}
    claude mcp add --transport http neetodesk \
      https://YOUR_SUBDOMAIN.neetodesk.com/mcp/messages \
      --header "Authorization: Bearer YOUR_API_KEY"
    ```
  </Tab>

  <Tab title="Codex">
    Add to `~/.codex/config.toml`:

    ```toml theme={"system"}
    [mcp_servers.neetodesk]
    url = "https://YOUR_SUBDOMAIN.neetodesk.com/mcp/messages"
    bearer_token_env_var = "NEETODESK_API_KEY"
    ```

    `bearer_token_env_var` takes the *name* of an environment variable, not the key itself.
    Export the key under that name before starting Codex.
  </Tab>

  <Tab title="Cursor">
    Add to `~/.cursor/mcp.json`:

    ```json theme={"system"}
    {
      "mcpServers": {
        "neetodesk": {
          "url": "https://YOUR_SUBDOMAIN.neetodesk.com/mcp/messages",
          "headers": {
            "Authorization": "Bearer YOUR_API_KEY"
          }
        }
      }
    }
    ```
  </Tab>

  <Tab title="Gemini CLI">
    Add to `~/.gemini/settings.json`:

    ```json theme={"system"}
    {
      "mcpServers": {
        "neetodesk": {
          "httpUrl": "https://YOUR_SUBDOMAIN.neetodesk.com/mcp/messages",
          "headers": {
            "Authorization": "Bearer YOUR_API_KEY"
          }
        }
      }
    }
    ```
  </Tab>

  <Tab title="VS Code">
    Add to `.vscode/mcp.json`:

    ```json theme={"system"}
    {
      "servers": {
        "neetodesk": {
          "type": "http",
          "url": "https://YOUR_SUBDOMAIN.neetodesk.com/mcp/messages",
          "headers": {
            "Authorization": "Bearer YOUR_API_KEY"
          }
        }
      }
    }
    ```

    <Warning>
      `.vscode/mcp.json` lives in the repository, so a key pasted here is easy to commit by
      accident and would then be readable by everyone with repository access.

      Prefer the OAuth tab above for this client, which stores no credential in the repository
      at all. If you do use a key, ignore the file before you paste it in:

      ```bash theme={"system"}
      echo ".vscode/mcp.json" >> .gitignore
      ```

      Anyone who has already committed a key should treat it as disclosed and revoke it from
      the workspace admin panel, since rewriting history does not remove it from clones.
    </Warning>
  </Tab>

  <Tab title="Windsurf">
    Add to `~/.codeium/windsurf/mcp_config.json`:

    ```json theme={"system"}
    {
      "mcpServers": {
        "neetodesk": {
          "serverUrl": "https://YOUR_SUBDOMAIN.neetodesk.com/mcp/messages",
          "headers": {
            "Authorization": "Bearer YOUR_API_KEY"
          }
        }
      }
    }
    ```

    The key is `serverUrl`, not `url`. Then turn the connection on under **Settings** →
    **Cascade** → **MCP Servers**. Windsurf caps you at 100 tools across every connected server,
    so turn a few others off if it complains.
  </Tab>
</Tabs>

## Next steps

<Card title="Examples" icon="comments" href="/mcp/examples">
  Prompts to try now that you are connected.
</Card>
