使用说明
CodebaseMCP
MCP服务器,使用AST扫描Python代码库,将其存储在Weaviate中,并通过可插拔的LLM提供者(Gemini、OpenAI)回答问题。
快速入门
docker-compose up -d
pip install -r requirements.txt
echo "LLM_API_KEY=your_key" >> .env
echo "GENERATE_LLM_DESCRIPTIONS=true" >> .env
python src/code_analysis_mcp/mcp_server.py
呼叫 scan_codebase 从任何具有项目路径的MCP客户端。
特性
- AST扫描 --函数、类、导入、调用、变量、装饰器、签名、文档字符串、交叉引用。
- 混合搜索 --编织矢量+BM25关键字搜索。未加注释的元素仍然可以通过名称/代码内容找到。
- DAG有序富集 --被呼叫者在呼叫者之前被丰富,因此细化可以看到真实的被呼叫者描述。
- RAG问答 —
ask_question通过混合搜索检索相关代码,并用LLM合成答案。 - 文件监视 --按DAG顺序重新扫描和重新丰富文件更改。
- 工作池 --浓缩用途
LLM_CONCURRENCY使用队列而不是N个异步任务的workers。 - 代码库依赖关系 --代码库之间的关系;查询并行地跨越依赖关系。
- 调用图可视化 --MermaidJS来自存储的交叉引用。
配置
LLM_PROVIDER=gemini # or "openai"
LLM_API_KEY= # generic key for any provider
GENERATE_LLM_DESCRIPTIONS=true # enables enrichment, refinement, RAG
LLM_CONCURRENCY=5 # worker pool size
GENERATION_MODEL_NAME=models/gemini-3.1-flash-lite-preview
EMBEDDING_MODEL_NAME=models/gemini-embedding-2
WEAVIATE_HOST=localhost # these 3 env vars are now functional
WEAVIATE_PORT=8080
WEAVIATE_GRPC_PORT=50051
SEMANTIC_SEARCH_LIMIT=10
SEMANTIC_SEARCH_DISTANCE=0.7
WATCHER_POLLING_INTERVAL=5
建筑
src/code_analysis_mcp/
├── llm/ # Pluggable LLM providers
│ ├── base.py # ABC: implement generate() + embed()
│ ├── gemini.py # GeminiProvider
│ ├── openai.py # OpenAIProvider
│ └── factory.py # Factory + singleton, reads LLM_PROVIDER
├── code_scanner.py # AST parsing, element extraction, upload
├── weaviate_client.py # Schema, CRUD, hybrid search
├── rag.py # RAG Q&A, description refinement, summaries
├── tasks.py # Enrichment workers, DAG sort, summary (extracted from mcp_server)
├── mcp_server.py # FastMCP server, tools, watcher, lifespan
├── visualization.py # MermaidJS call graphs
└── utils.py # Shared helpers
LLM提供者系统
新供应商实施 LLMProvider ABC在 llm/base.py 并注册 llm/factory.py.通过选择密钥 LLM_API_KEY (通用)或 GEMINI_API_KEY / OPENAI_API_KEY (回退)。
数据模型
- 代码文件 (多租户)--文件路径、修改时间。
- 代码元素 (多租户)——每个解析的元素都有可选的向量。
- 代码库注册表 (全局)——代码库元数据、状态、依赖关系。
租户ID=代码库名称。跨代码库查询在依赖租户之间展开。
MCP工具
| 工具 | 说明 |
|---|---|
scan_codebase |
扫描、上传、DAG丰富、总结、启动观察程序 |
list_codebases |
已注册的代码库及其状态 |
select_codebase |
设置活动上下文(停止前观察者) |
delete_codebase |
删除代码库+租户+注册表项 |
find_element |
在活动+依赖关系中按名称、文件、类型搜索 |
get_details |
UUID的完整属性 |
analyze_snippet |
查找与代码段相关的元素 |
ask_question |
RAG(可选 include_dependencies) |
trigger_llm_processing |
队列富集(DAG有序,工作池) |
regenerate_summary |
在不重新扫描的情况下重新运行摘要 |
start_watcher / stop_watcher |
手动观察控制 |
add_codebase_dependency / remove_codebase_dependency |
依赖图管理 |