我构建了一个 35 工具的 MCP 服务器,将我的 AI Token 使用量降低了 95%
Source: Dev.to
上下文密集型 AI 代码探索 – 问题
每当我请 Claude 帮助我处理代码库时,都会出现同样的情况:
- 模型逐个读取文件,为了了解项目结构消耗了 50 K+ 令牌。
- 我在完成任何实际工作之前就已经触碰了 上下文限制 之前。
我的方案 – MCP 仓库上下文服务器
我构建了一个 MCP(模型上下文协议)服务器,它会 一次性 分析代码库,提取 AI 代理所需的全部信息(函数行为、调用图、数据库查询、HTTP 调用,……),并在 2‑4 K 标记 内提供 精准答案,而不是 50 K+。
工作原理
当你让 AI 代理面对一个代码库时,它 没有记忆。每个会话都从头开始,运行 grep,逐个读取文件,并构建心理模型——过程缓慢、成本高且不完整。
对于一个中等规模的 Go 项目(约 100 个文件),典型的探索会消耗:
| 问题 | 标记 |
|---|---|
| 理解有哪些函数 | ≈ 50 K |
多轮 grep → read | – |
| 漏掉跨文件的关系(调用图) | – |
这不是 AI 的问题,而是上下文交付的问题。
Source: …
架构
┌──────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ AI Agent │────▶│ MCP Server │────▶│ Storage Layer │
│ (Claude) │◀────│ (JSON‑RPC/stdio)│◀────│ JSON + SQLite │
└──────────────┘ └──────────────────┘ └─────────────────┘
│
┌───────┼───────┐
▼ ▼ ▼
AST Parser Vector Call Graph
(Go) Search Builder
使其工作的三层
-
AST 解析 – 使用 Go 的
go/ast包提取:- 每个函数签名
- 步骤化行为
- 数据库查询、HTTP 调用、错误处理模式、副作用
- 包装错误、deferred 调用、goroutine 启动(真实的语法树遍历,而非正则)
-
语义向量搜索 – 为每个函数/类型生成 384 维 TF‑IDF 嵌入,存储在 SQLite 中。
- 类似 “find authentication code” 的查询会匹配语义相似的函数。
- 不调用外部 API;嵌入在本地计算。
-
调用图提取 – 构建完整的调用图(直接调用、goroutine、deferred)。
- 为
get_callers、visualize_call_graph(Mermaid 图)等工具提供支持。
- 为
示例工具(共35个)
| 类别 | 工具 | 描述 |
|---|---|---|
| 函数洞察 | get_function_context | 返回行为摘要、执行步骤、数据库查询(实际SQL)、HTTP调用(端点)、错误处理模式、调用者和被调用者。 |
| 副作用搜索 | search_by_side_effect | effect: "db_query" → 所有涉及数据库的函数(包含查询)。适用于 http_call、file_io、logging。 |
| 概念搜索 | search_by_concept | concept: "authentication" → 所有与认证相关的函数,由语义索引提供支持。 |
| 增量更新 | refresh_file | 在约10 ms内重新分析单个更改的文件,更新存储的上下文。 |
| 可视化 | visualize_call_graph | 生成调用者/被调用者的Mermaid流程图,深度可配置。 |
令牌使用比较
| 任务 | 仅代理 (Claude) | MCP 服务器 |
|---|---|---|
| 理解函数 | ~50 K 令牌 | ~4 K 令牌 |
| 查找相关代码 | ~30 K 令牌 | ~2‑3 K 令牌 |
| 编辑文件后(完整重新探索) | ~1‑2 K 令牌 | – |
| 自然语言问答 | 不可能 | ~8 K 令牌 |
结果: 每次查询的令牌使用量降低 10‑25 倍 → 不再出现上下文限制,快速、响应式的 AI 辅助。
实现细节
-
依赖项: 仅
go-git(Git 操作)和go-sqlite3(向量存储)。
所有其他功能(AST 解析、HTTP 处理、JSON)均使用 Go 标准库 → 二进制体积小,供应链简洁,部署极其轻量。 -
向量化: 采用 本地 TF‑IDF 替代 OpenAI 的嵌入 API。
- 对代码搜索(函数名和模式具有辨识度)质量足够。
- 离线 工作,零延迟,无需 API Key,无速率限制,无费用。
-
结果分页: 搜索返回紧凑的引用,每条记录包含一个
detail_ref,AI 可调用该引用以展开详情。- AI 在约 2 K 令牌内获得约 20 条匹配列表,然后仅为实际需要的 2‑3 条获取完整细节。
-
并发: 对不同仓库的分析并行进行;同一仓库的操作串行化。
- 避免全局互斥锁,允许跨服务的并行工作。
-
语言支持: 深度 AST 分析目前 仅限 Go。其他语言使用通用提取器(基本结构,无行为细节)。
- 下一步:为 Python 与 TypeScript 添加 Tree‑Sitter 解析器。
-
传输方式: 目前仅 STDIO。MCP 规范还支持 HTTP/SSE,届时服务器可作为长驻守护进程供多个 AI 会话共享。
- 目前每个 Claude Code 会话都会启动自己的服务器进程。
路线图 – 扩展到组织级智能
关键特性: “当有人访问
/login时会发生什么?”
服务器应追踪完整的流程:
- 请求 → Service A
LoginHandler→ Service B/auth/validate→ Kafkauser.verified→ Service CVerificationHandler。
为实现上述目标,我们需要:
- HTTP 客户端调用检测 – 提取出站 HTTP 调用,推断目标服务/端点。
- 消息总线(Kafka)流向追踪 – 识别生产者/消费者,将主题映射到处理器。
- 跨服务调用图 – 将每个仓库的图合并为全局视图。
- 传输升级 – 实现 HTTP/SSE,以支持持久守护进程。
- 多语言 AST – 为 Python 与 TypeScript 添加 Tree‑Sitter 解析器,以扩大覆盖范围。
TL;DR
- 问题: AI 代理在理解代码库时会消耗数万 token。
- 解决方案: 对仓库进行一次预处理,存储丰富的基于 AST 的元数据,并通过轻量级 MCP 服务器提供访问。
- 结果: 每次查询仅消耗 2‑4 K token,支持离线操作,快速增量更新,并为组织范围的代码智能提供清晰路径。
MCP Repo Context – Recent Enhancements
Overview
MCP 服务器正在演进,旨在为开发者提供更丰富的跨仓库洞察,而无需实际运行代码。以下是新功能、工具和使用说明的简明 markdown 摘要。
1. End‑to‑End Request Tracing
- 静态分析 现在能够解析目标 URL、路由注册(例如
gorilla/mux)以及异步消息生产者/消费者(Kafka、RabbitMQ、NATS)。 - 将这些数据在仓库之间匹配,构建 服务‑到‑服务流图。
- 新工具:
trace_api_flow– 跟踪请求从入口点到所有下游服务的路径。get_service_map– 可视化完整的服务连通图。
分布式追踪的静态分析在代码尚未部署时即可工作,无需 OpenTelemetry 插装。
2. Full Module Dependency Parsing
- 服务器现在能够读取
go.mod文件,处理:- 直接和间接依赖。
replace指令。- 导入分类(标准库 vs. 内部 vs. 外部)。
- 工具:
get_dependency_graph– 输出 Mermaid 图,展示仓库之间的依赖关系。
这为跨仓库功能奠定了基础。
3. Organization‑Wide Semantic Indexing
- 仓库可以在 组织模型 下进行分组。
- 新增
search_org工具,结合:- 关键字搜索。
- 向量搜索。
- 通过 reciprocal rank fusion 实现的混合排序。
示例查询:“find authentication code” → 返回所有 50+ 仓库中的结果,并按相关性排序。
4. One‑Call PR Impact Analysis
不再需要多次调用工具,代理现在可以一次性调用:
analyze_pr_impact– 返回:- 改动的函数行为。
- 受影响的调用者。
- 跨服务影响。
- 依赖层面的影响。
- 风险评估。
预构建的 recipes(针对 PR 影响分析、API 流解释、架构审查三种最常见工作流)均控制在 8 K token 预算内。
5. Extensible Analyzer & Embedder
- 引入 插件接口:
AnalyzerPlugin– 添加语言支持(TypeScript、Python 等)。EmbedderPlugin– 替换嵌入模型。
当前实验:Voyage Code‑3 – 在代码检索上比 OpenAI 提升 16%。
6. REST API & Multi‑Tenant Deployment
- 核心工具现已封装为 REST API,具备:
- GitHub/GitLab webhook 集成,可在 push 事件时自动分析。
- 多租户存储,实现组织隔离。
- 异步分析队列。
目标:一次部署即可服务整个团队,而非每个开发者单独部署。
7. Open‑Source Repository
https://github.com/yashpalsinhc/mcp-repo-context
8. Configuration for Claude Code
在你的 MCP 配置(JSON‑RPC over stdio)中添加以下条目:
{
"mcpServers": {
"repo-context": {
"command": "path/to/mcp-repo-context",
"args": ["--data-dir", "~/.mcp-data"]
}
}
}
9. Typical Claude Code Interaction
> Analyze my local project at /path/to/repo
> What does the CreateUser function do?
> Find all database operations
> Show me the call graph for HandleLogin
10. Takeaway
如果你在构建 AI 驱动的开发者工具,MCP 生态系统值得一试:
- 简单的协议(JSON‑RPC over stdio)。
- 基于 Go 的服务器性能高,易于扩展。
- 将昂贵、缓慢的 AI 探索转化为快速、精准的查询。
我每天都在使用这套服务器——它彻底改变了我与 AI 进行代码交互的方式。