MCP语言服务器添加福利群:解决AI开发者的「MCP实战痛点」这是一个运行并向大型语言模型 (LLM) 提供语言服务器 的MCP 服务器。并非用于 MCP 的语言服务器,无论那是什么。
mcp-language-server 通过提供语义工具(如获取定义、引用、重命名和诊断)来帮助启用 MCP 的客户端更轻松地浏览代码库。

go install github.com/isaacphi/mcp-language-server@latest安装 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-analyzer:rustup component add rust-analyzer
配置您的 MCP 客户端:每个客户端的配置会有所不同但相似。对于 Claude Desktop,将以下内容添加到 ~/Library/Application\ Support/Claude/claude_destop_config.json
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"rust-analyzer"
]
}
}
}
安装 pyright:npm install -g pyright
配置您的 MCP 客户端:每个客户端的配置会有所不同但相似。对于 Claude Desktop,将以下内容添加到 ~/Library/Application\ Support/Claude/claude_destop_config.json
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"pyright-langserver",
"--",
"--stdio"
]
}
}
}
安装 typescript-language-server:npm install -g typescript typescript-language-server
配置您的 MCP 客户端:每个客户端的配置会有所不同但相似。对于 Claude Desktop,将以下内容添加到 ~/Library/Application\ Support/Claude/claude_destop_config.json
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"typescript-language-server",
"--",
"--stdio"
]
}
}
}
安装 clangd:从 官方 LLVM 发布页面 下载预编译的二进制文件,或通过系统的包管理器安装(例如,apt install clangd,brew install clangd)。
配置您的 MCP 客户端:每个客户端的配置会有所不同但相似。对于 Claude Desktop,将以下内容添加到 ~/Library/Application\\ Support/Claude/claude_destop_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>
我仅使用上述服务器测试了此仓库,但它应该与更多服务器兼容。请注意:
-- 之后的任何参数都将作为参数发送给语言服务器。definition:从您的代码库中检索任何符号(函数、类型、常量等)的完整源代码定义。references:定位代码库中符号的所有使用和引用。diagnostics:为特定文件提供诊断信息,包括警告和错误。hover:显示给定位置的文档、类型提示或其他悬停信息。rename_symbol:在整个项目中重命名符号。edit_file:允许根据行号对文件进行多次文本编辑。与基于搜索和替换的编辑工具相比,提供了一种更可靠且上下文节省的文件编辑方式。此代码库使用了来自 gopls 的编辑代码来处理 LSP 通信。详见 ATTRIBUTION。此处所有内容均受宽松的 BSD 风格许可证保护。
mcp-go 用于 MCP 通信。感谢您的服务。
这是测试版软件。如果您遇到任何问题或有任何建议,请通过创建问题告知我。
请保持 PR 较小,并为任何实质性内容首先打开问题。只要经过测试、通过检查且不太糟糕,AI 生成的代码是可以接受的。
克隆仓库:
git clone https://github.com/isaacphi/mcp-language-server.git
cd mcp-language-server

为了方便起见,包含了一个 justfile:
just -l
可用命令:
build # 构建
check # 运行代码审计检查
fmt # 格式化代码
generate # 生成 LSP 类型和方法
help # 帮助
install # 本地安装
snapshot # 更新快照测试
test # 运行测试

配置您的 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 可以为所有组件启用详细日志记录,包括与语言服务器之间的消息以及语言服务器的日志。
internal/lsp/methods.go 包含生成的代码,用于调用连接的语言服务器。internal/protocol/tsprotocol.go 包含生成的 LSP 类型代码。我从 gopls 的源代码中借用了这些代码。感谢您的服务。internal/protocol/interfaces.go 中有一些丑陋的变通方法。有一个快照测试套件,使得尝试工具更改变得更加容易。这些测试在实际语言服务器上运行,并在模拟工作区上捕获输出和日志。
您需要在本地安装语言服务器才能运行它们。有针对 go、rust、python 和 typescript 的测试。
integrationtests/ ├── tests/ # 测试在此文件夹中 ├── snapshots/ # 工具输出的快照 ├── test-output/ # Gitignored 文件夹,显示每个工作区的最终状态和每次测试运行后的日志 └── workspaces/ # 工具运行的模拟工作区
要更新快照,请运行 UPDATE_SNAPSHOTS=true go test ./integrationtests/...