Clangd代码导航服务器

为大型C++代码库提供基于Model Context Protocol的代码导航服务,支持定义查找、引用搜索、符号查询等功能。

  • by felipeerias
  • TypeScript
  • 本地部署
  • 50 星标
  • 更新于
在 GitHub 查看 felipeerias/clangd-mcp-server

使用说明

MCP 服务器

模型上下文协议 用于大型C++代码库上cland的服务器。

此MCP为Claude Code等编码代理提供了一系列工具,可用于回答用户的自然语言查询:

  • find_definition:跳转到符号定义
    • “在src/foo.cpp:42:10处找到定义”
  • find_references:查找对符号的所有引用
    • “在bar.h:100中查找该函数的所有引用”
  • get_hover:获取类型信息和文档
    • “巴扎是什么类型的?cpp:200:15?”
  • workspace_symbol_search:在工作区中搜索符号
    • “查找与‘HttpRequest’匹配的符号”
  • find_implementations:查找接口/虚拟方法实现
    • “查找interface.h:50的实现”
  • get_document_symbols:获取文件的分层符号树
    • “显示main.cpp中的所有符号”
  • get_diagnostics:获取编译器错误、警告和注释
    • “显示src/foo.cpp中的错误”
  • get_call_hierarchy:获取函数调用者和被调用者
    • “在main.cpp:100:5上显示呼叫者/被呼叫者”
  • get_type_hierarchy:获取基类和派生类
    • “在foo.h:42处显示基类/派生类”

需求

  • Node.js>=18.0.0
  • clangd 的
  • 一个C++项目 compile_commands.json

安装

# From npm (eventually!)
# npm install -g clangd-mcp-server

# From source
git clone https://github.com/felipeerias/clangd-mcp-server.git
cd clangd-mcp-server
npm install && npm run build && npm link

配置

正在生成compile_commons.json

CMake: cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON /path/to/source

GN(铬): gn gen out/Default

gn gen --export-compile-commands out/default
ln -sf out/Default/compile_commands.json .
claude mcp add clangd-mcp-server clangd-mcp-server

其他: 检查项目的文档。

Claude代码配置

claude mcp add clangd-mcp-server clangd-mcp-server

或手动添加到 ~/.claude.json 或 .claude.json:

{
  "mcpServers": {
    "clangd": {
      "command": "clangd-mcp-server",
      "env": {"PROJECT_ROOT": "/path/to/your/project"},
      "alwaysAllow": ["*"]
    }
  }
}

这 alwaysAllow: ["*"] 字段允许所有工具在不提示用户批准的情况下运行。

项目特定配置(CLAUDE.md)

为了帮助Claude Code自动为您的C++项目使用cland-MCP工具,请添加到您的项目 CLAUDE.md:

## C++ Code Navigation

This project uses the clangd MCP server for C++ code intelligence. Use these tools for:
- Finding definitions and references
- Getting type information
- Searching symbols
- Finding implementations
- Getting diagnostics

环境变量

变量 描述 默认值
PROJECT_ROOT 项目工作区根目录 当前目录
COMPILE_COMMANDS_DIR compile_commands.json目录的路径 自动检测到
CLANGD_PATH cland二进制文件的路径 自动检测到
CLANGD_ARGS 其他cland参数 自动配置
LOG_LEVEL MCP日志级别(错误/警告/信息/调试) INFO
CLANGD_LOG_LEVEL Clangd日志级别 error

Clangd自动检测顺序: CLANGD_PATH → 项目捆绑(Chromium: third_party/llvm-build/.../clangd) → 系统路径

一些大型项目将自己的cland捆绑在一起。

铬 在以下位置自动检测 third_party/llvm-build/Release+Asserts/bin/clangd.

对于其他类似情况的项目,设置 CLANGD_PATH 指定捆绑的cland。

为了提高性能,默认情况下禁用后台索引。通常已经有一个轴 clangd 服务器负责对代码库进行索引。您可以通过以下方式启用它:

{"env": {"CLANGD_ARGS": "--background-index --limit-results=1000"}}

大型项目可能会考虑使用 远程索引.

详细日志记录可以通过以下方式启用:

{"env": {"LOG_LEVEL": "DEBUG", "CLANGD_LOG_LEVEL": "verbose"}}

示例:

// Chromium (auto-detects bundled clangd)
{"mcpServers": {"clangd": {"command": "clangd-mcp-server",
  "env": {"PROJECT_ROOT": "/home/user/chromium/src"},
  "alwaysAllow": ["*"]}}}

// Custom clangd binary
{"mcpServers": {"clangd": {"command": "clangd-mcp-server",
  "env": {"CLANGD_PATH": "/custom/path/clangd"},
  "alwaysAllow": ["*"]}}}

// Custom args (e.g., enable background indexing)
{"mcpServers": {"clangd": {"command": "clangd-mcp-server",
  "env": {"CLANGD_ARGS": "--background-index --limit-results=1000"},
  "alwaysAllow": ["*"]}}}

建筑

Claude Code
    ↓ MCP (stdio)
clangd-mcp-server
    ├── ClangdManager (lifecycle, health monitoring)
    ├── LSPClient (JSON-RPC over stdio)
    ├── FileTracker (didOpen/didClose)
    └── Tools (find_definition, find_references, etc.)
        ↓ LSP requests
    clangd subprocess

发展

npm install        # Install
npm run build      # Build
npm run watch      # Watch mode
npm test           # Run tests
node dist/index.js # Test locally

许可证

MPL-2.0-参见 许可证

参考文献

模型上下文协议 • clangd 的 • 语言服务器协议