- wire spec: lifecycle, stdio + Streamable HTTP transports, tools, utilities, legacy SSE, versioning, changelog (14 Tier 1) - client ecosystem: Claude Code/VS Code/Cursor/Codex configs, mcp-remote, Smithery, registries, Glama (12 Tier 1) - security/ops: authorization draft, trust model, poisoning, rug pulls, production hardening (12 Tier 1) + 68 Tier 2 cards - conclusions: minimal stdlib client on 2025-11-25, normalizer + resolver agent for pasted configs/GitHub URLs, untrusted-until- consent trust model; nothing built yet - audit PASS (14 subjects, 797 sources, 32 conclusions)
3.7 KiB
3.7 KiB
VS Code: Add and manage MCP servers
Metadata
| Field | Value |
|---|---|
| Institute | Molodetz Institute - Research and Retrieval Division |
| Subject | mcp-client-support |
| Document type | Source Dossier |
| Tier | 1 |
| Source title | Add and manage MCP servers |
| Source URL | https://code.visualstudio.com/docs/agent-customization/mcp-servers |
| Source publisher / author | Microsoft |
| Source type | vendor docs |
| Source date (published) | Unknown, not stated (living doc) |
| Date researched | 2026-10-18 |
| Researched by | tai (agent), model: Claude Sonnet 5, on behalf of retoor |
| Research method | gather-subagent direct page fetch, parent synthesis from evidence pack |
| Confidence | High |
| Status | Active |
Summary
Microsoft's task-oriented VS Code documentation for adding and managing MCP servers. It establishes four config locations split across two wrapper keys (mcpServers in .mcp.json/mcp-config.json, servers in .vscode/mcp.json/profile), declares the mcpServers destinations the portable converged future, and documents auto-discovery from other apps, an MCP server gallery, and enable/disable state stored separately from shared config files.
Key findings
- Four config locations: workspace
.mcp.json(top-levelmcpServers, "Preferred for configurations that you share with your team"), workspace.vscode/mcp.json(top-levelservers, for "input variables, development mode, and per-server sandboxing"), user$COPILOT_HOME/mcp-config.json(fallback~/.copilot/mcp-config.json,mcpServers), profilemcp.json(servers). - "The flow also lists the deprecated
.vscode/mcp.jsonand VS Code user-profile destinations for compatibility. Prefer the portable destinations for new servers":.mcp.json/mcp-config.jsonwithmcpServersis the converged future. - Same server entry works under either wrapper key; docs show identical
{"type": "http", "url": ...}and{"command": "npx", "args": [...]}examples undermcpServersand underservers. - Auto-discovery: "VS Code can automatically detect and reuse MCP server configurations from supported applications" (sources include Claude Desktop, GitHub Copilot CLI, Cursor, Windsurf); also an MCP server gallery via Extensions
@mcpand an "MCP: Add Server" guided flow. - "You can enable or disable an MCP server globally or for a specific workspace... The enable/disable state is stored separately from the server configuration in
mcp.json, so it does not affect shared configuration files."
Pros / strengths
- States the convergence direction explicitly (prefer portable
mcpServersdestinations), which resolves the two-wrapper-key ambiguity for tooling. - Documents server entries as wrapper-agnostic with identical examples under both keys, so importers can treat the keys as interchangeable at the entry level.
- Auto-discovery from named rival apps (Claude Desktop, Cursor, Windsurf) is itself evidence of a de facto shared config shape.
Cons / limitations / caveats
- Living doc with no publish date; the deprecation status of
.vscode/mcp.jsoncould shift without a version marker. - Whether VS Code supports
${env:VAR}interpolation is unresolved: only seen in an unopened mirror's table, while Microsoft's own pages document${input:}andenvFile. - Page originally requested at
/docs/copilot/customization/mcp-serversredirected to/docs/agent-customization/mcp-servers, so older links rot.
Relevance to tai
Establishes the two-wrapper-key reality (mcpServers vs servers) that tai's importer must accept on input and the portable mcpServers form it should emit. The ${input:}/envFile secret idioms need translation when resolving VS Code configs for other clients.
Changelog
| Date | Change |
|---|---|
| 2026-10-18 | Initial dossier created. |