我构建了一个能理解你的代码并节省 70% Tokens 的小型 MCP
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 # 查询前重新建立索引
)
每个结果包含:
- 文件路径
- 语言
- 代码内容
- 起始/结束行号
- 相似度得分
常见使用场景
- 查找 X 的实际实现 – 当仓库中有多个同名或相似的函数时。
- 显示所有涉及 JWT 刷新的认证相关逻辑。
- 定位与堆栈跟踪片段匹配的代码。
由于索引是增量保持最新的,你可以在重构、运行测试后立即使用代理针对新的代码布局进行查询,而无需重新运行大型离线任务。
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_modules、target、dist 和已 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 倍更强上下文感知的场景。
如果你尝试了它,请在评论中告诉我你使用的技术栈——我很想在后续文章中展示一些真实案例。