我构建了一个能理解你的代码并节省 70% Tokens 的小型 MCP

发布: (2026年2月22日 GMT+8 12:11)
7 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的正文内容,我将把它翻译成简体中文并保持原有的格式、Markdown 语法以及技术术语不变。谢谢!

Introduction

每个 coding‑agent 演示看起来都很神奇…… 直到你把它指向真实的代码库。那时它要么:

  • 在上下文窗口上卡住
  • 对陈旧代码产生幻觉
  • 变得如此缓慢,以至于你不如直接 grep

在使用大型 Rust、Python 和 TypeScript 仓库构建 AI 工作流时,我遇到了这道墙,于是为自己的技术栈打造了真正想要的东西:一个超轻量、基于 AST 的嵌入式 MCP,直接在你的代码库上工作。它叫 cocoindex‑code,已经帮我节省了约 70 % 的 token 和大量等待时间。

如果你在使用 Claude、Codex、Cursor,或任何支持 MCP 的 coding agent,这篇文章适合你。

为什么 cocoindex‑code 与众不同

典型的 “code RAG” 设置感觉像是基础设施项目:启动向量数据库,编写 ETL 流程,处理模式漂移,调优分块,维护工作进程,然后祈祷一切保持同步。

cocoindex‑code 采用相反的思路:

功能描述
嵌入式 MCP作为本地 MCP 服务器运行——无需单独的数据库来运行或维护。
基于 AST 的索引使用 Tree‑sitter 理解代码结构,提供有意义的块(函数、类、代码块),而不是随机的 200 行窗口。
增量更新基于 Rust 实现的 CocoIndex 引擎;仅重新索引已更改的文件。
多语言支持Python、JavaScript/TypeScript、Rust、Go、Java、C/C++、C#、SQL、Shell 等。
默认本地嵌入通过 SentenceTransformers 本地使用 sentence‑transformers/all‑MiniLM‑L6‑v2
可选增强功能可替换为任何 LiteLLM 支持的嵌入模型(OpenAI、Gemini、Mistral、Voyage for code、Ollama 等)。

目标:你向代理提出问题,它精准地检索所需代码,而不会让上下文窗口爆炸。

安装

首先,如果您还没有 uv,请先安装它:

curl -LsSf https://astral.sh/uv/install.sh | sh

将 MCP 添加到您偏好的代理(Claude、Codex 等):

claude mcp add cocoindex-code \
  -- uvx --prerelease=explicit --with \
  "cocoindex>=1.0.0a16" \
  cocoindex-code@latest
codex mcp add cocoindex-code \
  -- uvx --prerelease=explicit --with \
  "cocoindex>=1.0.0a16" \
  cocoindex-code@latest

或者交互式操作:

opencode mcp add
# MCP server name: cocoindex-code
# type: local
# command:
# uvx --prerelease=explicit --with cocoindex>=1.0.0a16 cocoindex-code@latest

就这样。将您的代理指向您的仓库,您现在就拥有对代码库的语义搜索功能,作为 MCP 工具使用。

使用搜索工具

一旦连接成功,MCP 会公开一个 search 工具:

search(
    query: str,                # 自然语言或代码片段
    limit: int = 10,           # 1‑100
    offset: int = 0,           # 分页
    refresh_index: bool = True  # 查询前重新建立索引
)

每个结果包含:

  • 文件路径
  • 语言
  • 代码内容
  • 起始/结束行号
  • 相似度得分

常见使用场景

  1. 查找 X 的实际实现 – 当仓库中有多个同名或相似的函数时。
  2. 显示所有涉及 JWT 刷新的认证相关逻辑。
  3. 定位与堆栈跟踪片段匹配的代码。

由于索引是增量保持最新的,你可以在重构、运行测试后立即使用代理针对新的代码布局进行查询,而无需重新运行大型离线任务。

Language matrix

cocoindex‑code ships with support for:

C, C++, C#, CSS/SCSS, Go, HTML, Java, JavaScript/TypeScript/TSX,
JSON/YAML/TOML, Kotlin, Markdown/MDX, Pascal, PHP, Python, R,
Ruby, Rust, Scala, Solidity, SQL, Swift, XML

它还会自动排除噪声目录,如 __pycache__node_modulestargetdist 和已 vendored 的依赖。

根路径会通过 .cocoindex_code/.git/ 自动发现,或回退到当前工作目录。实际上,你通常不需要设置任何环境变量。

嵌入模型

开箱即用时,项目使用本地的 SentenceTransformers 模型:

  • 默认: sbert/sentence-transformers/all-MiniLM-L6-v2

无需 API 密钥,无计费惊喜,完全本地运行。

如果需要对代码密集型仓库进行更强的语义理解,可将 COCOINDEX_CODE_EMBEDDING_MODEL 设置为任意 LiteLLM 支持的嵌入模型,例如:

  • Ollama(本地)
  • OpenAI / Azure OpenAI
  • Gemini
  • Mistral
  • Voyage(代码优化)
  • Cohere
  • AWS Bedrock
  • Nebius

先使用免费的本地模型,只有在真正需要时再升级。

高级用法

在底层,cocoindex‑code 使用 CocoIndex,这是一款基于 Rust 的索引引擎,专为大规模、增量式数据工作流而构建。对于更大的组织部署,您可以:

  • 在团队成员之间共享索引,而不是在每台机器上重新索引。
  • 使用分支去重等功能,避免重复工作。
  • 将其作为更大数据/索引平台的一部分运行,基于 CocoIndex 构建。

如何帮助我们

  • 给仓库加星: cocoindex-code 和底层的 cocoindex
  • 在你的主要(混乱的)项目中尝试,而不仅仅是玩具示例。
  • 提交 issue 或 pull request,提供反馈、错误或想法。

我尤其感兴趣的是:

  • 那些现有的“代码 RAG”工具让你失望的仓库。
  • 你希望获得更好支持的语言或框架。
  • 你希望你的编码代理在工作流中拥有 10 倍更强上下文感知的场景。

如果你尝试了它,请在评论中告诉我你使用的技术栈——我很想在后续文章中展示一些真实案例。

0 浏览
Back to Blog

相关文章

阅读更多 »