Contextator
ENTR

Connecting Claude Code, Cursor and Claude Desktop

Each project is one URL and, by default, one token. What to paste into each client, why no setting picks a transport, and how to check the connection works.

Updated: 3 min read

Every project Contextator serves is one address:

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

Point a client at it and the agent gains five documentation tools — search_docs, list_topics, read_document, whats_new and report_gap. There is no plugin to install and no vendor API key to paste — only the project’s own token, because a new project requires one. The dashboard’s Connect an agent panel prints each snippet below already filled in with the real URL, and the Authorization header with a placeholder where your token goes; the versions here use demo as the project name and ctxm_9f3a… for the token the project page showed you. For a project switched to open, leave the header out.

Claude Code

claude mcp add --transport http demo-docs http://localhost:3444/mcp/demo \
  --header "Authorization: Bearer ctxm_9f3a…"

Check that it took:

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:

{
  "mcpServers": {
    "demo-docs": {
      "url": "http://localhost:3444/mcp/demo",
      "headers": { "Authorization": "Bearer ctxm_9f3a…" }
    }
  }
}

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:

{
  "mcpServers": {
    "demo-docs": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote", "http://localhost:3444/mcp/demo",
        "--header", "Authorization:${AUTH_HEADER}"
      ],
      "env": { "AUTH_HEADER": "Bearer ctxm_9f3a…" }
    }
  }
}

The token sits in env and the header argument has no space in it on purpose: on Windows, Claude Desktop hands args to npx without escaping spaces, so "Authorization: Bearer …" arrives split in two and every request comes back 401. It also keeps the token out of the process list.

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

Streamable HTTP is the way to connect, and every snippet above uses it. The legacy transport is still served on the same address for older clients, and the server picks by what the client sends:

  • Streamable HTTP, 2026-07-28, for current clients: a POST that carries the _meta envelope is served statelessly. There is no initialize handshake and no session, and an mcp-session-id header, if one arrives, is ignored.
  • Streamable HTTP, session-based, for earlier clients: the client POSTs an initialize request and the session id comes back in the mcp-session-id header.
  • HTTP + SSE, protocol 2024-11-05, legacy: the client GETs the URL and the server answers with an endpoint event pointing at /mcp/demo/messages?sessionId=…. It is deprecated — it keeps working, but new clients should not be set up on it.

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

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:

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. The smoke test sends no Authorization header, so a project that requires a token answers it 401 — Connecting AI Clients shows the curl check for that case.

If you haven’t started a project yet, the home page walks through the whole setup in about ten minutes. The about page covers what Contextator does and does not do, worth reading before you commit a project’s documentation to it.

Frequently asked

Do I need an API key to connect a client?
Not a vendor's. A new project requires a bearer token of its own — creating the project mints the first one and shows it once — and the client sends it as an Authorization header. A project can instead require an account of your own instance, or be switched to open deliberately. Embeddings run locally by default, so there is no provider key either.
Can one client connect to several projects at once?
Yes. Add one entry per project. They stay isolated — the agent simply has two sets of tools, and a search in one never returns documents from the other.
Share

Arrow keys to move, Enter to open.