VSCode MCP服务器
概述
这 VSCode MCP服务器 是一个VSCode扩展,充当直接集成在VSCode中的模型上下文协议(MCP)服务器。其主要目的是揭示一种编码诊断工具,即 code_checker--它聚合诊断消息(类似于VSCode的问题面板中显示的消息),并使外部AI助手可以通过服务器发送事件(SSE)访问它们。这允许您的助手调用MCP方法,并从您的工作区中及时检索诊断信息。
特性
- 自动启动:
VSCode启动时,扩展会自动激活(使用 "activationEvents": ["*"] 在 package.json),确保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)上运行,并动态处理端口冲突。它揭示了:
- A. 获取 /sse 端点,以建立长期的服务器发送事件(SSE)连接。如果默认端口(6010)不可用,用户可以通过其VSCode设置配置新端口(请参阅下面的动态端口配置)。 - A. 发布 /messages 用于从外部客户端(如您的AI助手)接收MCP消息的端点。 特别注意正确处理请求体——这要归功于传递已经解析的 req.body 以避免与流相关的错误。
- 详细日志记录:
所有活动,包括服务器启动、SSE连接状态和消息处理事件,都记录到名为的输出通道中 “VSCode MCP服务器” 以帮助调试和透明度。
使用Claude Desktop(MCP客户端)的扩展
要将VSCode MCP服务器与Claude Desktop一起使用,您需要配置Claude Desktop以连接到在VSCode中运行的MCP服务器。由于MCP服务器的实现使用SSE传输,而Claude Desktop仅支持stdio传输,因此您需要使用 mcp代理 以弥合两者之间的沟通。
- 安装MCP代理:
- 选项1:带紫外线(推荐)
uv tool install mcp-proxy- 选项2:使用pipx(替代)
pipx install mcp-proxy- 配置Claude桌面:
- 打开克劳德桌面并导航到 文件 > 设置 > 开发者 选项卡。
- 点击 编辑配置 要打开配置文件,请启动所需的编辑器以修改配置文件内容。
- 向添加新条目 mcpServers 详细信息如下:
{
"mcpServers": {
"vscode": {
"command": "mcp-proxy",
"args": ["http://127.0.0.1:6010/sse"]
}
}
}- 重新启动克劳德桌面:
- 你 必须 使用重新启动Claude Desktop以使更改生效 文件 > 退出 选项。 - 注意:这与仅仅关闭窗口或使用 文件 > 关闭,这使得应用程序在后台运行。 - 在存在并重新启动之后,Claude Desktop现在应该能够连接到在VSCode中运行的MCP服务器。
MCP服务器管理
现在可以直接从命令面板管理MCP服务器状态:
- 停止MCP服务器 (
mcpServer.stopServer):停止当前正在运行的MCP服务器。 - 启动MCP服务器 (
mcpServer.startServer):在配置的或下一个可用端口上启动服务器。
这些命令有助于动态管理服务器生命周期,而无需重新启动VSCode。
动态端口配置
如果端口已在使用中,扩展程序将建议下一个可用端口并动态应用它。反映所选端口的日志可以在 MCP服务器日志 输出通道。
用户可以在运行时使用命令面板配置或更改MCP服务器的端口:
- 打开命令选项板(
Ctrl+Shift+P或Cmd+Shift+P在macOS上)。 - 搜索
Set MCP Server Port. - 在输入框中输入所需的端口号并确认。
服务器将在新选择的端口上动态重启,并为未来的会话更新配置。
HTTP服务器端口也可以通过VSCode设置进行设置:
- 打开VSCode设置(
File > Preferences > Settings或Ctrl+,). - 搜索
mcpServer.port. - 设置所需的端口号。
- 重新启动VSCode以使更改生效。
MCP服务器自动启动
默认情况下,MCP服务器在VSCode激活时自动启动。要禁用此功能,请执行以下操作:
- 打开VSCode设置(
File > Preferences > Settings或Ctrl+,). - 搜索
mcpServer.startOnActivate. - 将设置切换到
false.
如果您更喜欢使用手动启动服务器,这可能很有用 Start MCP Server 命令。
扩展开发
开发和调试扩展的步骤,源代码可在 .
先决条件
- 克隆存储库:
将Semantic Workbench存储库克隆到本地计算机:
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软件包:
- 按Ctrl+Shift+P(或macOS上的Cmd+Shift+P)打开命令面板。 - 键入并选择“扩展:从VSIX安装…”。 - 导航到并选择生成的.vsix文件。
- 重新加载并验证:
安装后,重新加载VSCode(通过命令面板中的“开发人员:重新加载窗口”),并验证扩展是否处于活动状态。检查“MCP服务器日志”输出通道,查看确认MCP服务器已启动并正在配置端口(默认值:6010,或下一个可用端口)上侦听的日志。
调试扩展
- 开始调试:
在VSCode中打开项目,然后按 F5 启动扩展开发主机。这将根据以下情况自动激活扩展 "activationEvents": ["*"] 设置。
- MCP服务器操作:
激活后,扩展名:
- 启动注册的MCP服务器 code_checker 工具。 - 在端口上设置Express HTTP服务器 6010 与: - 获取 /sse: 建立SSE连接(外部客户端在此处连接)。 - 发布 /messages: 处理传入的MCP协议消息。 - 将所有活动输出到 “MCP服务器日志” 频道(将自动显示)。
在本地安装扩展
- 打开主VSCode实例:
启动主VSCode(在扩展开发主机外)。
- 安装VSIX软件包:
- 按Ctrl+Shift+P(或macOS上的Cmd+Shift+P)打开命令面板。 - 键入并选择“扩展:从VSIX安装…”。 - 导航到并选择生成的.vsix文件。
- 重新加载并验证:
安装后,重新加载VSCode(通过命令面板中的“开发人员:重新加载窗口”),并验证扩展是否处于活动状态。检查“MCP服务器日志”输出通道,查看确认MCP服务器已启动并正在端口6010上侦听的日志。
测试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获得的会话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服务器应无错误地处理您的初始化消息。
