返回市场
虚拟机-MCP

虚拟机-MCP

作者:thomasgazzoni28 星标更新:2025-05-16

项目介绍

VSC-MCP

该项目提供了工具,将语言服务器协议(LSP)功能作为**MCP(模型上下文协议)**工具公开。它使AI客户端能够通过标准化的MCP工具调用来程序化地分析和编辑代码。

该项目最初是一个专注于TypeScript编码的简单项目,然后演变为一个支持VS Code所支持的所有语言的全功能MCP服务器。

有关最新更改和迁移到无头VC Code的详细信息,请参阅这里

Docker模式与VS Code LSP集成

VSC-MCP可以运行在两种模式下:

  • 独立模式:启动本地的typescript-language-server,只为TypeScript/JavaScript提供LSP支持。
  • Docker模式:利用Gitpod提供的无头VS Code版本,即OpenVSCode Server,在Docker中运行以提供更丰富的LSP支持,支持任何由VC Code支持的语言,如Rust、Go、C#、Python等。

为什么选择Docker模式?

工作原理

  1. OpenVSCode Server 在Docker中运行,暴露端口3000(IDE UI)和5007(LSP桥接)。
  2. 预安装所需的VS Code扩展(例如,rust-analyzerpyrighteslint 和 VSC-MCP 扩展)。
  3. VSC-MCP 扩展 在MCP和VS Code后端之间创建了一个WebSocket通道。
  4. 文件I/O工具使用直接访问;LSP工具使用VS Code内部的语言服务器。

安装

先决条件

  • Docker(用于运行VS Code服务器)
  • Bun(用于启动MCP)

设置

  1. 克隆仓库 并进入该目录。
  2. 安装依赖项
    bun install
    
  3. 构建并启动OpenVSCode Server(将您的项目挂载到容器中)
    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 Code LSP模式。 MCP将把LSP请求转发给VS Code(端口5007),而不是启动本地语言服务器。
ALLOWED_DIRECTORIES将直接文件操作限制在指定的目录中。
LOG_DIRMCP写入调试日志的位置。

注意:默认情况下,USE_VSCODE_L_false(独立模式)。将其设置为true以使用Docker/VS Code LSP集成。

建议的AI客户端配置

Claude Desktop

目前最佳的工作流程是使用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",
        1. "ALLOWED_DIRECTORIES": "/path/to/your/project"
      }
    }
  }
}

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

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

安全特性

Docker工作区限制

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

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

VSC-MCP工具只能访问工作区目录中的文件。

路径限制

VSC-MCP工具包含一个安全特性,用于限制操作系统文件操作(读取和写入磁盘上的文件)到特定目录:

  • ALLOWED_DIRECTORIES:一个环境变量,指定允许进行文件操作的目录列表,用逗号分隔。

    示例:

    ALLOWED_DIRECTORIES=/home/user/projects,/tmp/workspace
    
  • 如果未设置此环境变量,则操作默认仅限于当前工作目录。

  • 所有文件操作(读取、写入、编辑)都会检查目标路径是否在允许的目录内。

  • 尝试访问允许目录之外的文件将导致“访问被拒绝”的错误。

此功能有助于防止未经授权访问系统中的敏感文件和目录。

可用工具

目前,以下工具可用:

  • edit_symbol:通过名称和类型在给定文件中使用LSP编辑符号(函数、类、方法等)。

    • 支持各种符号类型:函数、方法、类、接口、变量、常量、属性、字段
    • 使用LSP的workspace/symbol和textDocument/documentSymbol请求来查找符号
    • 直接对文件应用编辑
  • read_symbol:通过名称和类型在给定文件中使用LSP读取符号(函数、类、方法等)。

    • 支持与editSymbol相同的符号类型
    • 使用LSP定位符号并提取其内容
    • 返回符号内容及其位置信息
  • read_file:读取文件的内容。

    • 根据文件扩展名返回适当MIME类型的文件内容
    • 处理各种文件格式,包括代码、文本和配置文件
    • 对常见问题(文件未找到、目录访问等)提供详细的错误消息
  • write_file:使用提供的内容创建新文件或覆盖现有文件。

    • 如果不存在,则创建父目录
    • 支持任何文件类型
    • 返回关于文件操作的信息(已创建/覆盖,文件大小)
  • search_replace_file:在文件中搜索内容并用新内容替换它。

    • 搜索时忽略空白差异(空格、制表符、换行符)
    • 支持灵活匹配内容模式
    • 返回执行的替换次数
  • get_errors:使用LSP的textDocument/diagnostic API获取特定文件的代码错误和问题。

    • 提供详细的诊断信息,包括错误消息、严重性和位置
    • 使用VS Code扩展的诊断API验证代码
    • 返回关于代码问题的结构化信息
  • find_references:通过名称和类型在给定文件中使用LSP查找符号(函数、类等)的所有引用。

    • 支持各种符号类型:函数、方法、类、接口、变量、常量、属性、字段
    • 使用LSP的textDocument/reference API查找符号的所有引用
    • 返回带有文件路径和位置的引用列表
    • 有助于代码分析、重构和理解代码使用情况