C++代码分析服务器

一个基于libclang的C++代码分析服务器,提供语义理解、类/函数搜索、继承层次和调用图分析等功能,帮助开发者高效导航大型代码库。

  • by kandrwmrtn
  • Python
  • 本地部署
  • 34 星标
  • 更新于
在 GitHub 查看 kandrwmrtn/cplusplus_mcp

使用说明

C++MCP服务器

用于使用libclang分析C++代码库的MCP(模型上下文协议)服务器。

为什么使用这个?

这个服务器提供了对代码的语义理解,而不是让Claude grep通过你的C++代码库来理解结构。Claude可以立即找到类、函数及其关系,而不会迷失在数千个文件中。它理解C++语法、继承层次结构和调用图,使Claude能够像IDE一样浏览你的代码库。

特性

上下文高效的C++代码分析:

  • 搜索类 -按名称模式查找类
  • 搜索功能 -按名称模式查找函数
  • 获取密码信息 -获取详细的类信息(方法、成员、继承)
  • get_function_签名 -获取函数签名和参数
  • find_in_file -在特定文件中搜索符号
  • get_class_hierchy -获取类的完整继承层次结构
  • get_drived_classes -查找从基类继承的所有类
  • find_callers -查找调用特定函数的所有函数
  • find_calles -查找特定函数调用的所有函数
  • get_call_path -查找从一个函数到另一个函数的调用路径

先决条件

  • Python 3.9或更高版本
  • pip(Python包管理器)
  • Git(用于克隆存储库)
  • LLVM的libclang(安装脚本将尝试下载可移植的构建)

设置

  1. 克隆存储库:
git clone <repository-url>
cd CPlusPlus-MCP-Server
  1. 为您的平台运行安装脚本(这将创建一个虚拟环境,安装依赖项,并在可能的情况下获取libclang):

    • 视窗
      server_setup.bat
      
    • Linux/macOS
      ./server_setup.sh
      
  2. 测试安装(推荐):

# Activate the virtual environment first
mcp_env\Scripts\activate

# Run the installation test
python scripts\test_installation.py

这将验证所有组件是否正确安装和工作。测试脚本位于 scripts/test_installation.py.

配置Claude代码

要将此MCP服务器与Claude代码一起使用,您需要将其添加到Claude配置文件中。

  1. 查找并打开您的Claude配置文件。常见位置包括:

    C:\Users\<YourUsername>\.claude.json
    C:\Users\<YourUsername>\AppData\Roaming\Claude\.claude.json
    %APPDATA%\Claude\.claude.json
    

    确切位置可能因您的Claude安装而异。

  2. 将C++MCP服务器添加到 mcpServers 章节:

    {
      "mcpServers": {
        "cpp-analyzer": {
          "command": "python",
          "args": [
            "-m",
            "mcp_server.cpp_mcp_server"
          ],
          "cwd": "YOUR_INSTALLATION_PATH_HERE",
          "env": {
            "PYTHONPATH": "YOUR_INSTALLATION_PATH_HERE"
          }
        }
      }
    }
    

    重要: 替换 YOUR_INSTALLATION_PATH_HERE 使用克隆此存储库的实际路径。

  3. 重新启动Claude Desktop以使更改生效。

配置Codex CLI

要在OpenAI Codex CLI中使用此MCP服务器:

  1. 确保已创建虚拟环境(请参阅上面的设置)。

  2. 创建一个 .mcp.json 使用Codex打开的项目中的文件。CLI读取此文件以发现MCP服务器。

  3. 在虚拟环境中添加一个指向Python模块的条目。替换 YOUR_REPO_PATH 以及此存储库的绝对路径。

    {
      "mcpServers": {
        "cpp-analyzer": {
          "type": "stdio",
          "command": "YOUR_REPO_PATH/mcp_env/bin/python",
          "args": [
            "-m",
            "mcp_server.cpp_mcp_server"
          ],
          "env": {
            "PYTHONPATH": "YOUR_REPO_PATH"
          }
        }
      }
    }
    

    Windows更改 command 向 YOUR_REPO_PATH\\mcp_env\\Scripts\\python.exe.

  4. 重新启动Codex CLI(或运行 codex reload)因此,它采用了新的服务器定义。

  5. 在Codex中,使用MCP调色板或提示指令(例如,“使用cpp分析器工具将项目目录设置为…”)开始为C++项目建立索引。

