多语言服务器管理工具

一个管理多种编程语言服务器的工具,通过统一的接口提供代码定义、引用查找、诊断信息等功能,适用于复杂的代码库理解和操作。

  • by t3ta
  • Go
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 t3ta/mcp-language-server

使用说明

MCP语言服务器

注: 此存储库是 isaacphi/mcp语言服务器它经历了重大的架构更改(通过配置文件在单个进程中支持多个语言服务器),并且不打算合并回原始存储库。

一种模型上下文协议(MCP)服务器,用于管理单个工作区内不同编程语言的多个语言服务器。它提供了基于文件上下文或显式语言规范与适当的语言服务器通信的工具。

动机

语言服务器擅长LLM经常遇到的任务,例如精确理解类型、导航复杂的代码库以及在大型项目中提供准确的符号引用。该项目旨在通过统一的MCP接口将多语言服务器的功能带给LLM,从而实现更复杂的代码理解和操作能力。

状态

⚠️ 测试前质量⚠️

我已经用以下语言服务器测试了此服务器

  • 版权(Python)
  • tsserver(TypeScript)
  • gopls(围棋)
  • 锈蚀分析仪(rust)

但它应该兼容更多。

工具

此服务器提供以下工具,根据文件扩展名(用于基于文件的工具)或显式 language 争论。

  • read_definition:检索符号的完整源代码定义。 需要a language 论点 (例如。, "typescript", "go")指定要查询的语言服务器。
  • find_references:查找符号的所有用法和引用。 需要a language 论点 (例如。, "typescript", "go")指定要查询的语言服务器。
  • get_diagnostics:提供特定文件的诊断信息(语言由文件扩展名决定)。
  • get_codelens:检索特定文件(由文件扩展名确定的语言)的代码镜头提示。
  • execute_codelens:为特定文件(由文件扩展名确定的语言)运行代码镜头操作。
  • apply_text_edit:允许以编程方式对文件进行多次文本编辑(语言由文件扩展名决定)。支持简单的插入/删除/替换,基于正则表达式的替换(使用 isRegex, regexPattern, regexReplace),以及可选的支架平衡保护(使用 preserveBrackets, bracketTypes)防止编辑破坏配对,如 (), {}, [].

在幕后,此MCP服务器可以对 workspace/applyEdit 来自语言服务器的请求,启用重构、添加导入和代码格式化等功能。

大多数工具支持以下选项 showLineNumbers。有关详细用法,请参阅工具模式。

关于

此代码库使用来自的编辑代码 gopls 以处理LSP通信。详细信息请参见属性。

麦高朗 用于MCP通信。

先决条件

  1. 安装Go: 请遵循以下说明 https://golang.org/doc/install
  2. 安装语言服务器: 为项目中要使用的语言安装语言服务器。示例:
    • Python(版权): npm install -g pyright
  • TypeScript(tsserver): npm install -g typescript typescript-language-server
  • Go(gopls): go install golang.org/x/tools/gopls@latest
  • 锈蚀(锈蚀分析仪): rustup component add rust-analyzer
  • 或使用任何语言服务器

设置

  1. 构建服务器: 克隆存储库并构建可执行文件:

    git clone https://github.com/isaacphi/mcp-language-server.git
    cd mcp-language-server
    go build -o mcp-language-server .
    
  2. 创建配置文件(config.json): 创建JSON配置文件(例如。, config.json 在项目根目录或其他位置)定义要管理的语言服务器。

    config.json 例子:

    {
      "workspaceDir": "/Users/you/dev/yourcodebase", // Absolute path to your project root
      "languageServers": [
        {
          "language": "typescript", // Unique name for the language
          "command": "typescript-language-server", // Command to run the LSP server
          "args": ["--stdio"], // Arguments for the LSP command
          "extensions": [".ts", ".tsx", ".js", ".jsx"] // File extensions for this language
        },
        {
          "language": "go",
          "command": "/path/to/your/gopls", // Absolute path or command name for gopls
          "args": [],
          "extensions": [".go"]
        },
        {
          "language": "python",
          "command": "pyright-langserver",
          "args": ["--stdio"],
          "extensions": [".py"]
        }
        // Add entries for other languages as needed
      ]
    }
    
    • 替换 /Users/you/dev/yourcodebase 与你的项目的绝对路径。
    • 替换 /path/to/your/gopls 为每个语言服务器提供正确的命令或绝对路径。
  3. 配置MCP客户端: 将以下配置添加到您的Claude Desktop设置(或类似的启用MCP的客户端)中,必要时调整路径:

    {
      "mcpServers": {
        "mcp-language-server": { // You can choose any name here
          "command": "/full/path/to/your/clone/mcp-language-server/mcp-language-server", // Absolute path to the built executable
          "args": [
            "--config", "/full/path/to/your/config.json" // Absolute path to your config.json
          ],
          "cwd": "/full/path/to/your/clone/mcp-language-server", // Optional: Set working directory to project root
          "env": {
            // Add any necessary environment variables for LSP servers (e.g., PATH)
            // "PATH": "...",
            "DEBUG": "1" // Optional: Enable debug logging
          }
        }
        // Add other MCP servers here if needed
      }
    }
    
    • 确保 command 路径指向 mcp-language-server 您构建的可执行文件。
    • 确保 --config 论点指向 config.json 您创建的文件。
    • 集 cwd 如果需要(通常是包含可执行文件的目录)。
    • 添加所需的环境变量(如 PATH 如果使用垫片,如 asdf)到 env 对象。

发展

克隆存储库:

git clone https://github.com/isaacphi/mcp-language-server.git
forcd mcp-language-server

安装开发依赖项:

go mod download

构建:

go build

配置您的Claude Desktop(或类似设备)以使用本地二进制文件,类似于安装部分,确保 command 指向本地构建的可执行文件和 --config 论点指向你的发展 config.json:

{
  "mcpServers": {
    "mcp-language-dev": { // Example name for development server
      "command": "/full/path/to/your/clone/mcp-language-server/mcp-language-server", // Path to your built binary
      "args": [
        "--config", "/full/path/to/your/clone/mcp-language-server/config.dev.json" // Path to your development config file
      ],
      "cwd": "/full/path/to/your/clone/mcp-language-server", // Working directory
      "env": {
        "DEBUG": "1" // Enable debug logging for development
      }
    }
  }
}

记得创建一个 config.dev.json (或类似)用于您的开发环境。

重建(go build -o mcp-language-server .)在进行代码更改后。

反馈

包含

env: {
  "DEBUG": 1
}

获取详细的LSP和应用程序日志。在打开问题时,请尽可能多地提供信息。

以下功能在我的雷达上:

  • [x] 阅读定义
  • [x] 获取推荐信
  • [x] 应用编辑
  • [x] 获取诊断信息
  • [x] 编码镜头
  • []悬停信息
  • []代码操作
  • []更好地处理上下文和取消
  • []添加LSP服务器配置选项和常用语言的预设
  • []为工具(分页等)创建一个更加一致和可扩展的API
  • []在更高的抽象级别创建工具,在阅读定义或引用时结合诊断、代码镜头、悬停和代码操作。