@导航代理/mcp服务器
仅限工作区的MCP服务器,用于结构代码导航和存储库检查。它暴露了稳定的公众 code.* 用于查找符号定义、跟踪上游调用者以进行影响分析、在逻辑更改之前跟踪下游执行流、列出路由/端点、搜索文本和检查工作区树而无需盲目打开文件的工具界面。
npm: @navigation-agent/mcp-server
______________________________________________________________________
安装
服务器通过运行 npx.
需求
- Node.js 18+
- ripgrep (
rg)--可选,仅需要code.search_text
克劳德代码
claude mcp add --transport stdio navigation-agent -- npx -y @navigation-agent/mcp-serverOpenCode
添加 ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"navigation-agent": {
"type": "local",
"command": ["npx", "-y", "@navigation-agent/mcp-server"],
"enabled": true,
"timeout": 30000
}
}
}Gemini CLI
gemini mcp add navigation-agent npx -- -y @navigation-agent/mcp-server或手动添加到 ~/.gemini/settings.json 或 .gemini/settings.json:
{
"mcpServers": {
"navigation-agent": {
"command": "npx",
"args": ["-y", "@navigation-agent/mcp-server"],
"timeout": 30000
}
}
}使用带连字符的服务器名称 navigation-agent。避免在Gemini MCP服务器名称中使用下划线,因为Gemini从服务器名称派生出完全限定的工具名称。
光标
添加 ~/.cursor/mcp.json 或 .cursor/mcp.json:
{
"mcpServers": {
"navigation-agent": {
"command": "npx",
"args": ["-y", "@navigation-agent/mcp-server"]
}
}
}OpenAI 代码专家
codex mcp add navigation-agent -- npx -y @navigation-agent/mcp-server或添加到 ~/.codex/config.toml:
[mcp_servers.navigation-agent]
command = "npx"
args = ["-y", "@navigation-agent/mcp-server"]
startup_timeout_sec = 30
tool_timeout_sec = 60工作区根目录
默认情况下,服务器会分析当前工作目录。要固定特定项目,请设置 NAVIGATION_MCP_WORKSPACE_ROOT 在您的MCP配置中。
______________________________________________________________________
代理使用指南
此服务器是为 模型控制MCP工具的使用:当任务涉及工作区代码结构时,代理应在打开源文件之前发现并调用其工具。
它发布了每个工具的描述和服务器指令,因此MCP客户端可以在不依赖私人技能注册表的情况下向模型传授工作流程。
代理商如何学习使用它
MCP客户通过几个标准渠道提供模型指导:
| 频道 | 此服务器提供什么 |
|---|---|
MCP initialize.result.instructions | 简洁的工作流程:在读取文件之前使用导航,选择哪个工具,支持的语言/框架,以及仅限工作区的限制。 |
| 工具描述和输入模式 | 每个 code.* 该工具解释何时使用它并列出支持的列表 language / framework 过滤器。 |
| 结构化工具结果 | 每个工具都返回稳定的包络 tool, status, summary, data, errors,以及 meta 因此代理可以安全地链接输出。 |
| 可选的客户端规则/技能 | OpenCode、Codex、Cursor和Gemini等客户端可以添加项目规则,但此服务器不需要私有注册表即可使用。 |
重要部分:服务器指令是MCP握手的一部分,因此遵守MCP指令的客户端可以在选择工具之前将它们注入模型。
skills/navigation-mcp/SKILL.md 是支持技能的客户的可选便携式技能模板。MCP正常运行不需要;特别是对于OpenCode,技能是从以下方面发现的 .opencode/skills//SKILL.md,全局OpenCode技能,或与Claude/agents兼容的技能目录。
代理的快速路径
- 使用
code.inspect_tree在未知模块或目录中定向而不读取文件。 - 使用
code.find_symbol当你知道一个类、函数、方法、类型、枚举或注释名称,但不知道定义文件时。 - 通过
find_symbol已返回items[].path进入:
- code.trace_callers 对于上游影响: 谁叫这个? - code.trace_flow 对于下游行为: 这个呼叫或到达什么?
- 使用
code.list_endpoints在更改REST、GraphQL或路由曲面之前。 - 使用
code.search_text对于文本模式、导入、装饰器,或者当符号查找不够时。 - 只读导航工具返回的相关文件。
后备代理应使用
| 情况 | 正确的回退 |
|---|---|
code.find_symbol 对于常量、配置键、装饰器、导入或生成的名称返回零 | 使用 code.search_text 范围由 path, include,以及 language. |
| 跟踪结果太宽或太嘈杂 | 窄 path, language, framework,或 symbol;为 trace_callers,较低 max_depth. |
| 路由或端点清单返回零 | 请使用更窄的值重试 path 最具体的 framework 或 kind 在结束之前,没有公开的表面。 |
导航结果为 truncated: true | 在读取文件或增加之前缩小查询范围 limit. |
不要把空的结果本身当作证据。使用一个范围内的回退,然后在结果仍然为空时解释限制。
客户端中的工具命名
规范的公共合同是 code.*一些客户端使用服务器前缀或规范化分隔符公开MCP工具,例如 navigation-agent_code_find_symbol 或 mcp_navigation-agent_code.find_symbol。将这些名称视为相同规范工具的别名。
使用 navigation-agent 作为示例中的服务器名称。它是可读的,避免了冲突,并避免了从服务器id导出完全限定工具名称的客户端中与下划线相关的解析器问题。
客户惯例说明
| 客户端 | 已检查约定 |
|---|---|
| Claude代码 | 本地stdio命令使用 claude mcp add --transport stdio -- 服务器指令帮助Claude的MCP工具搜索决定何时加载这些工具。 |
| OpenCode | 本地MCP服务器位于 mcp 配置键 type: "local" 和 command 作为一个数组。MCP工具以服务器名称前缀公开,因此提示/规则可以说“使用 navigation-agent”. |
| Gemini CLI | MCP服务器位于 mcpServers;stdio使用 command + args.BGemini将MCP服务器指令附加到系统指令中,并分配以下名称 mcp_{serverName}_{toolName}. |
| 游标 | MCP服务器配置在 mcp.json 随着 command + args 对于stdio或 url + headers 对于远程服务器。 |
| OpenAI Codex | MCP服务器位于 [mcp_servers.] 在 config.toml; codex mcp add -- 是CLI表单 |
支持的筛选器代理应该知道
- 语言:
typescript,javascript,go,java,php,python,rust,csharp - 框架:
react-router,spring
请勿将此MCP用于web搜索、外部存储库、任意文件系统访问或读取文件内容。它是一个仅限工作区的导航层。
______________________________________________________________________
兼容性矩阵
此表必须保留在README中,因为这是理解公共支持面的最快方法。它是有意组织的 语言作为行 和 工具作为列 因此,添加更多的语言会向下增长,而不是扩大表格。
工具列省略了 code. 前缀以保持矩阵可读。
| 语言 | inspect_tree | find_symbol | search_text | list_endpoints | trace_flow | trace_callers |
|---|---|---|---|---|---|---|
| Java✅ | ✅ | ✅ | ✅ Spring REST/GraphQL | ✅ | ✅ | |
| TypeScript | ✅ | ✅ | ✅ | ✅ React路由器 | ✅ | ✅ |
| JavaScript | ✅ | ✅ | ✅ | ✅ React路由器 | ✅ | ✅ |
| PHP | ✅ | ✅ | ✅ | ⚠️ 公开,未对端点进行重新验证 | ✅ | ✅ |
| python✅ | ✅ | ✅ | ✅ FastAPI/烧瓶风格装饰器 | ✅ | ✅ | |
| 锈蚀 | ✅ | ✅ | ✅ | ⚠️ 依赖目标/非web目标返回零 | ✅ 合格符号 | ✅ 合格符号 |
| 去吧✅ | ✅ | ✅ | ⚠️ 当前示例中没有有用的端点清单 | ✅ | ✅ | |
| C✅ | ✅ | ✅ | ⚠️ 特技执行 | ✅ | ✅ |
传说:
- ✅ = 在此文档同步期间在真实项目中验证
- ⚠️ = 公开披露,但在此过程中未重新验证,对所选验证项目没有意义,或仍有警告
- ❌ = 今天不作为公众支持
code.inspect_tree和code.search_text也可以在没有语言过滤器的情况下跨通用工作区文件工作。
重要提示:
- 公共语言过滤器是
typescript,javascript,go,java,php,python,rust,以及csharp. - Go、PHP、Python、Rust、Java、TypeScript、JavaScript和C#都是公共合约的一部分;上面的矩阵显示了每个工具的当前验证级别。
- Rust跟踪工具工作良好,但应使用其限定名查询方法/impl符号(例如
JavaProjectIndex::build).
______________________________________________________________________
公共工具
公共合同正好暴露了这六个工具:
code.inspect_treecode.list_endpointscode.find_symbolcode.search_textcode.trace_flowcode.trace_callers
使用 snake_case 参数,例如 max_depth, include_hidden,以及 file_pattern.
在更改函数或方法之前
当您需要了解工作空间内的行为或影响时,请使用此工作流:
code.find_symbol--首先解析精确的定义文件。code.trace_callers--在重命名、删除或更改签名之前检查上游影响。code.trace_flow--在更改逻辑之前检查下游执行。read只有跟踪结果返回的文件才真正重要。
经验法则:
- 选择
code.trace_callers为了 谁依赖这个? - 选择
code.trace_flow为了 这达到或唤起了什么? - 如果您需要影响和行为,请在编辑前运行两者
具体工作空间示例:
- 解析符号定义:
{
"symbol": "create_order",
"language": "python",
"kind": "function",
"path": "examples/python"
}- 更改功能前检查上游冲击:
{
"path": "examples/python/app/api/endpoints.py",
"symbol": "create_order",
"language": "python",
"recursive": true,
"max_depth": 3
}- 在更改逻辑之前检查下游行为:
{
"path": "examples/python/app/api/endpoints.py",
"symbol": "create_order",
"language": "python"
}预期代理行为:
- 使用
code.find_symbol首先,当定义文件未知时 - 使用
code.trace_callers首先,当风险在于打断来电者时 - 使用
code.trace_flow接下来,当风险正在改变下游行为时 - 只有那时
read您实际需要的跟踪文件
React路由器示例:
{
"symbol": "action",
"kind": "function",
"framework": "react-router",
"path": "app/routes"
}{
"path": "app/routes/change-password.tsx",
"symbol": "action",
"framework": "react-router",
"recursive": true,
"max_depth": 2
}{
"path": "app/routes/change-password.tsx",
"symbol": "action",
"framework": "react-router"
}code.search_text 响应风格
code.search_text 针对代理进行了优化:
- 结果按文件分组
- 每场比赛只返回
line加上精确spans topFiles首先突出显示最密集的文件- 上下文的
before/after为了降低噪音和代币成本,公众反应中故意省略了文本
示例形状:
{
"fileCount": 3,
"matchCount": 19,
"totalFileCount": 3,
"totalMatchCount": 19,
"topFiles": [
{
"path": "examples/go/internal/http/handlers/user_handler.go",
"language": "go",
"matchCount": 11
}
],
"items": [
{
"path": "examples/go/internal/http/handlers/user_handler.go",
"language": "go",
"matchCount": 11,
"matches": [
{
"line": 28,
"spans": [{ "colInit": 23, "colEnd": 32 }]
}
]
}
]
}快速示例
{
"symbol": "RootUserGraphQLController",
"language": "java",
"kind": "class"
}{
"path": "app/routes/change-password.tsx",
"symbol": "action",
"framework": "react-router"
}{
"path": "src/main/java/com/example/FooController.java",
"symbol": "getFoo",
"framework": "spring"
}______________________________________________________________________
验证真实世界的行为
这些检查是根据实际项目而不是玩具存根进行验证的:
Java~/sias/app/back)
code.inspect_tree在真实的模块树上工作code.find_symbol在真实的春季课堂上工作code.search_text使用真实的Java源代码code.list_endpoints清单框架可检测的Spring REST控制器和GraphQL解析器作为可能的公共入口点code.trace_flow在真实控制器/解析器入口点上工作code.trace_callers适用于Java用例,可以识别可能的公共入口点
验证示例:
RootUserGraphQLController#getUsersByDependency- 追溯到
RootGetUserUseCase#getUsers
Types/React路由器(~/sias/app/front)
code.inspect_tree在真实的路线树上工作code.find_symbol处理路由模块导出code.search_text处理真实路线文件code.list_endpoints库存React Router路由模块loader/action出口作为可能的路线入口点code.trace_flow适用于同一文件路由流提取code.trace_callers适用于相同的文件助手,并将路线导出标记为可能的入口点
验证示例:
app/routes/change-password.tsx#action- 找到呼叫
getUserIdAndTokenFromSession,changeMyPassword,getSession,commitSession,getRoleRoute - 反向追踪
getRoleRoute_handle_payment(...)->payment_service.authorize_payment(...)` - deep tree捕获跨文件调用
AuditService,InventoryService,ProductRepository等等。
验证示例(反向跟踪):
app/services/audit.py#log_action- 反向追踪呼叫者
UserService,OrderService - 递归识别中的入口点
app/api/endpoints.py(get_user,create_order)
PHP(examples/php)
code.inspect_tree在PHP项目树上工作code.find_symbol处理PHP类和方法code.search_text处理PHP源文件code.trace_flow用于PHP服务到存储库的端到端调用code.trace_callers用于PHP影响分析的端到端工作
笔记:
code.list_endpoints在当前示例中,已公开PHP,但未重新验证有用的端点清单
验证示例:
src/Service/UserService.php#UserService::persistUser- 追踪
$this->repository->save($user)到src/Repository/MemoryUserRepository.php#save
Rust(这个仓库)
code.inspect_tree在真实的Rust源代码树上工作code.find_symbol使用Rust类型/函数code.search_text在真实的Rust源代码上工作code.trace_flow当使用正确的限定符号进行查询时,它适用于真正的Rust方法code.trace_callers当使用正确的限定符号进行查询时,它适用于真正的Rust方法
笔记:
code.list_endpoints此存储库上返回零结果,这是所选验证目标的预期结果,因为它不是Rust web应用程序
验证示例:
crates/navigation-engine/src/capabilities/trace_flow.rs#JavaProjectIndex::build- 追踪
Self::new_empty(),index.scan_project(workspace_root),以及index.is_empty() - 反向追踪
JavaProjectIndex::scan_project <- JavaProjectIndex::build
C./examples/csharp)
code.inspect_tree作品code.search_text作品code.find_symbol用于方法查找,例如OrderWorkflowService.ProcessOrderAsynccode.trace_flow在示例应用程序上端到端工作,并返回递归内部调用树code.trace_callers在示例应用程序上端到端工作
去吧(./examples/go)
今天的真实行为 examples/go:
code.inspect_tree作品code.search_text作品code.find_symbol用于方法查找,例如CreateUsercode.trace_flow在示例应用程序上端到端工作,并返回递归内部调用树code.trace_callers在示例应用程序上端到端工作,包括回调/方法值引用和实现反向匹配的接口code.list_endpoints对于当前的Go示例,仍然没有返回有用的入口点库存
______________________________________________________________________
公共语言和框架过滤器
当前公共语言筛选器:
typescriptjavascriptgojavaphppythonrustcsharp
当前公共框架筛选器:
react-routerspring
______________________________________________________________________
响应形状
每个工具都返回相同的顶级信封:
{
"tool": "code.trace_flow",
"status": "ok",
"summary": "Traced 5 callees for 'action' from 'app/routes/change-password.tsx'.",
"data": {},
"errors": [],
"meta": {
"query": {},
"resolvedPath": "app/routes/change-password.tsx",
"truncated": false,
"counts": {},
"detection": {}
}
}状态含义:
ok--请求成功,包括零结果成功partial--请求成功,但被截断/修剪error--请求失败,并包含稳定的错误代码
笔记:
code.trace_flow返回一个根递归树data.rootcode.trace_callers返回直接调用者和递归反向跟踪元数据code.search_text返回紧凑分组的匹配结果,以及topFiles,不是完整的上下文块
______________________________________________________________________
建筑
此存储库有两个主要层:
- TypeScript MCP运行时 (
packages/mcp-server/)
- 验证公众 code.* 合同 - 暴露stdio/stdio遗留传输 - 使反应正常化
- 生锈的发动机 (
crates/navigation-engine/)
- 使用树状图解析源代码 - 主机语言分析器 - 包含内部AST/debug二进制文件 crates/navigation-engine/src/bin/
重要提示:
packages/mcp-server/src/bin/包含运行时入口点(navigation-mcp.ts)- AST检查/调试二进制文件已上线
crates/navigation-engine/src/bin/,不在TypeScript运行时
______________________________________________________________________
贡献/地方发展
关键本地命令:
npm install
npm --workspace @navigation-agent/mcp-server run check
npm --workspace @navigation-agent/mcp-server run test
cargo test --manifest-path crates/navigation-engine/Cargo.toml有用的本地运行时检查:
npx tsx packages/mcp-server/src/bin/navigation-mcp.ts --describe-tools
npx tsx packages/mcp-server/src/bin/navigation-mcp.ts --transport stdio-legacy --workspace-root /path/to/workspace许可证
麻省理工学院
