关于 MCP Language Server
mcp-language-server 是一个 MCP 服务,把语言服务器(LSP)以语义工具的形式提供给 LLM 使用。它支持 gopls、rust-analyzer、pyright、typescript-language-server 和 clangd 等,帮助客户端更方便地浏览代码库。
主要功能
- 01获取符号的完整源代码定义
- 02查找符号的所有引用位置
- 03获取文件的诊断信息
- 04悬停查看文档和类型提示
- 05跨项目重命名符号
- 06基于行号的多处文本编辑
适用场景
- 01让 LLM 在大型代码库中跳转到函数或类型定义
- 02在重命名符号前检查所有引用位置
- 03读取文件的编译错误和警告以辅助修复
MCP 相关
该项目是 MCP 服务,启动并封装语言服务器,向 MCP 客户端暴露 definition、references、rename_symbol 等语义工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP 语言服务器
这是一个 MCP 服务,可运行并向大模型提供 语言服务器。它不是用于 MCP 的语言服务器,不管那会是什么样。
演示
mcp-language-server 通过提供定义查找、引用查找、重命名和诊断等语义工具,帮助启用了 MCP 的客户端更轻松地浏览代码库。

设置
- 安装 Go:按照 https://golang.org/doc/install 中的说明操作
- 安装或更新此服务:
go install github.com/isaacphi/mcp-language-server@latest - 安装语言服务器:参阅下面的指南
- 配置 MCP 客户端:参阅下面的指南
Go(gopls)
安装 gopls:go install golang.org/x/tools/gopls@latest
配置 MCP 客户端:不同客户端的配置方式各不相同,但大同小异。对于 Claude Desktop,将以下内容添加到 ~/Library/Application\ Support/Claude/claude_desktop_config.json
{
"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"
}
}
}
}
注意:并非所有客户端都需要这些环境变量。对于 Claude Desktop,你需要根据自己的机器和用户名更新上述环境变量:
PATH需要包含go和gopls的路径。运行echo $(which go):$(which gopls)获取路径GOPATH、GOCACHE和GOMODCACHE在你的机器上可能有所不同。这里列出的是默认值。
Rust(rust-analyzer)
安装 rust-analyzer:rustup component add rust-analyzer
配置 MCP 客户端:不同客户端的配置方式各不相同,但大同小异。对于 Claude Desktop,将以下内容添加到 ~/Library/Application\ Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"rust-analyzer"
]
}
}
}
Python(pyright)
安装 pyright:npm install -g pyright
配置 MCP 客户端:不同客户端的配置方式各不相同,但大同小异。对于 Claude Desktop,将以下内容添加到 ~/Library/Application\ Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"pyright-langserver",
"--",
"--stdio"
]
}
}
}
TypeScript(typescript-language-server)
安装 typescript-language-server:npm install -g typescript typescript-language-server
配置 MCP 客户端:不同客户端的配置会有所不同,但大同小异。对于 Claude Desktop,将以下内容添加到 ~/Library/Application\ Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"typescript-language-server",
"--",
"--stdio"
]
}
}
}
C/C++(clangd)
安装 clangd:从官方 LLVM 发布页面下载预构建二进制文件,或使用系统的包管理器安装(例如,apt install clangd、brew install clangd)。
配置 MCP 客户端:不同客户端的配置会有所不同,但大同小异。对于 Claude Desktop,将以下内容添加到 ~/Library/Application\\ Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"/path/to/your/clangd_binary",
"--",
"--compile-commands-dir=/path/to/yourproject/build_or_compile_commands_dir"
]
}
}
}
<p><strong>注意</strong>:</p>
<ul>
<li>将 <code>/path/to/your/clangd_binary</code> 替换为 clangd 可执行文件的实际路径。</li>
<li><code>--compile-commands-dir</code> 应指向包含 <code>compile_commands.json</code> 文件的目录(例如,<code>./build</code>、<code>./cmake-build-debug</code>)。</li>
<li>请确保为项目生成了 <code>compile_commands.json</code>,以便 clangd 有效运行。</li>
</ul>
其他
我只使用上面列出的服务测试过此仓库,但它应该兼容更多服务。注意:
- 语言服务必须通过 stdio 通信。
--之后的任何参数都会作为参数传递给语言服务。- 任何环境变量都会传递给语言服务。
工具
definition:从代码库中获取任意符号(函数、类型、常量等)的完整源代码定义。references:查找代码库中某个符号的所有用法和引用。diagnostics:提供特定文件的诊断信息,包括警告和错误。hover:显示给定位置的文档、类型提示或其他悬停信息。rename_symbol:在整个项目中重命名符号。edit_file:根据行号对文件进行多处文本编辑。与基于搜索和替换的编辑工具相比,它提供了一种更可靠且更节省上下文的文件编辑方式。
关于
此代码库使用了来自 gopls 的修改版代码来处理 LSP 通信。详情请参阅 ATTRIBUTION。此处所有内容均采用宽松的 BSD 风格许可证。
MCP 通信使用了 mcp-go。感谢你们的服务。
这是测试版软件。如果你遇到任何问题或有任何建议,请创建一个 issue 告诉我。
贡献
请尽量让 PR 保持小巧;对于任何较大的改动,请先创建 Issue。AI 生成的内容也可以,只要经过测试、通过检查,而且看起来不太离谱。
设置
克隆仓库:
git clone https://github.com/isaacphi/mcp-language-server.git
cd mcp-language-server
仓库中附带了一个 justfile,方便使用:
just -l
Available recipes:
build # Build
check # Run code audit checks
fmt # Format code
generate # Generate LSP types and methods
help # Help
install # Install locally
snapshot # Update snapshot tests
test # Run tests
配置 Claude Desktop(或类似应用)以使用本地二进制文件:
{
"mcpServers": {
"language-server": {
"command": "/full/path/to/your/clone/mcp-language-server/mcp-language-server",
"args": [
"--workspace",
"/path/to/workspace",
"--lsp",
"language-server-executable"
],
"env": {
"LOG_LEVEL": "DEBUG"
}
}
}
}
进行更改后重新构建。
日志记录
将 LOG_LEVEL 环境变量设为 DEBUG,即可在 stderr 中启用详细日志记录,其中包括与语言服务器之间的消息以及语言服务器的日志。
LSP 交互
internal/lsp/methods.go包含用于调用已连接语言服务器的生成代码。internal/protocol/tsprotocol.go包含 LSP 类型的生成代码。这部分代码借鉴自gopls的源代码。感谢你们的服务。- LSP 允许语言服务器针对同一方法返回不同类型。Go 不支持这种做法,因此
internal/protocol/interfaces.go中有一些不太优雅的变通方案。
本地开发和快照测试
这里有一套快照测试,可以让你更轻松地尝试对工具所做的更改。这些测试会在模拟工作区中运行真实的语言服务器,并捕获输出和日志。
运行这些测试需要在本地安装语言服务器。测试涵盖 Go、Rust、Python 和 TypeScript。
integrationtests/
├── tests/ # Tests are in this folder
├── snapshots/ # Snapshots of tool outputs
├── test-output/ # Gitignored folder showing the final state of each workspace and logs after each test run
└── workspaces/ # Mock workspaces that the tools run on
要更新快照,请运行 UPDATE_SNAPSHOTS=true go test ./integrationtests/...
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。