mcpField
M
MCP Language Server

MCP Language Server

本地服务
github.com/isaacphi开发工具1.6k73 周前更新

关于 MCP Language Server

mcp-language-server 是一个 MCP 服务,把语言服务器(LSP)以语义工具的形式提供给 LLM 使用。它支持 gopls、rust-analyzer、pyright、typescript-language-server 和 clangd 等,帮助客户端更方便地浏览代码库。

主要功能

  1. 01获取符号的完整源代码定义
  2. 02查找符号的所有引用位置
  3. 03获取文件的诊断信息
  4. 04悬停查看文档和类型提示
  5. 05跨项目重命名符号
  6. 06基于行号的多处文本编辑

适用场景

  1. 01让 LLM 在大型代码库中跳转到函数或类型定义
  2. 02在重命名符号前检查所有引用位置
  3. 03读取文件的编译错误和警告以辅助修复

MCP 相关

该项目是 MCP 服务,启动并封装语言服务器,向 MCP 客户端暴露 definition、references、rename_symbol 等语义工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCP 语言服务器

Go Tests Go Report Card GoDoc Go Version

这是一个 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_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/...

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。