mcp-server-vscode 是一个由 SemanticWorkbenchTeam (微软官方)开发、在 VS Code 市场发布的扩展程序。它的主要功能是将 VS Code 变成一个 MCP 服务器,从而让外部 AI 工具能够更深入地与 VS Code 交互,访问和操作代码、文件、调试等功能。
简单来说,mcp-server-vscode 扩展让 VS Code 成为一个 MCP 服务器。安装这个扩展后,AI 工具可以通过 MCP 协议“连接”到你的 VS Code,读取你的代码、编辑文件、运行命令,甚至进行调试,就像一个超级智能的编程助手直接在你的编辑器里工作。
换句话说,这个扩展就像一座桥梁,把 VS Code 的功能开放给外部 AI,让 AI 能更智能、更高效地帮助你编程。
概述
VSCode MCP 服务器是一个在 VSCode 中集成的扩展,它作为一个模型上下文协议(MCP)服务器,主要目的是暴露一个代码诊断工具——code_checker,该工具会聚合诊断信息(类似于 VSCode 的问题面板显示的内容),并通过服务器推送事件(SSE)使外部 AI 助手可以访问这些信息。这样,您的助手就可以调用 MCP 方法,及时从工作区中检索诊断信息。
特性
-
自动启动:扩展在 VSCode 启动时自动激活(通过
activationEvents: ["*"]配置),确保 MCP 服务器始终运行,无需手动干预。 -
MCP 服务器集成:基于 MCP TypeScript SDK(
@modelcontextprotocol/sdk)构建,扩展实例化 MCP 服务器,注册诊断工具并处理 MCP 协议消息。 -
诊断工具 (
code_checker) :已注册的code_checker工具收集来自 VSCode 内置语言服务的诊断信息,过滤掉无错误的文件。被调用时,它会返回格式化的 JSON 对象,包含有问题的文件的诊断信息。 -
焦点编辑器工具 (
focus_editor) :打开指定文件,并导航到指定的行列。这对用户将文件展示到可视焦点中很有用,但不会将文件内容包括在工具调用结果中。 -
符号搜索工具 (
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)上,动态处理端口冲突。它暴露以下接口:
- GET
/sse:用于建立长期的 SSE 连接。如果默认端口(6010)不可用,用户可以通过 VSCode 设置配置新的端口(见动态端口配置)。 - POST
/messages:接收来自外部客户端(如 AI 助手)的 MCP 消息。特别注意正确处理请求体,避免流相关错误。
- GET
-
详细日志:所有活动,包括服务器启动、SSE 连接状态和消息处理事件,都记录在一个名为“VSCode MCP 服务器”的输出通道,以帮助调试和透明化。
从 Claude Desktop 使用扩展(MCP 客户端)
要将 VSCode MCP 服务器与 Claude Desktop 配合使用,您需要配置 Claude Desktop 以连接到在 VSCode 中运行的 MCP 服务器。由于 MCP 服务器使用 SSE 传输,而 Claude Desktop 只支持 stdio 传输,因此需要使用 mcp-proxy 来桥接这两者之间的通信。
安装 MCP Proxy:
-
选项 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:
必须通过文件>退出选项重启 Claude Desktop,才能使更改生效。仅关闭窗口或使用文件>关闭不会停止应用程序。
重启后,Claude Desktop 应能成功连接到 VSCode 中运行的 MCP 服务器。
MCP 服务器管理
MCP 服务器的状态现在可以通过命令面板直接管理:
- 停止 MCP 服务器(
mcpServer.stopServer):停止当前运行的 MCP 服务器。 - 启动 MCP 服务器(
mcpServer.startServer):在配置的或下一个可用的端口上启动服务器。
这些命令有助于动态管理服务器生命周期,无需重启 VSCode。
动态端口配置
如果端口已经被占用,扩展将建议下一个可用的端口并动态应用。日志中会显示所选端口的相关信息。
用户可以在运行时通过命令面板配置或更改 MCP 服务器的端口:
- 打开命令面板(Ctrl+Shift+P 或 Cmd+Shift+P)。
- 搜索
Set MCP Server Port。 - 输入所需的端口号并确认。
服务器将在新选择的端口上重新启动,并且配置将更新为未来的会话。
也可以通过 VSCode 设置来设置 HTTP 服务器端口:
- 打开 VSCode 设置(文件 > 首选项 > 设置 或 Ctrl+,)。
- 搜索
mcpServer.port。 - 设置所需的端口号。
重启 VSCode 后更改将生效。
MCP 服务器自动启动
默认情况下,MCP 服务器会在 VSCode 激活时自动启动。若要禁用此功能:
- 打开 VSCode 设置(文件 > 首选项 > 设置 或 Ctrl+,)。
- 搜索
mcpServer.startOnActivate。 - 将设置切换为
false。
如果您更喜欢手动启动服务器,可以使用“启动 MCP 服务器”命令。
扩展开发
开发和调试扩展的步骤,源代码可在 GitHub 上找到。
先决条件
-
克隆仓库:
git clone https://github.com/microsoft/semanticworkbench.git -
导航到项目目录:
cd semanticworkbench/mcp-servers/mcp-server-vscode -
安装依赖:
pnpm install -
打包扩展:
pnpm run package-extension
这将生成一个 .vsix 文件。
在本地安装扩展
-
打开主 VSCode 实例。
-
安装 VSIX 包:
- 按
Ctrl+Shift+P(或在 macOS 上按Cmd+Shift+P)打开命令面板。 - 输入并选择“扩展:从 VSIX 安装...”。
- 导航并选择生成的
.vsix文件。
- 按
-
重新加载并验证:
- 安装后,重新加载 VSCode(通过“开发者:重新加载窗口”命令面板)。
- 验证扩展是否已激活。检查“MCP 服务器日志”输出通道,确认 MCP 服务器已启动并监听配置的端口(默认为 6010)。
调试扩展
启动调试:打开项目并按 F5 启动扩展开发主机,这将根据 activationEvents: ["*"] 设置自动激活扩展。
MCP 服务器操作:扩展激活时:
-
启动 MCP 服务器并注册
code_checker工具。 -
在 6010 端口启动 Express HTTP 服务器:
- GET
/sse:建立 SSE 连接(外部客户端连接此处)。 - POST
/messages:处理传入的 MCP 协议消息。
- GET
-
所有活动都输出到“MCP 服务器日志”通道(将自动显示)。
测试 MCP 服务器
可以使用 curl 测试服务:
步骤 1:建立 SSE 连接
在终端 1 中运行:
curl -N http://127.0.0.1:6010/sse
您应该看到类似的输出:
event: endpoint
data: /messages?sessionId=your-session-id
步骤 2:发送初始化请求
在终端 2 中,使用从终端 1 获取的 session 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 服务器应该能够处理初始化消息而不出现错误。