知识MCP
一个高精度的本地知识库服务器(RAG),实现 模型上下文协议(MCP)它使AI代理(Codex、Claude Code、Gemini CLI等)能够使用结合语义、词汇和结构分析的混合方法来导航、搜索和推理复杂的代码库。
🚀 主要特点
- 混合三重搜索:通过以下方式融合三个不同的检索渠道 互易秩融合(RRF) 为了获得最大的召回率:
- 全文搜索(FTS5):处理精确的名称匹配和特定的关键字。 - 语义向量搜索(sqlite-vec):理解概念和自然语言意图。 - 基于图的检索:为实际代码符号及其关系提供2倍的相关性提升。
- 深度语义索引:
- C网:集成 罗瑟琳 精确符号提取和依赖图分析。 - Polyglot支持: 树保姆 集成TS、JS、Python、Go等的高质量解析。 - 标记语言:文档的节意识分块。
- 知识图谱:跟踪符号之间的关系:
CALLS,INHERITS,IMPLEMENTS,以及IMPORTS.支持递归 影响分析 以估计代码更改的爆炸半径。 - 自主嵌入:使用过程生成
sentence-transformers(mpnet-base-v2)。在Docker内部本机工作,无需外部API依赖。 - 增量同步:通过增量同步机制
mtime和SHA-256确保只处理修改过的文件,大大加快了更新速度。
🛠 可用的MCP工具
搜索与检索
knowledge_search:跨所有存储库的三重混合搜索。返回具有信任级别的块(verified对于代码,hint文档)。knowledge_get_chunk:检索特定知识块的详细内容和元数据。
符号和图形导航
knowledge_find_symbol:使用通配符定位类、方法和接口(例如。,*Repository).knowledge_get_callers/knowledge_get_callees:浏览任何符号的调用图。knowledge_get_hierarchy:探索继承和接口实现。knowledge_impact_analysis:执行递归依赖性分析,以找到受符号更改影响的所有内容。
管理
knowledge_sync_repo:触发存储库的后台增量同步,以便在代码更改后更新AI的“内存”。knowledge_delete_repo:擦除特定存储库的所有索引数据。
📋 需求
- Python 3.10+
- .NET 8.0 SDK (基于Roslyn的C#分析所必需)
- 码头工人 (建议最容易部署)
🐳 快速入门(Docker)
1.配置存储库路径
创建一个 .env 项目根目录中的文件:
# The host directory that will be mounted as /repos inside the container.
# Set this to the PARENT folder of your repositories.
REPOS_DIR=C:\Repos2.构建并启动容器
docker compose up -d3.为特定项目建立索引
选项A——PowerShell脚本 (推荐,请参阅 脚本):
.\scripts\Reindex-Repo.ps1 -Wait选项B——直接HTTP调用:
curl -X POST http://localhost:8000/sync \
-H "Content-Type: application/json" \
-d '{"repo_id": "my-app", "repo_path": "/repos/my-app"}'⚠️repo_path是这条路吗 集装箱内 (例如。,/repos/my-app),而不是主机路径。
4.连接您的MCP客户端
将此添加到AI客户端的配置中(例如。, mcp.json):
{
"mcpServers": {
"knowledge-mcp": {
"command": "docker",
"args": ["exec", "-i", "knowledge-mcp", "python", "-m", "knowledge_mcp.main", "mcp"]
}
}
}______________________________________________________________________
🔧 脚本
scripts/Reindex-Repo.ps1
一个PowerShell辅助脚本,通过向正在运行的应用程序发送POST请求来触发对存储库的重新索引 knowledge-mcp 服务器。
参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
-RepoId | ImpactOS.Core.Lib | 用作数据库中键的唯一存储库标识符 |
-RepoPath | /repos/ImpactOS.Core.Lib | 存储库路径 Docker容器内部 |
-ServerUrl | http://localhost:8000 | 正在运行的知识mcp服务器的URL |
-Wait | $false | 如果设置,则在触发同步后流式传输容器日志 |
使用示例:
# Trigger re-indexing with default settings (ImpactOS.Core.Lib)
.\scripts\Reindex-Repo.ps1
# Trigger and watch progress in real time
.\scripts\Reindex-Repo.ps1 -Wait
# Index a different repository
.\scripts\Reindex-Repo.ps1 -RepoId "MyOtherLib" -RepoPath "/repos/MyOtherLib"
# Point to a remote server
.\scripts\Reindex-Repo.ps1 -ServerUrl "http://192.168.1.100:8000" -Wait它是如何工作的:
- 验证服务器是否可在以下位置访问
ServerUrl. - 发送a
POST /sync请求与repo_id和repo_path. - 索引在容器内的后台运行。
- 随着
-Wait,通过流式传输实时日志docker logs -f.
💡 路径映射: 如果REPOS_DIR=C:\Repos那么C:\Repos\MyLib在主机上 可在容器内进入,如/repos/MyLib.
______________________________________________________________________
📐 架构与决策
如需深入了解技术设计,请参阅我们的架构决策记录:
