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-参见 许可证
