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):
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 userfor all your projects, or--scope projectto share a.mcp.jsonwith your team (don't put a real key in a committed file — use${ENV_VAR}expansion instead). - Verify with
/mcpinside Claude Code; you should seecontextcoveconnected.
Cursor — native
.cursor/mcp.json (project) or ~/.cursor/mcp.json (global). Key is url:
{
"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:
{
"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:
{
"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
{
"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 theenvindirection? On Windows/Cursor there's annpxarg-escapingbug that mangles spaces — puttingBearer ccv_…(which has a space) inAUTH_HEADERand 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 + | Notes |
|---|---|---|
Claude Code | Yes |
|
Cursor | Yes | key |
Windsurf | Yes | key |
VS Code | Yes | root |
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 /
inputsexpansion (shown above), or--scope local/userin 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 (
/mcpin Claude Code). npxnot found (Claude Desktop) → install Node.js, then restart.- No packs returned → run
list_packsfirst; if empty, create or subscribe to a pack in the app. Scoped queries need a pack you own or are subscribed to.