isaacphi/mcp-language-server · 上手攻略

  • 仓库:isaacphi/mcp-language-server
  • 链接:https://github.com/isaacphi/mcp-language-server
  • 分类:skill
  • 作者:Tom
  • 更新:2026-08-22

这是什么

mcp-language-server 是一个桥接层:它让 MCP(Model Context Protocol)客户端能够调用标准 Language Server Protocol(LSP)的语义分析能力——包括跳转定义、查找引用、符号重命名、悬停信息和代码诊断。

形象地说:你在用 Claude Desktop(或其他 MCP 客户端)写代码,mcp-language-server 让 AI 能够在代码库里"看见"真实的定义位置、找到所有引用、自动诊断错误,而不只是靠模型自己猜测。LSP 语义工具本身由 gopls / rust-analyzer / pyright 等专业语言服务器提供,mcp-language-server 只负责把它们变成 MCP 工具暴露给 AI。

⚠️ 这是 Beta 软件,功能稳定但仍处于活跃开发中。

解决什么问题

MCP 协议设计得很好,但它没有定义"代码理解"类工具。主流 MCP 客户端(如 Claude Desktop)要理解代码,只能靠 AI 模型的内部知识——无法真正做到:

  • 跳转到真实定义位置:AI 只能猜,不能真的调 LSP 的 textDocument/definition
  • 查找所有引用:无法知道一个函数在哪些文件被调用
  • 跨文件重命名:AI 自己改名字会遗漏或改错
  • 实时诊断错误:不知道当前文件的 lint/类型错误

mcp-language-server 把 gopls / rust-analyzer / pyright 等成熟 LSP 工具桥接到 MCP 世界,AI 调用这些工具就像调用普通 MCP 工具一样,无需改变客户端配置。

快速安装

前提条件

  • Go ≥ 1.18(用于安装和运行)
  • 对应语言的 LSP 服务器(见下表)
语言 LSP 服务器 安装命令
Go gopls go install golang.org/x/tools/gopls@latest
Rust rust-analyzer rustup component add rust-analyzer
Python pyright npm install -g pyright
TypeScript typescript-language-server npm install -g typescript typescript-language-server
C/C++ clangd apt install clangd 或下载 LLVM releases

安装 mcp-language-server

go install github.com/isaacphi/mcp-language-server@latest

⚠️ @latest 版本未锁定;如需固定版本请在安装后记录 commit hash。

核心用法

基本命令结构

mcp-language-server --workspace /path/to/your/project --lsp <lsp-server-name>

所有 -- 后的参数会被透传给底层 LSP 服务器。

配置 Claude Desktop(macOS 示例)

{
  "mcpServers": {
    "language-server": {
      "command": "mcp-language-server",
      "args": ["--workspace", "/Users/you/dev/yourproject/", "--lsp", "gopls"],
      "env": {
        "PATH": "/opt/homebrew/bin:/Users/you/go/bin",
        "GOPATH": "/Users/you/go",
        "GOCACHE": "/Users/you/Library/Caches/go-build",
        "GOMODCACHE": "/Users/you/go/pkg/mod"
      }
    }
  }
}

⚠️ 环境变量(PATH / GOPATH / GOCACHE / GOMODCACHE)必须根据本地实际路径填写,Claude Desktop 不会继承 shell 环境变量。

各语言配置示例

Rust(rust-analyzer)

{
  "mcpServers": {
    "language-server": {
      "command": "mcp-language-server",
      "args": ["--workspace", "/path/to/rust/project/", "--lsp", "rust-analyzer"]
    }
  }
}

Python(pyright)

{
  "mcpServers": {
    "language-server": {
      "command": "mcp-language-server",
      "args": [
        "--workspace", "/path/to/python/project/",
        "--lsp", "pyright-langserver",
        "--", "--stdio"
      ]
    }
  }
}

TypeScript(typescript-language-server)

{
  "mcpServers": {
    "language-server": {
      "command": "mcp-language-server",
      "args": [
        "--workspace", "/path/to/ts/project/",
        "--lsp", "typescript-language-server",
        "--", "--stdio"
      ]
    }
  }
}

C/C++(clangd)

{
  "mcpServers": {
    "language-server": {
      "command": "mcp-language-server",
      "args": [
        "--workspace", "/path/to/c/project/",
        "--lsp", "/path/to/clangd",
        "--", "--compile-commands-dir=/path/to/project/build"
      ]
    }
  }
}

⚠️ clangd 需要项目有 compile_commands.json 文件(CMake 项目可通过 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 生成)。

本地开发调试

git clone https://github.com/isaacphi/mcp-language-server.git
cd mcp-language-server
just -l          # 查看所有可用命令
just install     # 本地安装
just test        # 运行测试
just check       # 代码审计检查

MCP 工具一览

mcp-language-server 暴露以下 MCP 工具:

工具 功能
definition 获取符号(函数/类型/常量等)的完整定义源码
references 查找代码库中所有引用该符号的位置
diagnostics 获取指定文件的诊断信息(警告/错误)
hover 显示指定位置的文档、类型提示等悬停信息
rename_symbol 在整个项目中重命名符号
edit_file 基于行号对文件进行精确文本编辑

⚠️ rename_symboledit_file 是破坏性操作,建议先看 definition / references 确认影响范围。

典型适用场景

  1. AI 代码审查:让 Claude 在代码库里真正"看见"符号定义和所有引用,而不只是靠模型猜测
  2. 大型代码库导航:在几千行代码中快速定位函数定义、查找所有调用点
  3. 自动重构辅助:AI 用 rename_symbol 做安全重命名,edit_file 做精确批量修改
  4. 多语言统一 MCP 接口:不用为每种语言单独配置 MCP Server,统一通过 mcp-language-server 代理

坑与注意

⚠️ 环境变量隔离:Claude Desktop 等 MCP 客户端不会继承 shell 的环境变量。PATH / GOPATH / GOCACHE 必须显式写在 JSON 配置中。

⚠️ LSP 服务器必须提前安装:mcp-language-server 只是桥接器,gopls / rust-analyzer / pyright 需要单独安装。

⚠️ Beta 阶段:作者标注"beta software",API 和行为可能在 minor version 变化时改变。

⚠️ 仅支持 stdio 通信的 LSP:LSP 服务器必须支持 stdio 模式,不支持 TCP/JSON-RPC 其他传输方式。

⚠️ 非语言服务器的 MCP:不要把它理解成"给 MCP 写一个语言服务器"——它是"让 MCP 客户端调用现成语言服务器"的桥接器。

⚠️ clangd 编译数据库:C/C++ 项目必须有 compile_commands.json,否则 clangd 无法提供准确的诊断和跳转。

与同类对比

维度 mcp-language-server 直接用 LSP 客户端 其他 MCP Code Tools
MCP 生态兼容 ✅ 原生 ❌ 需要额外插件
多语言统一接口 ✅(支持 5+ 语言) ❌ 每语言独立
实时诊断
引用/定义跳转
配置复杂度 中等(需装 LSP) 低(IDE 内置)
支持的语言 取决于本地 LSP 取决于客户端 取决于工具

如果你已经在用 Claude Desktop 等 MCP 客户端,想让 AI 真正理解代码库而不是靠猜测,mcp-language-server 是目前最直接的无代码侵入方案。

一句话结论

MCP 客户端的代码理解短板,mcp-language-server 用一个轻量桥接器补上了——不用改客户端,只要装好对应语言的 LSP 服务器,AI 就能真正在代码库里跳转、搜索和诊断。