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_symbol 和 edit_file 是破坏性操作,建议先看 definition / references 确认影响范围。
典型适用场景
- AI 代码审查:让 Claude 在代码库里真正"看见"符号定义和所有引用,而不只是靠模型猜测
- 大型代码库导航:在几千行代码中快速定位函数定义、查找所有调用点
- 自动重构辅助:AI 用
rename_symbol做安全重命名,edit_file做精确批量修改 - 多语言统一 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 就能真正在代码库里跳转、搜索和诊断。