VSC-MCP
本项目提供了一系列工具,将 Language Server Protocol (LSP) 的功能作为 MCP (Model Context Protocol) 工具暴露出来。它使得 AI 代理能够通过标准化的 MCP 工具调用,以编程方式分析和编辑 TypeScript/JavaScript 代码。
功能
- 支持 单文件模式 或 项目模式(自动检测
tsconfig.json
)。
- 通过 LSP API 实现与语言无关的代码操作。
- 完全兼容 Model Context Protocol (MCP) SDK。
安装
前置条件
- Bun(用于包管理和构建)
- Node.js(用于运行服务器)
设置
- 克隆仓库
- 安装依赖:
在 Claude (macOS) 中配置
要与 Claude Desktop 一起使用,请将服务器配置添加到 Claude Desktop 的配置文件中:
- 在 MacOS 上:
~/Library/Application Support/Claude/claude_desktop_config.json
- 在 Windows 上:
%APPDATA%/Claude/claude_desktop_config.json
在配置文件的
mcp_servers
部分添加以下配置:我们需要
repomix
这个 MCP 服务器依赖。将
/path/to/your/vsc-mcp
替换为你克隆的 vsc-mcp 目录的实际路径。安全特性
路径限制
VSC-MCP 工具包含一个安全特性,用于将文件操作限制在特定目录中:
- ALLOWED_DIRECTORIES:一个环境变量,指定允许进行文件操作的目录列表,用逗号分隔。
示例:
- 如果未设置此环境变量,操作默认仅限于当前工作目录。
- 所有文件操作(读取、写入、编辑)都会检查目标路径是否在允许的目录中。
- 尝试访问允许目录之外的文件将导致“访问被拒绝”错误。
此特性有助于防止对系统敏感文件和目录的未授权访问。
工作原理
- 以
--stdio
模式启动typescript-language-server
。
- 发送 LSP 的
initialize
和didOpen
通知。
- 使用
workspace/symbol
和textDocument/documentSymbol
请求查找符号。
- 如果未找到,则回退到
textDocument/implementation
进行额外符号发现。
- 使用
applyWorkspaceEdit
工具直接对文件进行编辑。
- 将操作结果返回给调用者。
可用工具
目前,以下工具可用:
editSymbol
:通过 LSP 编辑指定文件中的符号(函数、类、方法等)。- 支持多种符号类型:函数、方法、类、接口、变量、常量、属性、字段
- 使用 LSP 的
workspace/symbol
和textDocument/documentSymbol
请求查找符号 - 直接对文件应用编辑
readSymbol
:通过 LSP 读取指定文件中的符号(函数、类、方法等)。- 支持与
editSymbol
相同的符号类型 - 使用 LSP 定位符号并提取其内容
- 返回符号内容及其位置信息
readFile
:读取文件内容。- 根据文件扩展名返回带有适当 MIME 类型的文件内容
- 处理多种文件格式,包括代码、文本和配置文件
- 提供常见问题的详细错误信息(文件未找到、目录访问等)
writeFile
:创建新文件或覆盖现有文件。- 如果父目录不存在,则自动创建
- 支持任何文件类型
- 返回文件操作信息(创建/覆盖、文件大小)
searchReplaceFile
:在文件中搜索内容并替换为新内容。- 搜索时忽略空格差异(空格、制表符、换行符)
- 支持灵活的内容模式匹配
- 返回替换次数
get_errors
:使用 LSP 的textDocument/diagnostic
API 获取指定文件的代码错误和问题。- 提供详细的诊断信息,包括错误消息、严重性和位置
- 使用 TypeScript 语言服务器验证代码
- 返回有关代码问题的结构化信息
find_references
:通过 LSP 查找指定文件中符号(函数、类等)的所有引用。- 支持多种符号类型:函数、方法、类、接口、变量、常量、属性、字段
- 使用 LSP 的
textDocument/reference
API 查找符号的所有引用 - 返回带有文件路径和位置的引用列表
- 有助于代码分析、重构和理解代码使用情况
- Author:waytomcp
- URL:https://www.waytomcp.com/article/thomasgazzoni/vsc-mcp
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!