本地 MCP 服务器 · 开源

为你的智能体
提供 代码地图。

你需要的逻辑可能已经存在。帮助 AI 编程智能体找到并理解它,在修改前检查影响范围。

本地运行 / Claude Code + Claude Desktop / MIT
spec-nav / 演示会话
// 在编写另一个费用计算函数之前…

agent → spec_nav_find_functions
{ "query": "calculate order fees" }
↳ 查找现有实现
services/billing/src/fees.ts

calculateFee(order)
阅读源码。检查依赖。作出判断。
agent → spec_nav_callers
{ "symbol": "calculateFee",
  "file": "services/billing/src/fees.ts" }

// 修改函数签名前先检查调用方。
就绪 ▌
覆盖你的代码库
TypeScriptJavaScriptPythonGoJavaKotlinSwift+ 更多 ↗
01 / 修改前先探索

减少猜测。
更多源码依据。

帮助智能体在确定实现方案前检查仓库。

⌕

找到值得复用的逻辑。

跨服务按词语、调用的函数或与草稿的相似性搜索,获取排序后的候选及匹配原因。

spec_nav_find_functions
{ }

了解完整上下文。

在决定如何使用函数之前,检查实现、签名、文档及相关导入——一次调用最多 10 个函数。

spec_nav_read_function
↳

检查谁在调用它。

修改函数签名或行为前,检查调用方、动态用法和未解析的引用。

spec_nav_callers
体验工作流程

同一个任务。
更明确的起点。

示例提示 → 工具输入

“添加订单费用计算前,先跨服务查找现有实现并阅读最合适的候选。”

spec_nav_find_functions
{ "query": "calculate order fees", "limit": 20 }

随后阅读匹配函数,导入前检查服务边界。由编程智能体判断哪个合适。

在 README 中查看所有工具 ↗
观看演示 / 同任务,同规则。

Grep + 规则。
MCP + 规则。

跟随一个订单费用请求,从用户提示到发现代码、修改、测试及交付。两个智能体遵循同一规则。

spec_nav_servicesspec_nav_functionsspec_nav_find_functionsspec_nav_read_functionspec_nav_similar_functionsspec_nav_callersspec_nav_mapspec_nav_trace_flow
一个请求 · 从开始到完成

跨 billing、checkout、orders、invoicing 和 shipping:添加可选手续费减免,将集中费用从 5 改为 7,复用现有总额计算,更新调用方,检查费用的不同写法,并验证普通及免手续费总额。两侧遵循相同的复用与调用方规则。

共同规则 · CLAUDE.md / RULE.md / 客户端指令编写前:查找现有函数,阅读并在合适时复用。
修改前:检查相关代码和调用方,然后更新受影响的位置。
01 / 开始前梳理服务
Grep + 规则智能体自行整理依据
演示探索调用数 · 脚本示意0
ILLUSTRATIVE COMMANDS & OUTPUT
rg --files -g 'package.json' services/ packages/ \
  && cat package.json services/*/package.json
Identify billing, checkout, orders, invoicing and shipping. Agent combines file lists and project configuration.
1 Bash call shown: list projects and read their manifests together.
spec-nav + 规则工具整理依据
演示探索调用数 · 脚本示意0
ILLUSTRATIVE COMMANDS & OUTPUT
spec_nav_services
{}
Repository root + discovered projects Source coverage + file/function counts Inspect excluded or unsupported files.
1 discovery call shown: project map and coverage together.
✓ MCP 的优势先看仓库地图,减少零散文件列表整理。spec_nav_services 汇总项目、数量与扫描范围。两侧仍需在修改前检查根目录和边界。
规则指导流程。 当智能体选择有效查询并仔细跟踪引用时,Grep 与文件阅读也能很好地完成任务。
MCP 提供结构。 候选排序、函数上下文、调用方依据,以及带有所在函数的匹配结果。

大型任务示意:探索部分显示 11 次 Grep/Read 与 9 次 spec-nav 调用;Grep 一侧像真实智能体一样,在一次 Bash 调用中串联多次搜索和读取。计数来自脚本,并非实测智能体。修改、测试与分页需额外调用。Immich 实测大型会话平均总调用 146.9 对 117.7,不证明整个任务只需几次调用或 MCP 工具运行更快。

02 / 连接你的智能体

简单配置。
更好的起点。

需要 Node.js 18+、npm/npx、Git,以及待扫描仓库的本地副本。

  1. 将此配置加入 .mcp.json ,放在目标仓库中。
  2. 将 SPEC_NAV_ROOT 替换为代码库的绝对路径。
  3. 重启 Claude Code,运行 /mcp,并检查 spec-nav 已连接。
更喜欢 Claude Desktop?安装扩展 ↗
.mcp.json
{
  "mcpServers": {
    "spec-nav": {
      "command": "npx",
      "args": [
        "-y",
        "github:khoitd-voyager/mcp-spec-nav"
      ],
      "env": {
        "SPEC_NAV_ROOT": "/absolute/path/to/your-repo"
      }
    }
  }
}
使用 monorepo 根目录以覆盖多个服务。
03 / 查看依据

基准测试,
可查阅、可复现。

对比 spec-nav 与 Grep/Read/Edit 在代码复用、调用方发现及修改范围梳理中的表现。

真实 LLM 会话 · 8 个 Grafana PRClaude Sonnet 5.5
生成的多语言 monorepobench/run.mjs
真实仓库评估bench/real.mjs
大型仓库性能bench/perf.mjs

真实运行:Claude Code(Claude Sonnet 5.5)在 8 个 Grafana PR 上,对比纯 Claude Code 与一个不只是 MCP 的 spec-nav 设置:MCP + 说明 + 强制调用 spec-nav 的钩子。两者均通过全部隐藏测试;质量差异在噪声范围内,强制设置每会话成本约高 58%。仅 MCP 的设置尚未测量。其余测试采用确定性智能体策略,Token 数为估算值。引用前请阅读方法及局限。

查看真实 LLM 运行报告 ↗
查看已记录结果 ↗
实测 / 已记录的基准结果

用数据看差异。

immich@cc7fd67 · 10 大型会话 · 已记录 2026-10-13

基线:Grep / Read / Editspec-nav + Read / Edit

完全正确的会话

越高越好
基线
0%
spec-nav
30%
0

成功复用现有函数

越高越好
基线
40%
spec-nav
93%
0

搜索阶段上下文 Token

越低越好 · 估算值
基线
67,345
spec-nav
21,188
0

会话最终上下文 Token

越低越好 · 估算值
基线
302,494
spec-nav
226,515
0

每会话错误修改数

越低越好 · 实测
基线
14.4
spec-nav
2.4
0

每会话工具调用数

越低越好 · 实测
基线
146.9
spec-nav
117.7
0
代价:MCP 冷启动开销。

平均工具执行时间包含每个会话的新 MCP 服务器启动,不包含模型思考时间,并非 LLM 端到端延迟。

使用确定性智能体策略,而非真实 LLM。数值为每会话平均值。Token 按 3.5 字符/token 估算。大型会话合并 3 个功能请求。Immich 仅为一个真实仓库,结果不适用于所有项目。

局限:搜索仍基于词语;TS/JS/Vue/Svelte/Astro 的调用方经过类型检查,其他语言基于证据解析。覆盖可能不完整。单文件简单修改可能收益有限。

查找。阅读。检查。

你接下来要写的函数
可能已经存在。

让编程智能体在动手编写前有处可查。