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
POSTthat carries the_metaenvelope is served statelessly. There is noinitializehandshake and no session, and anmcp-session-idheader, if one arrives, is ignored. - Streamable HTTP, session-based, for earlier clients: the client
POSTs aninitializerequest and the session id comes back in themcp-session-idheader. - HTTP + SSE, protocol
2024-11-05, legacy: the clientGETs the URL and the server answers with anendpointevent 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.