VS Code 的 MCP 配置:请使用 servers,而不是 mcpServers
你从 Claude 或 Cursor 里复制了一份可用的 MCP 配置,粘贴到 VS Code,重启之后什么都没发生。没有报错,没有警告,列表里也没有服务器。文件是有效的 JSON,VS Code 对它毫无意见。问题出在一个词上,而且是最外层的那个。
- VS Code 把 MCP 服务器包在 servers 下面。Claude、Cursor 和大多数其他客户端使用 mcpServers。
- 错误的键名完全不会产生任何报错,这就是它让人白白浪费一个小时的原因。
- 各个客户端内部的服务器定义是相同的。只有外层的包装不同。
差异并排对照
同一个服务器、同一条命令、同样的参数。唯一变化的是外层的包装键。
| 客户端 | 配置文件 | 包装键 |
|---|---|---|
| VS Code 中的 GitHub Copilot | .vscode/mcp.json | servers |
| Cursor | ~/.cursor/mcp.json | mcpServers |
| Claude Desktop | claude_desktop_config.json | mcpServers |
| 大多数其他基于配置文件的客户端 | 各不相同 | mcpServers |
VS Code 想要的写法
放在工作区根目录的 .vscode/mcp.json 中。以 MyLinedChart 的连接器为例:
{ "servers": { "mylinedchart": { "command": "npx", "args": ["-y", "@mylinedchart/mcp-chart-context"] } } }
请换成你自己服务器的 command 和 args。内层对象的结构在各个客户端之间不会改变。
其他所有客户端想要的写法
同一个服务器,用于 Claude 或 Cursor:
{ "mcpServers": { "mylinedchart": { "command": "npx", "args": ["-y", "@mylinedchart/mcp-chart-context"] } } }
如果两个编辑器你都开着,那么你确实需要两个文件。这两个编辑器无法共用同一份配置。
为什么它失败时没有任何报错
VS Code 读取文件,发现是有效的 JSON,然后寻找 servers 键。文件里没有 servers 键,所以 VS Code 找到零个要启动的服务器。零个服务器并不是一种错误状态。在 VS Code 看来,你什么都没配置,这是完全合法的做法。
所以没有红色波浪线,没有通知,任何日志里也没有说键名错了的记录。这种失败看起来和服务器启动时崩溃一模一样,所以人们才会跑去调试服务器。
- 文件是有效的 JSON,所以不会出现解析错误。
- 无法识别的顶层键会被忽略,而不是被拒绝。
- 配置的服务器数量为零是正常状态,所以 VS Code 不报告任何故障。
如何确认你遇到的是哪种问题
在认定服务器坏了之前,先证明 VS Code 是否真的尝试过启动它。
- 先检查包装键。检查只需要五秒钟,大多数时候答案就在这里。
- 在终端里手动运行服务器的命令。如果服务器能启动,问题出在别处。
- 在 VS Code 的 MCP 服务器列表里查找该服务器。没有出现,说明从未被配置;出现了但失败,说明是真实的启动错误。
- 如果你是通过一键链接而不是手动安装的,这一整类问题就不适用。
两个相关的陷阱
既然说到这儿,还有另外两件事也会以同样的悄无声息的方式失败。
第一,一键 MCP 安装链接以纯 URL 编码的 JSON 来携带它的内容。Base64 会被 URL 解析器接受,然后悄悄地什么都不做,这是最糟糕的失败方式:一个看起来已经生效的按钮。
第二,对于 VS Code,服务器名称是放在内容里面一起传递的,而不像 Cursor 那样作为单独的查询参数。按 Cursor 的格式构建的链接,在 VS Code 中即使能打开,也无法正确安装。
MyLinedChart 的作用
MyLinedChart 自带一个 MCP 连接器,让 AI 代理获取你的实时图表:品种、你的绘图、指标数值和屏幕上的 K 线。该连接器在你自己的机器上运行,数据不会经过我们的服务器。
应用里有一个一键的 Add to VS Code 按钮,会替你写入正确的键,这就是用它而不是手动编辑的理由。设置方法以及其他客户端:/resources/articles/ibkr-chart-data-github-copilot-vs-code。
下一步
修正键名,重启 VS Code,服务器就会出现。如果服务器仍然没有出现,你现在知道问题出在服务器而不是配置上,需要排查的范围就小得多了。
在 /mcp 连接你的 AI。
常见问题
- 为什么 VS Code 使用 servers 而不是 mcpServers?
- servers 键是 VS Code 自己的 MCP 配置格式中的命名选择,独立于 Claude Desktop 所确立的惯例。两者没有谁更正确。这个差异之所以成为问题,只是因为两者看起来可以互换,而其中一个失败时不会作出任何提示。
- 如果我用了错误的键,VS Code 会警告我吗?
- 不会,这正是全部的难处所在。文件是有效的 JSON,未知的顶层键会被忽略而不是被拒绝,并且配置的服务器数量为零是正常状态。这一切看起来都不像故障。
- 我可以让 VS Code 和 Cursor 共用同一个配置文件吗?
- 不可以。它们读取不同的路径,期望不同的包装键,所以你需要两个文件。内层的服务器定义是相同的,所以只需复制一份,再改一个词。
- 这也适用于 Windows Copilot 吗?
- 不适用。这里说的 Copilot 是 VS Code 里的 GitHub Copilot,它支持 MCP 服务器。Windows 任务栏助手是另一个产品,只是名字相同,并不使用这些配置文件。