VS Code MCP Server Not Showing: Causes and Fixes

When an MCP server does not show up in VS Code, the config file usually was never read at all. The single most direct cause is the top-level key: .vscode/mcp.json uses servers, not mcpServers, so a config copied from Claude Desktop, Cursor, or Zed is silently ignored. If the wrapper is right, the problem is one layer down: a JSON syntax error, a server that registered but never started, or tools that only appear in Copilot Chat’s agent mode.

Symptoms this page covers

Possible causes, ordered by evidence strength

  1. Wrong top-level wrapper (provable statically). VS Code reads onlyservers. An mcpServersor context_servers block is valid JSON but belongs to a different client family, so VS Code ignores it. This is an official-schema fact and the doctor flags it as a blockingcompatibility.wrong-wrapper finding — demonstrated below.
  2. JSON syntax errors (provable statically). A trailing comma, a comment, or an unescaped Windows backslash makes the whole file unparseable, and every server disappears at once. Zed tolerates comments and trailing commas (JSONC); VS Code does not.
  3. The file is not where VS Code looks (officially documented, partly version-dependent). The workspace file must be exactly .vscode/mcp.json at the workspace root. The user-level file is created through the “MCP: Open User Configuration” command; its on-disk location changes between versions, so treat it as version-dependent and prefer the workspace file.
  4. The server registered but never started (visible in the client). A server can parse fine and still fail to launch — a missing executable produces aspawn ENOENT in the server’s output channel. That is a runtime problem, covered by thespawn ENOENT / npx not found guide.
  5. Tools are hidden by the UI mode (officially documented). VS Code exposes MCP tools only inside Copilot Chat agent mode. In ask or edit mode a perfectly healthy server looks absent.

A pasted log line like “server not showing” is only a low-confidence hint: it matches restart pending, scope mismatch, and silent load failure alike. The causes above are ordered so you check what can be proven first instead of trusting a single symptom.

Broken example: the mcpServers wrapper

Broken .vscode/mcp.json

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-github"
      ]
    }
  }
}
Broken .vscode/mcp.json: the top-level key is "mcpServers", which VS Code does not read.

What the doctor reports for this exact input

Client vscode on windows → status blocking_error · rule: compatibility.wrong-wrapper

  • The config uses the "mcpServers" wrapper, which belongs to Claude Desktop / Claude Code / Cursor / Windsurf / Cline (the "mcpServers" family). The selected client (VS Code) expects "servers".

The corrected config

This is the exact output of this site’s generator for VS Code at build time — the top-level key isservers and the stdio entry carries an explicittype:"stdio". (VS Code’s official field table markstype required, while the official minimal stdio example omits it; the generator emits it for clarity, and omitting it is not treated as an error.)

{
  "servers": {
    "github": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-github"
      ]
    }
  }
}

How to fix it

  1. Open .vscode/mcp.json and rename the top-level mcpServers key to servers. Keep any top-level inputs[] array where it is.
  2. Paste the file into the MCP Config Doctor with client set to VS Code — syntax errors and wrapper mistakes surface before you touch the editor again.
  3. Run “Developer: Reload Window” — a brand-new mcp.json is not always picked up on its own.
  4. Run “MCP: List Servers” and start the server if it is stopped.
  5. Open the server’s output channel (View > Output, then pick the server) and read any launch errors; a spawn ENOENT there is a PATH problem, not a config-schema problem.

Verify inside VS Code

What static checks cannot prove

A schema-valid mcp.json proves only that the text is parseable and matches the VS Code schema you checked it against. It does not prove the file sits at a path VS Code actually reads or that the current VS Code instance has loaded it — confirm that with “MCP: List Servers” inside VS Code. Static checks also cannot prove the server binary exists, that VS Code’s PATH finds it, that a token is valid, or that the server’s tools work in agent mode. Those are runtime facts — confirm them with the verification steps above, in VS Code itself.

Official source

VS Code documentation: MCP configuration— the servers wrapper, the inputs[]feature, and agent-mode visibility. (Verification method for this source: search_snippet, indexed official-page excerpts — see the compatibility matrix sources.)

Frequently asked questions

Why is my MCP server not showing in VS Code?

Work through three layers. First, the file: .vscode/mcp.json must use a top-level "servers" object - a config copied from Claude Desktop or Cursor uses "mcpServers" and is ignored entirely, and any JSON syntax error also unloads every server. Second, the server: run "MCP: List Servers" from the Command Palette - if the server is listed but stopped, start it and read its output channel for launch errors. Third, the UI: MCP tools only appear inside Copilot Chat agent mode, so a running server still looks invisible in ask or edit mode.

Does VS Code use mcpServers or servers in mcp.json?

VS Code uses a top-level "servers" key in .vscode/mcp.json. "mcpServers" is the wrapper for Claude Desktop, Claude Code, Cursor, Windsurf, and Cline; VS Code does not read it. Pasting an mcpServers config into .vscode/mcp.json leaves the server list empty with no visible error.

Where is the user-level MCP config in VS Code?

Open the Command Palette and run "MCP: Open User Configuration"; VS Code creates or edits the user-level file for you. Its on-disk location has changed between versions, so the workspace file .vscode/mcp.json is the authoritative, shareable option and the user-level path is best treated as version-dependent.

Do I need to reload VS Code after editing mcp.json?

Editing the file usually triggers a prompt to restart affected servers, but a brand-new mcp.json is not always picked up on its own. Run "Developer: Reload Window", then "MCP: List Servers" to confirm the server registered. If it still does not appear, validate the JSON for syntax errors and check that the top-level key is "servers".

Setting up VS Code from scratch? Read theVS Code MCP config guide. Server starts but dies immediately? Seespawn ENOENT / npx not found. Comparing formats across clients? Check theMCP client compatibility matrix.