语言服务器协议工具

VSC-MCP提供将语言服务器协议(LSP)功能作为MCP工具的工具,使AI客户端能够通过标准化的MCP工具调用编程方式分析和编辑代码。

  • by thomasgazzoni
  • TypeScript
  • 本地部署
  • 33 星标
  • 更新于
在 GitHub 查看 thomasgazzoni/vsc-mcp

使用说明

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的情况下编写和分析代码。

运作原理

  1. OpenVSCode服务器 在Docker内部运行,暴露端口 3000 (IDE UI)和 5007 (LSP桥)。
  2. 所需的VS代码扩展已预先安装(例如。, 锈蚀分析仪, 火葬场, 埃斯林特,以及VSC-MCP扩展)。
  3. 这 VSC-MCP扩展 在MCP和VS Code后端之间创建WebSocket通道。
  4. 文件I/O工具使用直接访问;LSP工具使用VS Code的内部语言服务器。

安装

先决条件

设置

  1. 克隆存储库 和 cd 进入它。
  2. 安装依赖项
    bun install
    
  3. 构建并启动OpenVSCode服务器 (将项目装载到容器中)
    PROJECT_PATH=/path/to/your/project docker-compose up
    
  4. 在您的AI客户端中注册MCP (示例 settings.json)
    {
      "mcpServers": {
        "vsc-mcp": {
          "command": "bun",
          "args": ["<vsc_mcp_cloned_dir>/src/index.ts"],
          "env": {
            "USE_VSCODE_LSP": "true",
            "LOG_DIR": "<vsc_mcp_cloned_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": [
        "<vsc_mcp_cloned_dir>/src/index.ts"
      ],
      "env": {
        "USE_VSCODE_LSP": "true",
        "LOG_DIR": "<vsc_mcp_cloned_dir>/logs",
        "ALLOWED_DIRECTORIES": "/path/to/your/project"
      }
    }
  }
}

我们建议添加 repomix mcp服务器依赖性,要了解原因,可以阅读 这篇博客文章.

替换 <vsc_mcp_cloned_dir> 使用vsc-mcp克隆目录的实际路径。

安全功能

Docker工作区限制

当我们启动docker时,我们需要指定工作区目录。

PROJECT_PATH=/path/to/your/project docker-compose up

VSC-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查找符号的所有引用
    • 返回包含文件路径和位置的引用列表
    • 有助于代码分析、重构和理解代码使用