# Connecting Claude Code, Cursor and Claude Desktop

> Each project is one URL. Here is what to paste into each client, why no configuration picks a transport, and how to check the connection actually works.

- Published: 2026-09-18
- Tags: mcp, claude-code, cursor, setup
- Source: https://contextator.com/en/blog/connecting-your-agent/
- Language: en-US
- Author: Muhammet Şafak

---
Every project Contextator serves is one address:

```
http://localhost:3444/mcp/<project-name>
```

Point a client at it and the agent gains three documentation tools — `search_docs`, `list_topics` and
`read_document`. There is no plugin to install and no API key to paste. The dashboard's **Connect an
agent** panel prints each snippet below already filled in with the real URL; the versions here use
`demo` as the project name.

## Claude Code

```bash
claude mcp add --transport http demo-docs http://localhost:3444/mcp/demo
```

Check that it took:

```bash
claude mcp list
```

Then just ask a question about your documentation. Claude Code decides to call `search_docs` on its
own, because the server describes what it holds when the session opens.

## Cursor

`~/.cursor/mcp.json` for every project, or `.cursor/mcp.json` inside one repository:

```json
{
  "mcpServers": {
    "demo-docs": { "url": "http://localhost:3444/mcp/demo" }
  }
}
```

Restart Cursor, then check **Settings → MCP** for a green indicator.

## Claude Desktop

Claude Desktop speaks stdio, so it needs a bridge. In `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "demo-docs": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:3444/mcp/demo"]
    }
  }
}
```

Restart it, and the tools appear under the connectors icon. The config file lives at
`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS and
`%APPDATA%\Claude\claude_desktop_config.json` on Windows.

## Why no transport setting

Contextator serves **both** MCP transports on the same address and picks by what the client sends:

- **Streamable HTTP**, for current clients: the client `POST`s an `initialize` request and the session
  id comes back in the `mcp-session-id` header.
- **HTTP + SSE**, protocol `2024-11-05`, for older ones: the client `GET`s the URL and the server
  answers with an `endpoint` event pointing at `/mcp/demo/messages?sessionId=…`.

Nothing switches between them, which is why the snippets above are as short as they are.

:::note
The MCP endpoint is unauthenticated until you put a bearer token on that project. Keep the port on a
private network, or close the project — see [Security](https://github.com/Tunedness/Contextator/wiki/Security).
:::

## Checking it without an agent

If a client is quiet and you want to know whether the problem is the endpoint or the client, ask the
endpoint directly from the product repository:

```bash
npm install && npm run smoke -- http://localhost:3444/mcp/demo "how do I re-index"
```

A ranked list of excerpts back means the server is fine and the client's configuration is not.
