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/projects2.构建和启动
使用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-server3.配置目录
打开web UI http://localhost:8000 致:
- 浏览已装载的目录
- 选择要索引的文件夹
- 监控索引进度
- 测试搜索
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 -dAPI终点
# 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小时 |
适用于大型代码库
- 从单个模块开始进行测试
- 使用快速嵌入模型(默认)
- 通过web UI仅索引所需的目录
- 考虑使用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许可证-免费使用和修改。
贡献
需要改进的关键领域:
- 模板专业化处理
- 宏观扩张跟踪
- 多语言支持
- 可视化依赖关系图查看器
