我构建了一个 35 工具的 MCP 服务器,将我的 AI Token 使用量降低了 95%

发布: (2026年2月26日 GMT+8 15:36)
11 分钟阅读
原文: Dev.to

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

使其工作的三层

  1. AST 解析 – 使用 Go 的 go/ast 包提取:

    • 每个函数签名
    • 步骤化行为
    • 数据库查询、HTTP 调用、错误处理模式、副作用
    • 包装错误、deferred 调用、goroutine 启动(真实的语法树遍历,而非正则)
  2. 语义向量搜索 – 为每个函数/类型生成 384 维 TF‑IDF 嵌入,存储在 SQLite 中。

    • 类似 “find authentication code” 的查询会匹配语义相似的函数。
    • 不调用外部 API;嵌入在本地计算。
  3. 调用图提取 – 构建完整的调用图(直接调用、goroutine、deferred)。

    • get_callersvisualize_call_graph(Mermaid 图)等工具提供支持。

示例工具(共35个)

类别工具描述
函数洞察get_function_context返回行为摘要、执行步骤、数据库查询(实际SQL)、HTTP调用(端点)、错误处理模式、调用者和被调用者。
副作用搜索search_by_side_effecteffect: "db_query" → 所有涉及数据库的函数(包含查询)。适用于 http_callfile_iologging
概念搜索search_by_conceptconcept: "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 → Kafka user.verified → Service C VerificationHandler

为实现上述目标,我们需要:

  1. HTTP 客户端调用检测 – 提取出站 HTTP 调用,推断目标服务/端点。
  2. 消息总线(Kafka)流向追踪 – 识别生产者/消费者,将主题映射到处理器。
  3. 跨服务调用图 – 将每个仓库的图合并为全局视图。
  4. 传输升级 – 实现 HTTP/SSE,以支持持久守护进程。
  5. 多语言 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 进行代码交互的方式。

0 浏览
Back to Blog

相关文章

阅读更多 »