代码分析服务器

一个通过AST扫描Python代码库,存储到Weaviate,并通过可插拔LLM提供商(如Gemini、OpenAI)回答问题的代码分析服务器。

  • by shervinemp
  • Python
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 shervinemp/CodebaseMCP

使用说明

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 依赖图管理