使用说明
回购语义mcp
repo-semantic-mcp 是用于边界编码代理的存储库检索MCP。
它帮助代理在编辑之前在大型代码库中收集基础上下文:
- 检查索引是否准备就绪,是否足够新鲜,可以使用;
- 检索相关代码、文档、测试、部署文件和策略文件;
- 将密集语义搜索与代码感知稀疏检索相结合;
- 可选择通过类型化存储库图扩展强结果;
- 告诉代理人确切的当地时间
rg验证是正确的权威。
MCP不是隐藏的编码代理,不会生成最终答案。这 前沿模型仍然是规划者、读者、编辑和审阅者。此服务器是 其下方的检索基板。
当前形状
目前的实施提供了:
- Qdrant支持
code和docs收藏; - 命名为密集和稀疏向量,采用加权RRF融合;
- 标识符、路径、路由、环境变量和 引用文字;
index_status.v2具有运行时、后端、新鲜度、检索和图形 诊断;repo_context_search面向代理的上下文信封;search_v2加上遗留的列表形式的语义/混合工具;- 显式SQLite图形工件
build_graph/rebuild_graph/update_graph; - 跨文件存储库上下文的有界图扩展;
- 监视器启动协调和分支切换后的有界图恢复, 重新启动和增量索引更新;
- 明确的精确搜索切换,而不是在MCP内部进行炮击。
公认的长期架构记录在
docs/architecture/P6-final-architecture.md.
为什么它存在
大型存储库对于编码代理来说很难,因为有用的上下文很少 在一个文件中。变化可能涉及:
- 运行时代码;
- 测验;
- 部署配置;
- 文件/规范;
- 代理策略文件;
- 环境合同;
- 跨服务流。
平原 rg 仍然是精确标识符和文字的权威,但它
没有解释哪些远程文件属于同一实现流。
语义搜索有助于概念,但仅靠原始嵌入往往无法准确
锚和代码结构。该项目将两者结合起来,
用于连接存储库上下文的确定性图层。
在哪里增加价值
目标不是“语义搜索而不是grep”。目标是给一个 frontier编码代理是大型存储库的更好的第一张地图。
rg 当代理已经知道确切的字符串时,这是极好的。它仍然是
标识符、环境变量、路由文字、表名和错误的权限
实时工作树中的消息。
当代理需要回答以下问题时,此MCP非常有用:
- 哪些文件属于此功能或运行时流?
- 哪些文档/规范/测试/部署文件解释了我要编辑的代码?
- 路由、env-var、配置键或策略如何跨仓库连接?
- 重启或分支切换后,我是否可以充分信任索引和图形 在编辑之前使用它们?
实例来自 vpn-server 狗粮:
- 关于迷你应用连接流链接Telegram迷你应用文档的查询,
可观察性规范、用户api路由代码、连接流外观和worker
背景。平原
rg "/v1/connect-flow/connect"找到了几十个匹配项,但是 没有解释端到端的路由。 - 关于用户流量计费的查询找到了维护遥测SQL,
处理程序代码以及相关的单元/集成测试
peer_pubkey_hash,peer_identifier,以及user_traffic_hourly.准确rg之后仍然可以用于验证。 - 精确的环境变量查找仍然会路由到本地
rgMCP通过以下方式做出贡献 检测这是一个精确的锚点任务,并暴露新鲜度状态。
检索路线
主要路线是:
agent query / agent-provided subqueries
-> dense retrieval over Qdrant
-> sparse code-normalized retrieval over Qdrant
-> weighted RRF fusion
-> optional typed graph expansion from strong seeds
-> final RRF over dense+sparse+graph branches
-> grounded context envelope
图形扩展对于跨区域问题很有用,例如:
- “此流在哪里端到端实现?”
- 查找此路由的处理程序、测试、文档和部署契约
- “将此迷你应用程序操作连接到后端工作程序”
- “这个env/config契约在系统中移动到哪里?”
对于纯精确查找,有意抑制或避免图扩展。
对于精确的环境变量、路由字符串、表名、错误消息和路径
碎片,MCP应推荐本地 rg 验证。
重要工具
面向检索的代理:
repo_context_search-具有分支诊断的主上下文路由, 文件组、匹配/未覆盖的术语、图形诊断和下一步操作。search_v2-稳定的搜索包络,没有强制的图语义。semantic_search,semantic_search_code,semantic_search_docs-遗产 语义结果列表。hybrid_search,hybrid_search_code,hybrid_search_docs-传统混合动力车 结果列表。
准备状态和生命周期:
index_status-代理应该调用的第一个工具。graph_status-详细的图形状态。build_index,rebuild_index,reindex_paths-显式索引生命周期。build_graph,rebuild_graph,update_graph-显式图生命周期。start_watcher,stop_watcher-明确的观察者生命周期。
搜索和状态永远不会隐式重建索引或图形。
代理工作流
针对在目标存储库中工作的编码代理的建议策略:
- 呼叫
repo-semantic-search.index_status(). - 验证
repo_root是预期的存储库。 - 验证
search_available=true. - 检查运行时/后端/新鲜度/图形诊断。
- 使用
repo_context_search或search_v2缩小范围。 - 读取返回的文件/范围。
- 使用本地
rg在编辑之前获取确切的锚点。 - 除非用户明确要求,否则不要调用生命周期工具,或者除非 任务是明确允许的安全恢复流。
如果MCP报告 runtime_switch_required, backend_switch_required,或a
阻塞生命周期状态时,代理应停止并报告主机端提示
而不是试图默默地修复它。
对于日常代理恢复,更倾向于先修复后重建的操作:
py -3.12 scripts/agents/repo_semantic_ensure_ready.py `
--repo C:\path\to\target-repo `
--mode safe-recover `
--start-watcher `
--require-graph `
--json
这可能会启动观察程序并运行有界启动协调 主动匹配回购/配置文件。它还可以在以下情况下运行有界图修复 索引是新鲜的,图形恢复是安全的。它仍然没有建造或重建 索引或图表。
运行时模型
一个正在运行的堆栈一次索引一个目标存储库。目标存储库 是一个明确的启动参数;MCP不会猜测活动的IDE文件夹。
这是故意的:
- Codex和Claude可以共享相同的MCP端点;
- 目标回购转换是确定性的;
- 集合名称包括repo/profile/model/schema标识;
- 生命周期操作保持明确。
快速开始
注册一次代理集成:
pwsh -File scripts/agents/register_repo_semantic_search.ps1
启动目标存储库的堆栈:
pwsh -File scripts/agents/start_repo_semantic_for_project.ps1 `
-RepoPath C:\path\to\target-repo
对于明确的配置文件:
pwsh -File scripts/agents/ensure_repo_semantic_search.ps1 `
-Build `
-Profile gpu `
-TargetRepoPath C:\path\to\target-repo
CPU回退:
pwsh -File scripts/agents/ensure_repo_semantic_search.ps1 `
-Build `
-Profile cpu `
-TargetRepoPath C:\path\to\target-repo
当前狗粮期间使用的V100/Volta配置文件:
pwsh -File scripts/agents/ensure_repo_semantic_search.ps1 `
-Build `
-Profile gpu-pplx-v100-infinity `
-TargetRepoPath C:\path\to\target-repo
注册后,如果客户端已打开,请重新启动。Codex使用 主机端stdio包装器,转发到共享HTTP端点,因此后端 容器重启不会终止聊天传输。Claude使用相同的共享 直接HTTP端点。
档案
堆栈是后端抽象的:MCP与配置的端点进行通信 以相同的方式对事件、嵌入和未来的重新登录/ColBERT端点进行建模。这 服务器不应该关心模型是否在WSL本机、llama.cpp本机中运行, Docker GPU或其他主机进程,只要端点合约匹配即可。
常见配置文件:
cpu-兼容性配置文件使用intfloat/multilingual-e5-small.gpu/gpu-qwen3-用于Qwen3嵌入的NVIDIA Docker配置文件。gpu-bge-m3-实验/调试配置文件。gpu-pplx-v100-infinity-V100友好版Infinity配置文件pplx-embed-v1.
Qdrant默认为 qdrant/qdrant:v1.17.1;当前索引架构为 3.
准备就绪
真相的来源是:
pwsh -File scripts/agents/repo_semantic_status.ps1
或者:
http://127.0.0.1:8011/readyz
/readyz 报告运行时就绪状态、活动仓库、配置文件、索引状态,
search_available,并嵌入 index_status 细节。Docker容器
健康是有益的,但是 /readyz 和 index_status 是操作检查吗
代理商应该依靠。
对于代理侧飞行前:
py -3.12 scripts/agents/repo_semantic_ensure_ready.py --repo C:\path\to\target-repo
默认情况下,帮助程序是只读的(diagnose 模式)。它报告是否搜索,
稀疏检索、图扩展、观察器和HTTP回退都是可用的。房屋出租
代理执行有界修复,使用显式 --mode safe-recover;这可能
启动已激活的匹配repo/profile的监视器,但仍然不会
构建或重建索引或图。
对于直接HTTP回退工具调用:
py -3.12 scripts/agents/repo_semantic_call_tool.py index_status
那个脚本打印了一个稳定的 ok/error 默认情况下为信封。使用 --payload 仅
当人类特别想要解码的MCP有效载荷而不需要包装字段时。
对于目标仓库更广泛的可靠性烟雾:
py -3.12 scripts/agents/repo_semantic_reliability_smoke.py `
--repo C:\path\to\target-repo
烟雾使用HTTP回退,验证准备就绪,运行一个小程序
repo_context_search 探测、检查 graph_status,并报告稳定情景
结果。默认情况下,它不会重建:它不会构建索引、重建图、,
切换repos/backends或修改源文件。添加 --allow-start-watcher 仅
当代理被明确允许启动已处于活动状态的监视器时
回购。
观察者状态是明确的:
watcher.enabled=true意味着运行时配置为支持增量 看。watcher.running=true意味着轮询监视器实际上是活动的。watcher.start_required=true意味着不会进行实时增量索引 直到start_watcher被明确地调用。watcher.autostart_policy=manual目前是有意的;状态/搜索工具 不要自行启动生命周期操作。
当明确调用时, start_watcher 首先运行启动文件协调
在观察者停止时更改,然后开始轮询未来的更改。
它仍然是一个显式的生命周期操作,而不是状态/搜索调用所做的操作
含蓄地。
图形新鲜度与向量新鲜度分开维护。在P6.B之后, 有界恢复可以从当前索引块更新图,而无需 全图重建。这在以下情况下很重要:
- 分支开关;
- MCP/容器重启;
- 观察者追赶,改变了索引块;
- 每个文件输入签名缺少遗留图工件。
如果图形恢复超出安全的自动界限,状态应建议
需要权限 update_graph(allow_large_update=true) 在推荐之前
rebuild_graph重建仍然是硬工件/模式的最后手段
不匹配或真正无限制的更新。
狗粮检查站
当前的检查点是针对大型VPN后端/控制平面进行的 存储库:
- 目标回购:
C:\nullexp_vpn\vpn-server; - 轮廓:
gpu-pplx-v100-infinity; - 索引块:
17035; - 图表:准备就绪,
36250节点和49015边缘; - 观察者:跑步;
- 图扩展:允许并通过验证
repo_context_search.
实际场景通过:
- 新编码代理的项目概述;
- 跨区域实施图
/v1/connect-flow/connect; - 精确的锚点查找
CONNECT_FLOW_TELEGRAM_BETA_SECRET随着rg权威和图表被压制。 - 图形辅助迷你应用程序/连接流上下文搜索
graph_mode=expand和graph_used=true; - MCP重启后的安全恢复,无需重建索引或图形;
- 小型灯具分支开关e2e:
start_watcher->启动协调->图形更新-> 图搜索返回新的路线。
旧的检查点保留在
docs/dogfood/2026-05-07-vpn-server-frontier-agent-checkpoint.md;README
反映了新的P6.B恢复狗粮状态。
当前限制
- 堆栈仍然需要精心设置。这还不是一个命令, 精心打造的社区设施。
- 直接MCP传输可以依赖于客户端;HTTP回退包装器是 当前代理脚本使用的可靠路径。
- 增量更改后,稀疏的BM25统计数据可能会过时。混合搜索
仍然可用,但仍应与当地人核实确切的锚
rg. - 图提取是有用的,但有意限制。这不是一个完整的 调用图引擎,而不是GraphRAG摘要,也不是隐藏的计划器。
- 今天,一些图形提取器警告是非阻塞的,特别是对于Python AST 解析大型真实存储库中的边缘案例。
仓库的规划
apps/repo-semantic-mcp/-MCP应用程序入口点和容器映像。services/repo_semantic/-索引、检索、状态、图形、存储和 后端逻辑。deploy/repo-semantic-search/-Docker编写堆栈和环境配置文件。scripts/agents/-启动、注册、状态和客户端包装器。docs/architecture/-公认的建筑。docs/specifications/-实施规范。docs/research/-研究输入和提示。docs/dogfood/-实用的狗粮检查站。tests/-MCP服务的单元和集成覆盖。
开发说明
- 传统的列表形工具必须保持向后兼容。
- 生命周期工具必须保持明确。
- 密集的查询文本保持原始状态。
- 稀疏查询文本在保留精确锚点的同时进行了代码规范化。
- 使用加权RRF代替直接的原始分数混合。
- 图扩展是有界的、确定性的和可解释的。
- 陈旧的图表/索引状态必须可见,并且不得对结果产生无声影响。
- 精确的本地
rg当代理具有文件系统访问权限时,它仍然具有权威性。
许可证
此存储库准备在下发布 PolyForm Noncommercial 1.0.0.
这意味着在许可条款下允许复制和修改,但是 除非许可证明确更改,否则不允许商业使用。