VSC-MCP
此项目提供了将语言服务器协议(LSP)功能公开为 MCP(模型上下文协议) 工具。它使AI客户端能够通过标准化的MCP工具调用以编程方式分析和编辑代码。
它最初是一个简单的项目,只专注于使用TypeScript进行编码,然后发展成为一个功能齐全的MCP服务器,支持VS Code支持的任何语言。
有关最新更改和迁移到无头VC代码的完整详细信息,请参阅 这里
Docker模式和VS代码LSP集成
VSC-MCP可以在两种模式下运行:
- 单独模式:它产生了一个本地 打字语言服务器 仅为Types/JavaScript提供LSP支持。
- Docker模式:利用Gitpod的无头VS代码端口,即 OpenVSCode服务器,在Docker中运行,为Rust、Go、C#、Python等VC代码支持的任何语言提供更丰富的LSP支持。
为什么选择Docker模式?
- 统一LSP:避免了为每种语言启动单独的本地语言服务器的麻烦。
- 丰富的扩展生态系统:继承VS Code的扩展支持和高级语言功能的API。
- 实时编辑:打开http://localhost:3000在您的AI代理与MCP交互时实时查看编辑。
- 在没有IDE的情况下工作:我们可以在不打开任何IDE的情况下编写和分析代码。
运作原理
- OpenVSCode服务器 在Docker内部运行,暴露端口
3000(IDE UI)和5007(LSP桥)。 - 所需的VS代码扩展已预先安装(例如。, _锈蚀分析仪_, _火葬场_, _埃斯林特_,以及VSC-MCP扩展)。
- 这 VSC-MCP扩展 在MCP和VS Code后端之间创建WebSocket通道。
- 文件I/O工具使用直接访问;LSP工具使用VS Code的内部语言服务器。
安装
先决条件
设置
- 克隆存储库 和
cd进入它。 - 安装依赖项
bun install- 构建并启动OpenVSCode服务器 (将项目装载到容器中)
PROJECT_PATH=/path/to/your/project docker-compose up- 在您的AI客户端中注册MCP (示例
settings.json)
{
"mcpServers": {
"vsc-mcp": {
"command": "bun",
"args": ["/src/index.ts"],
"env": {
"USE_VSCODE_LSP": "true",
"LOG_DIR": "/logs",
"ALLOWED_DIRECTORIES": "/path/to/your/project"
}
}
}
}环境变量
| 变量 | 目的 |
|---|---|
USE_VSCODE_LSP | 吃起来 true 启用Docker/VS代码LSP模式。 MCP将LSP请求转发到VS Code(端口5007),而不是生成本地语言服务器。 |
ALLOWED_DIRECTORIES | 将直接文件操作限制在指定目录。 |
LOG_DIR | MCP写入调试日志的地方。 |
注: 默认情况下,USE_VSCODE_LSP是false(独立模式)。设置为true使用Docker/VS Code LSP集成。
建议的AI客户端配置
克劳德桌面
目前,最好的工作流程是使用Claude Desktop作为AI客户端,它支持MCP服务器,并提供每月20美元的计划,通过使用VSC-MCP工具,我们可以“聊天”并使用我们的代码库。
- 在MacOS上:
~/Library/Application Support/Claude/claude_desktop_config.json - 在Windows上:
%APPDATA%/Claude/claude_desktop_config.json
将以下配置添加到 mcp_servers 配置文件的部分:
{
"mcpServers": {
"repomix": {
"command": "npx",
"args": [
"-y",
"repomix",
"--mcp"
]
},
"vsc-mcp": {
"command": "bun",
"args": [
"/src/index.ts"
],
"env": {
"USE_VSCODE_LSP": "true",
"LOG_DIR": "/logs",
"ALLOWED_DIRECTORIES": "/path/to/your/project"
}
}
}
}我们建议添加 repomix mcp服务器依赖性,要了解原因,可以阅读 这篇博客文章.
替换 `` 使用vsc-mcp克隆目录的实际路径。
安全功能
Docker工作区限制
当我们启动docker时,我们需要指定工作区目录。
PROJECT_PATH=/path/to/your/project docker-compose upVSC-MCP工具只能访问工作区目录中的文件。
路径限制
VSC-MCP工具包括一个安全功能,用于将操作系统文件操作(磁盘上的读写文件)限制在特定目录:
- 允许的目录:一个环境变量,指定允许文件操作的逗号分隔的目录列表。
例子:
ALLOWED_DIRECTORIES=/home/user/projects,/tmp/workspace- 如果未设置此环境变量,则操作默认仅适用于当前工作目录。
- 所有文件操作(读取、写入、编辑)都将检查目标路径是否在允许的目录内。
- 尝试访问允许目录之外的文件将导致“拒绝访问”错误。
此功能有助于防止未经授权访问系统上的敏感文件和目录。
可用工具
目前,有以下工具可供使用:
edit_symbol:使用LSP在给定文件中按名称和类型编辑符号(函数、类、方法等)。
- 支持各种符号类型:函数、方法、类、接口、变量、常量、属性、字段 - 使用LSP的工作区/符号和文本Document/documentSymbol请求查找符号 - 将编辑直接应用于文件
read_symbol:使用LSP在给定文件中按名称和类型读取符号(函数、类、方法等)。
- 支持与editSymbol相同的符号类型 - 使用LSP定位符号并提取其内容 - 返回符号内容及其位置信息
read_file:读取文件的内容。
- 根据文件扩展名返回具有适当MIME类型的文件内容 - 处理各种文件格式,包括代码、文本和配置文件 - 提供常见问题(找不到文件、目录访问等)的详细错误消息
write_file:创建新文件或用提供的内容覆盖现有文件。
- 如果父目录不存在,则创建父目录 - 支持任何文件类型 - 返回有关文件操作的信息(创建/覆盖、文件大小)
search_replace_file:搜索文件中的内容并将其替换为新内容。
- 搜索时忽略空格差异(空格、制表符、换行符) - 支持内容模式的灵活匹配 - 返回替换次数
get_errors:使用LSP textDocument/诊断API获取特定文件的代码错误和问题。
- 提供详细的诊断,包括错误消息、严重性和位置 - 使用VS Code扩展的诊断api来验证代码 - 返回有关代码问题的结构化信息
find_references:使用LSP在给定文件中按名称和类型查找对符号(函数、类等)的所有引用。
- 支持各种符号类型:函数、方法、类、接口、变量、常量、属性、字段 - 使用LSP的textDocument/reference API查找符号的所有引用 - 返回包含文件路径和位置的引用列表 - 有助于代码分析、重构和理解代码使用
