C++代码分析服务器

一个基于Graph-RAG架构的强大C++代码分析服务器,提供语义搜索、崩溃转储分析和Web UI配置功能。

  • by gpowala
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 gpowala/CodeGraphRagMcp

使用说明

C++图形RAG MCP服务器

一个强大的模型上下文协议(MCP)服务器,用于使用Graph RAG架构分析大型C++代码库。具有语义搜索、崩溃转储分析和用于配置的web UI。

特性

  • 图形RAG架构:将语义搜索(RAG)与关系图相结合
  • 碰撞倾倒分析:解析堆栈跟踪并立即找到有问题的代码
  • 树保姆解析:准确的C++解析,理解语法
  • 增量索引:智能变化检测和高效更新
  • pg矢量存储:快速矢量相似性搜索
  • Web UI仪表板:配置目录并监视索引状态
  • Docker+Podman:适用于两个容器运行时

快速开始

先决条件

  • Docker(20.x+)或Podman(4.x+)
  • 4GB+RAM(建议大型代码库使用8GB)
  • 5GB可用磁盘空间

1.配置环境

# Copy example config
cp env.example .env

# Edit .env to set your source code path
# Windows example: HOST_PATH=C:/Projects
# Linux example: HOST_PATH=/home/user/projects

2.构建和启动

使用Docker:

# Build images
docker-compose build

# Start services
docker-compose up -d

# View logs
docker-compose logs -f mcp-server

使用Podman:

# Build images
podman-compose build

# Start services
podman-compose up -d

# View logs
podman-compose logs -f mcp-server

3.配置目录

打开web UI http://localhost:8000 致:

  1. 浏览已装载的目录
  2. 选择要索引的文件夹
  3. 监控索引进度
  4. 测试搜索

4.连接到克劳德桌面/VS代码

添加到MCP客户端配置中:

克劳德桌面 (%APPDATA%\Claude\claude_desktop_config.json 在Windows上):

{
  "mcpServers": {
    "cpp-codebase": {
      "url": "http://localhost:8000/mcp/v1"
    }
  }
}

VS Code (MCP扩展设置):

{
  "mcp.servers": {
    "cpp-codebase": "http://localhost:8000/mcp/v1"
  }
}

网页用户界面

仪表板位于 http://localhost:8000 提供:

特性 描述
索引状态 查看索引文件、找到的实体、进度
目录浏览器 导航并选择要索引的目录
快速搜索 测试语义搜索查询
重新索引按钮 手动触发重新索引

可用的MCP工具

搜索代码

在代码库中进行语义搜索。

"Find database connection patterns"
"Show mutex locking implementations"

find_symbol

精确的符号查找和用法。

"Find ConnectionPool::acquire"
"Where is DatabaseManager defined?"

跟踪依赖关系

依赖关系的图遍历。

"What does AuthManager depend on?"
"Show me everything that calls validateUser"

get_text

AI代理的全面上下文。

"Get context about the payment processing module"

分析调试文本

从Visual Studio分析崩溃转储。

Provide: file path, line number, exception info, call stack

查找代码位置

导航到特定文件和行。

"Show me database_connection.cpp line 95"

配置

环境变量

变量 默认值 描述
HOST_PATH ./example_code 安装路径 /host
MONITORED_PATHS (空) 索引的逗号分隔路径
MCP_PORT 8000 API和web UI的端口
DB_NAME cpp_codebase PostgreSQL数据库名称
DB_USER postgres 数据库用户
DB_PASSWORD postgres 数据库密码
EMBEDDING_MODEL all-MiniLM-L6-v2 句子转换模型

数据载体安装

以只读方式挂载源代码:

volumes:
  # Mount entire drive (Windows)
  - C:/:/host:ro
  
  # Mount specific directory (Linux)
  - /home/user/projects:/host:ro

然后使用web UI选择特定的子目录。

建筑

┌─────────────────────────────────────────────────────────────┐
│                    Container Network                         │
│  ┌─────────────────────┐    ┌─────────────────────────────┐ │
│  │  PostgreSQL 18      │    │  MCP Server                 │ │
│  │  + pgvector         │◄───│  + FastAPI                  │ │
│  │  (pg18-trixie)      │    │  + Web UI                   │ │
│  │  Port: 5432         │    │  Port: 8000                 │ │
│  └─────────────────────┘    └─────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

命令参考

码头工人

# Start
docker-compose up -d

# Stop
docker-compose down

# View logs
docker-compose logs -f mcp-server

# Rebuild after code changes
docker-compose build --no-cache

# Reset database (deletes all indexed data)
docker-compose down -v
docker-compose up -d

# Check status
docker-compose ps

# Enter container shell
docker-compose exec mcp-server bash

波德曼

# Start
podman-compose up -d

# Stop
podman-compose down

# View logs
podman-compose logs -f mcp-server

# Rebuild
podman-compose build --no-cache

# Reset database
podman-compose down -v
podman-compose up -d

API终点

# Check health
curl http://localhost:8000/api/status

# List MCP tools
curl http://localhost:8000/mcp/v1/tools

# Search code
curl -X POST http://localhost:8000/api/search \
  -H "Content-Type: application/json" \
  -d '{"query": "database connection"}'

# Get directories
curl http://localhost:8000/api/directories

# Browse directory
curl "http://localhost:8000/api/browse?path=/host"

故障排除

服务器无法启动

# Check logs
docker-compose logs mcp-server

# Common issues:
# - PostgreSQL not ready: Wait 30 seconds
# - Port in use: Change MCP_PORT in .env
# - Out of memory: Increase Docker memory limit

没有文件索引

# Verify mount
docker-compose exec mcp-server ls -la /host

# Check configured paths
curl http://localhost:8000/api/directories

索引速度慢

# Use faster embedding model
EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2

# Check database size
docker-compose exec postgres psql -U postgres -d cpp_codebase \
  -c "SELECT pg_size_pretty(pg_database_size('cpp_codebase'));"

Linux上的权限被拒绝

# Add user to docker group
sudo usermod -aG docker $USER

# Or use podman (rootless by default)
podman-compose up -d

性能提示

代码库大小 RAM 首次索引时间
10K LOC 4GB 约30秒
100K LOC 4GB 约5分钟
1M LOC 8GB 约45分钟
3M+LOC 16GB 约2小时

适用于大型代码库

  1. 从单个模块开始进行测试
  2. 使用快速嵌入模型(默认)
  3. 通过web UI仅索引所需的目录
  4. 考虑使用SSD作为数据库卷

项目结构

cpp-graph-rag-mcp/
├── server.py              # Main MCP server (FastAPI)
├── parser.py              # Tree-sitter C++ parser
├── indexer.py             # Code indexer
├── crash_analyzer.py      # Crash dump analysis
├── vs_context_analyzer.py # VS debugging integration
├── config_manager.py      # Configuration persistence
├── requirements.txt       # Python dependencies
├── Dockerfile             # Container build
├── docker-compose.yml     # Multi-container setup
├── env.example            # Configuration template
├── static/                # Web UI files
│   ├── index.html
│   ├── styles.css
│   └── app.js
├── example_code/          # Sample C++ for testing
└── docs/                  # Documentation

安全说明

  • 默认情况下,服务器仅在本地主机上运行
  • 代码以只读方式装载
  • 生产时应更改数据库密码
  • 没有数据离开您的机器(本地嵌入)

许可证

MIT许可证-免费使用和修改。

贡献

需要改进的关键领域:

  • 模板专业化处理
  • 宏观扩张跟踪
  • 多语言支持
  • 可视化依赖关系图查看器