如果你保持 .mcp.json 您还可以在此存储库中添加一个文件 "cwd": "YOUR_REPO_PATH" 这样Codex就可以从正确的目录启动服务器。

与Claude一起使用

配置后,您可以在与Claude的对话中使用C++分析器:

  1. 首先,让Claude使用MCP工具设置您的项目目录:

    "Use the cpp-analyzer tool to set the project directory to C:\path\to\your\cpp\project"
    

    注: 对于非常大的项目,初始索引可能需要很长时间(对于包含数千个文件的代码库,需要几分钟)。服务器将缓存结果,以便更快地进行后续查询。

  2. 然后你可以问这样的问题:

    • “查找所有包含‘Actor’的类”
    • “显示Component类详细信息”
    • “BeginPlay函数的特征是什么?”
    • “搜索物理相关函数”
    • “显示GameObject的继承层次结构”
    • “查找所有调用Update()的函数”
    • “Render()调用哪些函数?”

建筑

  • 使用libclang进行精确的C++解析
  • 缓存解析AST以提高性能
  • 支持增量分析和项目范围内的搜索
  • 提供详细的符号信息,包括:
    • 带有参数类型和名称的函数签名
    • 类成员、方法和继承
    • 用于理解代码流的调用图分析
    • 文件位置便于导航

配置选项

服务器行为可以通过以下方式配置 cpp-analyzer-config.json:

{
  "exclude_directories": [".git", ".svn", "node_modules", "build", "Build"],
  "exclude_patterns": ["*.generated.h", "*.generated.cpp", "*_test.cpp"],
  "dependency_directories": ["vcpkg_installed", "third_party", "external"],
  "include_dependencies": true,
  "max_file_size_mb": 10
}
  • 排除目录:项目扫描期间要跳过的目录
  • exclude_patters:要从分析中排除的文件模式
  • 依赖目录:包含第三方依赖关系的目录
  • include_依赖关系:是否分析依赖目录中的文件
  • max_file_size_mb:要分析的最大文件大小(跳过较大的文件)

故障排除

常见问题

  1. “未找到libclang”错误

    • 跑 server_setup.bat (Windows)或 ./server_setup.sh (Linux/macOS)让项目自动下载libclang
    • 如果自动下载失败,请手动下载libclang:
      1. 首选https://github.com/llvm/llvm-project/releases
      2. 下载适合您系统的文件:
        • 视窗: clang+llvm-*-x86_64-pc-windows-msvc.tar.xz
        • macOS: clang+llvm-*-x86_64-apple-darwin.tar.xz
        • Linux: clang+llvm-*-x86_64-linux-gnu-ubuntu-*.tar.xz
      3. 提取libclang库并将其复制到适当的位置:
        • 视窗:复制 bin\libclang.dll 向 lib\windows\libclang.dll
        • macOS:复制 lib\libclang.dylib 向 lib\macos\libclang.dylib
        • Linux:复制 lib\libclang.so.* 向 lib\linux\libclang.so
  2. 服务器无法启动

    • 检查是否安装了Python 3.9+: python --version
    • 验证是否安装了所有依赖项: pip install -r requirements.txt
    • 运行安装测试以识别问题:
      mcp_env\Scripts\activate
      python -m mcp_server.test_installation
      
  3. 克劳德无法识别服务器

    • 确保路径 .claude.json 是绝对路径
    • 修改配置后重新启动Claude Desktop
  4. Claude使用grep/glob而不是C++分析器

    • 在提示中明确:询问C++代码时,说“使用cpp分析器…”
    • 为您的项目添加说明 CLAUDE.md 告诉Claude在C++符号搜索中更喜欢cpp分析器的文件
    • cpp分析器在查找类、函数和理解代码结构方面比grep快得多