首页
学习
活动
专区
圈层
工具
发布
MCP广场 >详情页
MCP语言服务器2026-10-23235分享添加福利群:解决AI开发者的「MCP实战痛点」
MCP语言服务器为支持MCP的客户端提供了访问语义工具的能力,这些工具包括获取定义、引用、重命名和诊断等功能。
By isaacphi
2026-10-23235
github
详情内容

MCP 语言服务器

Go 测试 Go 报告卡 GoDoc Go 版本

这是一个运行并向大型语言模型 (LLM) 提供语言服务器 的MCP 服务器。并非用于 MCP 的语言服务器,无论那是什么。

演示

mcp-language-server 通过提供语义工具(如获取定义、引用、重命名和诊断)来帮助启用 MCP 的客户端更轻松地浏览代码库。

演示

设置

  1. 安装 Go:按照 https://golang.org/doc/install 的说明进行安装。
  2. 安装或更新此服务器:go install github.com/isaacphi/mcp-language-server@latest
  3. 安装语言服务器:按照以下其中一个指南进行安装
  4. 配置您的 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_destop_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_destop_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_destop_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_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>
其他

我仅使用上述服务器测试了此仓库,但它应该与更多服务器兼容。请注意:

  • 语言服务器必须通过 stdio 进行通信。
  • 在 -- 之后的任何参数都将作为参数发送给语言服务器。
  • 任何环境变量都会传递给语言服务器。

工具

  • 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 可以为所有组件启用详细日志记录,包括与语言服务器之间的消息以及语言服务器的日志。

LSP 交互

  • internal/lsp/methods.go 包含生成的代码,用于调用连接的语言服务器。
  • internal/protocol/tsprotocol.go 包含生成的 LSP 类型代码。我从 gopls 的源代码中借用了这些代码。感谢您的服务。
  • LSP 允许语言服务器为相同的方法返回不同的类型。Go 不喜欢这样,因此在 internal/protocol/interfaces.go 中有一些丑陋的变通方法。

本地开发和快照测试

有一个快照测试套件,使得尝试工具更改变得更加容易。这些测试在实际语言服务器上运行,并在模拟工作区上捕获输出和日志。

您需要在本地安装语言服务器才能运行它们。有针对 go、rust、python 和 typescript 的测试。

integrationtests/
├── tests/        # 测试在此文件夹中
├── snapshots/    # 工具输出的快照
├── test-output/  # Gitignored 文件夹,显示每个工作区的最终状态和每次测试运行后的日志
└── workspaces/   # 工具运行的模拟工作区

要更新快照,请运行 UPDATE_SNAPSHOTS=true go test ./integrationtests/...

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档