内容
# VS 代码 LSP MCP 桥接
将 VS 代码的语言智能功能暴露为本地 MCP 服务器,供 AI 编码工具使用。
该扩展程序允许 MCP 客户端向活动的 VS 代码工作区请求语义引用、定义、符号、悬停信息、诊断信息、调用层次、类型层次、语义标记、代码操作、格式化编辑和重命名操作。
它与 Codex 无绑定,也与 C# 无绑定。它适用于任何实现 VS 代码语言提供者 API 的语言扩展。C# Dev Kit/Roslyn 是一个强有力的使用案例,但 TypeScript、JavaScript、Python、Java、Go、Rust、PHP 等语言也可以在它们的 VS 代码语言扩展暴露相应功能时工作。
目标很简单:为 AI 编码工具提供真正的语义导航路径,而不是强制它们使用文本搜索来近似代码关系。
## 要求
- VS 代码 `1.100.0` 或更高版本。
- 为要检查的工作区安装语言扩展。
- 可以连接到可流式传输的 HTTP MCP 服务器的 MCP 客户端。
最终用户不需要安装 Node.js。Node/npm 仅为开发时工具。
## 快速入门
1. 从 Visual Studio 市场安装扩展。
2. 打开要让 AI 编码工具检查的工作区。
3. 确保相关的语言扩展已加载并在 VS 代码中正常工作。
4. 对于 VS 代码/GitHub Copilot,请使用 VS 代码的 MCP UI 自动注册的 `VS 代码 LSP MCP 桥接` 服务器。
5. 对于 Codex、Claude Code 或其他外部 MCP 客户端,请运行 `LSP MCP 桥接:复制 MCP 客户端配置`。
6. 选择您的客户端:Codex、Claude Code 或通用 HTTP MCP 客户端。仅当您想要可选的显式 JSON 时,才选择 VS 代码/GitHub Copilot。
7. 如果您希望扩展打开一个常见的目标配置文件,请运行 `LSP MCP 桥接:打开 MCP 客户端配置文件`。
8. 将复制的配置粘贴到该客户端中,并在需要时重新启动或重新加载客户端。
默认情况下,桥接在 VS 代码启动完成后会自动启动。您还可以使用:
- `LSP MCP 桥接:启动服务器`
- `LSP MCP 桥接:停止服务器`
- `LSP MCP 桥接:显示状态`
- `LSP MCP 桥接:路由网关到此工作区`
- `LSP MCP 桥接:复制 MCP 客户端配置`
- `LSP MCP 桥接:打开 MCP 客户端配置文件`
对于特定于客户端的设置,请运行 `LSP MCP 桥接:复制 MCP 客户端配置` 并选择目标客户端。为了避免寻找常见的配置文件,请运行 `LSP MCP 桥接:打开 MCP 客户端配置文件`;它会打开选定的文件,只有在确认后才会创建缺失的文件,并将匹配的代码段复制到剪贴板。
当多个 VS 代码窗口打开时,VS 代码/GitHub Copilot 自动注册会自动使用当前窗口的自己的桥接端点。最终用户不需要运行工作区选择命令来访问此路径。
Codex、Claude Code、Cursor、Windsurf、Cline 和 Roo Code 等外部客户端使用复制到其配置中的稳定本地网关端点。第一个桥接拥有该网关,其他窗口在其后注册。如果打开多个 VS 代码窗口,请仅当您希望新的外部客户端会话针对特定窗口时,运行 `LSP MCP 桥接:路由网关到此工作区`。
默认配置文件位置列在 [docs/CLIENTS.md](docs/CLIENTS.md) 中。
## VS 代码自动注册
扩展程序向 VS 代码注册了一个 MCP 服务器定义提供程序。VS 代码和 GitHub Copilot 可以在没有 `.vscode/mcp.json` 条目的情况下发现 `VS 代码 LSP MCP 桥接`;当 VS 代码启动该服务器时,扩展程序会在需要时启动本地桥接,并提供当前窗口的端点和持有者令牌头。
此自动注册仅适用于 VS 代码的 MCP 主机。Codex 和 Claude Code 不会读取 VS 代码扩展提供的 MCP 服务器定义,因此它们仍然需要自己的 MCP 配置。请为这些客户端使用 `LSP MCP 桥接:复制 MCP 客户端配置`。
## 支持的语言
桥接将请求委托给 VS 代码,因此语言支持取决于已安装的语言扩展和项目状态。
示例:
- 通过 C# Dev Kit/Roslyn 支持 C#
- 通过内置的 TypeScript 语言服务支持 TypeScript 和 JavaScript
- 通过 Python 和 Pylance 扩展支持 Python
- 通过 Java 语言扩展支持 Java
- 通过 Go 扩展支持 Go
- 通过 rust-analyzer 支持 Rust
并非所有提供程序都实现了所有 VS 代码语言功能。例如,某个语言扩展可能支持定义和引用,但不支持类型层次或语义标记。
## 暴露的功能
桥接暴露了 VS 代码的公共语言提供者命令表面。它不会暴露私有语言服务器内部或 VS 代码不通过其扩展 API 公布的任意语言服务器协议请求。
只读工具包括:
- 引用、定义、声明、实现和类型定义
- 悬停、诊断、文档高亮、文档符号和工作区符号
- 调用者、被调用者、引用和定义的任务型命名符号工具
- 调用层次和类型层次
- 文档链接、语义标记、折叠范围、颜色、内联值、代码镜头和插入提示
- 补全、签名帮助、代码操作、准备重命名和重命名预览
具有写入能力的工具包括:
- 应用代码操作
- 组织导入
- 修复所有
- 格式化文档、格式化范围和格式化输入
- 重命名符号
有关完整的工具目录,请参见 [docs/TOOLS.md](docs/TOOLS.md)。
## 安全模型
桥接默认是本地优先且保守的:
- 默认绑定到 `127.0.0.1`。
- 使用存储在 VS 代码 SecretStorage 中的随机持有者令牌。
- 将连接信息写入 `~/.vscode-lsp-mcp-bridge/connection.json`。
- 拒绝在不受信任的工作区启动。
- 默认暴露只读工具。
- 保持写入工具禁用,除非启用 `vscodeLspMcpBridge.enableWriteTools`。
- 在应用编辑或执行可写入命令之前,需要 VS 代码模态批准。
- 不暴露 shell 执行。
有关详细信息,请参见 [docs/SECURITY.md](docs/SECURITY.md)。
## 设置
| 设置 | 默认值 | 描述 |
| --- | --- | --- |
| `vscodeLspMcpBridge.autoStart` | `true` | 在 VS 代码启动完成后启动本地桥接服务器。 |
| `vscodeLspMcpBridge.host` | `127.0.0.1` | 本地桥接服务器的主机。保持在本地主机上。 |
| `vscodeLspMcpBridge.port` | `36521` | 外部 MCP 客户端的稳定本地网关端口。VS 代码/GitHub Copilot 自动注册使用当前窗口端点。 |
| `vscodeLspMcpBridge.connectionFile` | 空 | 连接文件的可选路径。空值使用 `~/.vscode-lsp-mcp-bridge/connection.json`。 |
| `vscodeLspMcpBridge.enableWriteTools` | `false` | 启用可以应用工作区编辑的 MCP 工具。每次写入仍需要 VS 代码批准。 |
## 开发
安装依赖项:
```powershell
npm install
```
编译:
```powershell
npm run compile
```
运行扩展:
1. 在 VS 代码中打开此文件夹。
2. 按 `F5`。
3. 在扩展开发主机中,打开一个具有已安装语言扩展的真实项目。
4. 运行 `LSP MCP 桥接:显示状态`。
打包本地 VSIX:
```powershell
npm run package
```
有关 Marketplace 发布步骤,请参见 [docs/PUBLISHING.md](docs/PUBLISHING.md)。