26382a7ac6
CI / Clippy (push) Failing after 15m13s
CI / Test (ubuntu-latest) (push) Failing after 16m1s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Build (no embeddings / no ORT) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / Cookbook (Node) (push) Has been cancelled
CI / Pi Extension (Node) (push) Has been cancelled
CI / Rust SDK (lean-ctx-client) (push) Has been cancelled
CI / Embed SDK (lean-ctx-sdk) (push) Has been cancelled
CI / Python SDK (leanctx) (push) Has been cancelled
CI / Hermes Plugin (Python) (push) Has been cancelled
CI / SDK Conformance Matrix (push) Has been cancelled
CI / Coverage (push) Has been cancelled
CI / cargo-deny (push) Has been cancelled
CI / Adversarial Safety (push) Has been cancelled
CI / Benchmarks (push) Has been cancelled
CI / Output-Quality Gate (eval A/B) (push) Has been cancelled
CI / Documentation (push) Has been cancelled
CI / CI Green (push) Has been cancelled
JetBrains Plugin / Actionlint (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (rust) (push) Has been cancelled
JetBrains Plugin / Validation (push) Has been cancelled
JetBrains Plugin / Build (push) Has been cancelled
JetBrains Plugin / Test (push) Has been cancelled
Security Check / Security Scan (push) Has been cancelled
12 KiB
12 KiB
Client Constraints Matrix v1 (docs‑backed SSOT)
This document is the SSOT for client-specific MCP integration constraints (config schema, hook semantics, approval model, limits).
It is used by:
- the Instruction Compiler (client profiles, size bounds, deterministic compilation)
lean-ctx setup/lean-ctx doctor(autotuning, drift detection, repair guidance)
Machine‑readable block
{
"schemaVersion": 1,
"updatedAt": "2026-05-02",
"clients": [
{
"id": "cursor",
"displayName": "Cursor",
"config": { "paths": ["~/.cursor/mcp.json", ".cursor/mcp.json"], "rootKey": "mcpServers" },
"hooks": { "supported": true, "paths": ["~/.cursor/hooks.json", ".cursor/hooks.json"], "events": ["preToolUse"] },
"toolApproval": { "model": "autoApprove", "key": "autoApprove" },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://cursor.com/docs/mcp.md", "https://cursor.com/docs/hooks"]
},
{
"id": "claude-code",
"displayName": "Claude Code",
"config": { "paths": ["~/.claude.json"], "rootKey": "mcpServers" },
"hooks": { "supported": true, "paths": ["~/.claude/settings.json", ".claude/settings.json"], "events": ["PreToolUse"] },
"toolApproval": { "model": "prompted", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": 2048 },
"sources": ["https://code.claude.com/docs/en/overview", "https://code.claude.com/docs/en/hooks"]
},
{
"id": "vscode-copilot",
"displayName": "VS Code / GitHub Copilot",
"config": { "paths": [".vscode/mcp.json", "~/Library/Application Support/Code/User/mcp.json"], "rootKey": "servers" },
"hooks": { "supported": true, "paths": [".github/hooks/hooks.json", "~/.github/hooks/hooks.json"], "events": ["preToolUse", "postToolUse"] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": [
"https://code.visualstudio.com/docs/copilot/reference/mcp-configuration",
"https://code.visualstudio.com/docs/copilot/customization/mcp-servers",
"https://docs.github.com/en/copilot/concepts/context/mcp"
]
},
{
"id": "windsurf",
"displayName": "Windsurf (Cascade)",
"config": { "paths": ["~/.codeium/windsurf/mcp_config.json"], "rootKey": "mcpServers" },
"hooks": { "supported": true, "paths": ["~/.codeium/windsurf/hooks.json", ".windsurf/hooks.json"], "events": ["pre_mcp_tool_use", "post_mcp_tool_use"] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://docs.windsurf.com/windsurf/cascade/mcp", "https://docs.windsurf.com/windsurf/cascade/hooks"]
},
{
"id": "roo",
"displayName": "Roo Code",
"config": { "paths": [".roo/mcp.json"], "rootKey": "mcpServers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://docs.roocode.com/features/mcp/recommended-mcp-servers"]
},
{
"id": "cline",
"displayName": "Cline",
"config": { "paths": ["VS Code extension settings (platform-specific)"], "rootKey": null },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://docs.cline.bot/customization/cline-rules"]
},
{
"id": "zed",
"displayName": "Zed",
"config": { "paths": ["~/Library/Application Support/Zed/settings.json", "~/.config/zed/settings.json"], "rootKey": "context_servers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://zed.dev/docs/assistant/model-context-protocol"]
},
{
"id": "jetbrains",
"displayName": "JetBrains IDEs",
"config": { "paths": ["~/.jb-mcp.json"], "rootKey": "servers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://www.jetbrains.com/help/ai-assistant/mcp.html"]
},
{
"id": "opencode",
"displayName": "OpenCode",
"config": { "paths": ["~/.config/opencode/opencode.json", "opencode.json"], "rootKey": "mcp" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://opencode.ai/docs/mcp-servers/", "https://opencode.ai/docs/config/"]
},
{
"id": "crush",
"displayName": "Crush",
"config": { "paths": ["~/.config/crush/crush.json"], "rootKey": "mcp" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://mintlify.com/charmbracelet/crush/configuration/mcp"]
},
{
"id": "amp",
"displayName": "Amp",
"config": { "paths": ["~/.config/amp/settings.json", ".amp/settings.json"], "rootKey": "amp.mcpServers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://ampcode.com/manual", "https://ampcode.com/news/cli-workspace-settings"]
},
{
"id": "hermes",
"displayName": "Hermes Agent",
"config": { "paths": ["~/.hermes/config.yaml"], "rootKey": "mcp_servers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://hermes-agent.nousresearch.com/docs/reference/mcp-config-reference"]
},
{
"id": "kiro",
"displayName": "AWS Kiro",
"config": { "paths": ["~/.kiro/settings/mcp.json", ".kiro/settings/mcp.json"], "rootKey": "mcpServers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "autoApprove", "key": "autoApprove" },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://kiro.dev/docs/mcp/configuration/"]
},
{
"id": "amazonq",
"displayName": "Amazon Q Developer",
"config": { "paths": ["~/.aws/amazonq/default.json", ".amazonq/default.json"], "rootKey": "mcpServers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "per_tool_permissions", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/mcp-ide.html"]
},
{
"id": "gemini-cli",
"displayName": "Gemini CLI",
"config": { "paths": ["~/.gemini/settings.json", ".gemini/settings.json"], "rootKey": "mcpServers" },
"hooks": { "supported": true, "paths": ["~/.gemini/settings.json", ".gemini/settings.json"], "events": ["BeforeTool", "AfterTool"] },
"toolApproval": { "model": "trust_flag", "key": "trust" },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://geminicli.com/docs/tools/mcp-server/", "https://geminicli.com/docs/hooks/"]
},
{
"id": "antigravity",
"displayName": "Antigravity",
"config": { "paths": ["~/.gemini/antigravity/mcp_config.json"], "rootKey": "mcpServers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://antigravity.google/docs/mcp"]
},
{
"id": "codex",
"displayName": "Codex CLI",
"config": { "paths": ["~/.codex/config.toml", ".codex/config.toml"], "rootKey": "mcp_servers" },
"hooks": { "supported": true, "paths": ["~/.codex/hooks.json"], "events": ["PreToolUse", "SessionStart"] },
"toolApproval": { "model": "policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://developers.openai.com/codex/mcp", "https://developers.openai.com/codex/hooks"]
},
{
"id": "trae",
"displayName": "Trae",
"config": { "paths": ["~/.trae/mcp.json", ".trae/mcp.json"], "rootKey": "mcpServers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://docs.trae.ai/ide/add-mcp-servers", "https://docs.trae.ai/ide/model-context-protocol"]
},
{
"id": "qwen-code",
"displayName": "Qwen Code",
"config": { "paths": ["~/.qwen/settings.json", ".qwen/settings.json"], "rootKey": "mcpServers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://qwenlm.github.io/qwen-code-docs/en/users/configuration/settings/"]
},
{
"id": "verdent",
"displayName": "Verdent",
"config": { "paths": ["~/.verdent/mcp.json"], "rootKey": "mcpServers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "prompted_or_policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://docs.verdent.ai/verdent-for-vscode/advanced-features/mcp"]
},
{
"id": "pi",
"displayName": "Pi Coding Agent",
"config": { "paths": ["~/.pi/agent/mcp.json", ".pi/mcp.json"], "rootKey": "mcpServers" },
"hooks": { "supported": false, "paths": [], "events": [] },
"toolApproval": { "model": "policy", "key": null },
"instructionLimits": { "mcpServerInstructionsMaxChars": null },
"sources": ["https://github.com/nicobailon/pi-mcp-adapter", "https://pi.dev/packages"]
}
]
}
MCP Capability Matrix
| Client | Resources | Prompts | Elicitation | Sampling | Dynamic Tools | Max Tools | Tier |
|---|---|---|---|---|---|---|---|
| Cursor | yes | yes | yes | no | yes | - | 1 |
| Claude Code | yes | yes | yes | yes | yes | - | 1 |
| Kiro | yes | yes | yes | no | yes | - | 1 |
| VS Code Copilot | yes | yes | no | no | yes | - | 2 |
| Zed | no | yes | no | no | yes | - | 2 |
| Codex | yes | no | no | no | yes | - | 2 |
| Windsurf | no | no | no | no | yes | 100 | 3 |
| Antigravity | no | no | no | no | no | - | 4 |
| Gemini CLI | no | no | no | no | no | - | 4 |
Human‑readable notes
- Do not guess formats: every entry must have at least one vendor doc source.
- No destructive writes: installers must be merge‑based and keep other plugins/config intact.
- Tokens/headers: never hardcode or print secrets; prefer env indirection or client-native secret inputs.