VSCode MCP 服务器 是一个 VSCode 扩展,它作为模型上下文协议(MCP)服务器直接集成在 VSCode 内。其主要目的是提供一个编码诊断工具——即 code_checker,该工具聚合诊断消息(类似于 VSCode 的问题面板中显示的消息),并通过服务器发送事件(SSE)使这些消息对外部 AI 助手可用。这使得您的助手能够调用 MCP 方法并从您的工作区获取及时的诊断信息。
自动启动:
扩展在 VSCode 启动时自动激活(通过 package.json 中的 "activationEvents": ["*"]),确保 MCP 服务器始终运行而无需手动干预。
MCP 服务器集成:
使用 MCP TypeScript SDK (@modelcontextprotocol/sdk) 构建,扩展实例化一个 MCP 服务器,注册诊断工具并处理 MCP 协议消息。
诊断工具 (code_checker):
注册的 code_checker 工具收集来自 VSCode 内置语言服务的诊断信息,过滤掉没有错误的文件。当被调用时,它返回一个包含诊断信息的格式化 JSON 对象(仅针对有问题的文件)。
焦点编辑器工具 (focus_editor): 在 VSCode 编辑器中打开特定文件,并导航到指定的行和列。这对于将文件带入用户的视觉焦点非常有用,但不包括文件内容在工具调用结果中。
搜索符号工具 (search_symbol): 在工作区中搜索符号,主要使用“转到定义”,如果找不到则回退到文本搜索(类似于 Ctrl+Shift+F)。可以可选地使用 focus_editor 工具在编辑器中打开结果。
调试会话管理工具: 扩展提供了直接使用 MCP 管理 VSCode 调试会话的工具:
list_debug_sessions:检索工作区中的所有活动调试会话。start_debug_session:根据提供的配置启动新的调试会话。stop_debug_session:停止与特定会话名称匹配的调试会话。restart_debug_session:通过先停止再根据提供的配置重新启动调试会话来重启调试会话(新功能!)。SSE 通信: 基于 Express 的 HTTP 服务器运行在一个可配置的端口上(默认:6010),并动态处理端口冲突。它暴露了:
/sse 端点,用于建立长期的服务器发送事件(SSE)连接。如果默认端口(6010)不可用,用户可以通过他们的 VSCode 设置配置一个新的端口(参见动态端口配置)。/messages 端点,用于接收来自外部客户端(如您的 AI 助手)的 MCP 消息。
特别注意正确处理请求体——感谢传递已解析的 req.body 来避免流相关错误。详细日志记录: 所有活动,包括服务器启动、SSE 连接状态和消息处理事件,都被记录到名为 "VSCode MCP 服务器" 的输出通道中,以帮助调试和透明度。
要使用 VSCode MCP 服务器与 Claude Desktop,您需要配置 Claude Desktop 以连接到在 VSCode 中运行的 MCP 服务器。由于 MCP 服务器的实现使用 SSE 传输,而 Claude Desktop 只支持 stdio 传输,因此您需要使用 mcp-proxy 来桥接两者之间的通信。
安装 MCP 代理:
选项 1:使用 uv(推荐)
uv tool install mcp-proxy
选项 2:使用 pipx(替代方案)
pipx install mcp-proxy
配置 Claude Desktop:
打开 Claude Desktop 并导航至 文件 > 设置 > 开发者 标签。
点击 编辑配置 打开配置文件,启动您选择的编辑器以修改配置文件内容。
在 mcpServers 中添加一个新条目,如下所示:
{
"mcpServers": {
"vscode": {
"command": "mcp-proxy",
"args": ["http://127.0.0.1:6010/sse"]
}
}
}
重启 Claude Desktop:
现在可以直接从命令面板管理 MCP 服务器的状态:
mcpServer.stopServer):停止当前正在运行的 MCP 服务器。mcpServer.startServer):在配置的或下一个可用端口上启动服务器。这些命令有助于动态管理服务器生命周期,而无需重启 VSCode。
如果端口已被占用,扩展将建议下一个可用端口并动态应用。所选端口的日志可以在 MCP 服务器日志 输出通道中找到。
用户可以在运行时使用命令面板配置或更改 MCP 服务器的端口:
Ctrl+Shift+P 或 macOS 上的 Cmd+Shift+P)。设置 MCP 服务器端口。服务器将在新选定的端口上动态重启,并且配置将更新以供未来会话使用。
HTTP 服务器端口也可以通过 VSCode 设置进行设置:
文件 > 首选项 > 设置 或 Ctrl+,)。mcpServer.port。MCP 服务器默认会在 VSCode 激活时自动启动。要禁用此功能:
文件 > 首选项 > 设置 或 Ctrl+,)。mcpServer.startOnActivate。false。如果您希望手动使用 启动 MCP 服务器 命令来启动服务器,这可能会很有用。
开发和调试扩展的步骤,源代码可在 GitHub 获取。
克隆仓库: 将语义工作台仓库克隆到本地机器:
git clone https://github.com/microsoft/semanticworkbench.git
导航到项目目录:
cd semanticworkbench/mcp-servers/mcp-server-vscode
安装依赖项: 确保您已安装 Node.js(v16 或更高版本)和 pnpm。然后,在项目目录中运行:
pnpm install
打包扩展: 要打包扩展,请执行:
pnpm run package-extension
这将在项目根目录生成一个 .vsix 文件。
打开您的主 VSCode 实例:
启动您的主 VSCode(在扩展开发主机之外)。
安装 VSIX 包:
重新加载并验证:
安装后,通过命令面板中的 "Developer: 重新加载窗口" 重新加载 VSCode,并验证扩展是否处于活动状态。检查 "MCP 服务器日志" 输出通道以查看确认 MCP 服务器已启动并在配置的端口(默认:6010,或下一个可用端口)上监听的日志。
开始调试:
在 VSCode 中打开项目,然后按 F5 启动扩展开发主机。这将基于 "activationEvents": ["*"] 设置自动激活扩展。
MCP 服务器操作: 激活时,扩展:
code_checker 工具。/sse: 建立 SSE 连接(外部客户端连接到这里)。/messages: 处理传入的 MCP 协议消息。打开您的主 VSCode 实例:
启动您的主 VSCode(在扩展开发主机之外)。
安装 VSIX 包:
重新加载并验证:
安装后,通过命令面板中的 "Developer: 重新加载窗口" 重新加载 VSCode,并验证扩展是否处于活动状态。检查 "MCP 服务器日志" 输出通道以查看确认 MCP 服务器已启动并在端口 6010 上监听的日志。
您可以使用 curl 来测试服务:
打开终端 1 并运行:
curl -N http://127.0.0.1:6010/sse
您应该看到类似以下的输出:
event: endpoint
data: /messages?sessionId=your-session-id
在终端 2 中,使用从终端 1 获得的会话 ID(如有必要),发送一个 POST 请求(如有需要,包括工作区等所需字段):
curl -X POST "http://127.0.0.1:6010/messages?sessionId=your-session-id" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "initialize",
"id": 0,
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {
"roots": { "listChanged": true }
},
"clientInfo": {
"name": "mcp",
"version": "0.1.0"
},
"workspace": {
"folders": []
}
}
}'
如果一切配置正确,MCP 服务器应无误地处理您的初始化消息。