Connect over MCP

ContextCove speaks MCP (Model Context Protocol), so your AI coding agent can query your Context Packs directly — live, with citations — without copy-pasting docs. Connect once and your agent gains three tools:

  • list_packs — see the packs available to you (your own + subscribed starter packs).
  • search_packs(query, pack?) — fast retrieval; returns the most relevant chunks with source URLs. No LLM cost, use freely.
  • ask_pack(question, pack) — a synthesized, grounded answer with citations.
Tip: for a specific library, name the pack — ask_pack(pack="payload", …).Scoped queries are faster and sharper than unscoped ones.

Step 1 — Get your API key

In the ContextCove app, go to Settings → MCP and generate an API key. It looks like ccv_… and is shown once — copy it now. The key authorizes your agent as you, so it only ever sees your packs (every query runs under your row-level security). You can revoke it anytime from the same page.

Your MCP server URL is:

https://contextcove-api-835871271751.europe-west4.run.app/mcp

(Self-hosting or local dev? Use http://localhost:8000/mcp.)


Step 2 — Add it to your tool

Pick your tool below. JSON key names differ between tools — copy the exact block. (url vs serverUrl; root mcpServers vs servers.)

Claude Code — native

Run this in your project directory (replace the key):

bash
claude mcp add --transport http contextcove \
  https://contextcove-api-835871271751.europe-west4.run.app/mcp \
  --header "Authorization: Bearer ccv_YOUR_KEY"
  • Flags go before the name. Default scope is local (this project, private to you — your key is not committed). Use --scope user for all your projects, or --scope project to share a .mcp.json with your team (don't put a real key in a committed file — use ${ENV_VAR} expansion instead).
  • Verify with /mcp inside Claude Code; you should see contextcove connected.

Cursor — native

.cursor/mcp.json (project) or ~/.cursor/mcp.json (global). Key is url:

json
{
  "mcpServers": {
    "contextcove": {
      "url": "https://contextcove-api-835871271751.europe-west4.run.app/mcp",
      "headers": { "Authorization": "Bearer ${env:CONTEXTCOVE_KEY}" }
    }
  }
}

Cursor expands ${env:VAR} in url/headers — set CONTEXTCOVE_KEY=ccv_… in your environment, or hardcode "Bearer ccv_…" (then keep the file out of git).

Windsurf — native (key serverUrl)

~/.codeium/windsurf/mcp_config.json. Windsurf's URL key is serverUrl, not url:

json
{
  "mcpServers": {
    "contextcove": {
      "serverUrl": "https://contextcove-api-835871271751.europe-west4.run.app/mcp",
      "headers": { "Authorization": "Bearer ${env:CONTEXTCOVE_KEY}" }
    }
  }
}

VS Code (GitHub Copilot) — native (root servers)

.vscode/mcp.json (workspace) or "MCP: Open User Configuration" (global). Root key is servers, transport is "type": "http", and secrets go in inputs so the key isn't written into the file:

json
{
  "servers": {
    "contextcove": {
      "type": "http",
      "url": "https://contextcove-api-835871271751.europe-west4.run.app/mcp",
      "headers": { "Authorization": "Bearer ${input:contextcove_key}" }
    }
  },
  "inputs": {
    "contextcove_key": { "type": "password", "promptString": "Enter your ContextCove ccv_ key" }
  }
}

MCP tools work in Copilot Agent mode (VS Code 1.102+).

Claude Desktop — needs the mcp-remote bridge

Claude Desktop's config is stdio-only and its "Custom Connectors" UI only does OAuth — so a static ccv_ key needs the mcp-remote bridge (requires Node/npx). Edit claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
json
{
  "mcpServers": {
    "contextcove": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://contextcove-api-835871271751.europe-west4.run.app/mcp",
        "--header", "Authorization:${AUTH_HEADER}"
      ],
      "env": { "AUTH_HEADER": "Bearer ccv_YOUR_KEY" }
    }
  }
}
Why the env indirection? On Windows/Cursor there's an npx arg-escapingbug that mangles spaces — putting Bearer ccv_… (which has a space) inAUTH_HEADER and writing "Authorization:${AUTH_HEADER}" (no space after thecolon) avoids it. Restart Claude Desktop after editing.

claude.ai (web) — not supported yet

claude.ai's Custom Connectors authenticate via OAuth only — there's no field for a static Authorization: Bearer key and no stdio escape hatch in the browser. So a ccv_ key can't connect on claude.ai web today. Supporting it requires OAuth 2.1 + PKCE on our MCP endpoint — it's on the roadmap. For now, use Claude Code or Desktop.


Compatibility at a glance

Tool

Native HTTP + ccv_ header

Notes

Claude Code

Yes

claude mcp add

Cursor

Yes

key url

Windsurf

Yes

key serverUrl

VS Code

Yes

root servers, agent mode

Claude Desktop

Via bridge

stdio bridge

Claude Web

No



Security

  • Your ccv_ key = a bearer token scoped to your account; every MCP query runs under your RLS, so it only ever returns your packs. Treat it like a password.
  • Don't commit a real key to git — use environment-variable / inputs expansion (shown above), or --scope local/user in Claude Code.
  • Revoke or rotate anytime in Settings → MCP. Revoking is instant.

Troubleshooting

  • "failed to connect" right after adding → usually a bad/expired key. The client reports a failed connection (not an auth prompt) for a wrong header.
  • Tools don't appear → confirm you're in an agent mode (VS Code, Cursor), and that the server name shows connected (/mcp in Claude Code).
  • npx not found (Claude Desktop) → install Node.js, then restart.
  • No packs returned → run list_packs first; if empty, create or subscribe to a pack in the app. Scoped queries need a pack you own or are subscribed to.