内容
# mcp-injector
克劳德代码按需读取原始文件,迅速耗尽您的上下文窗口和预算。在大型代码库中,这导致响应速度缓慢和 API 成本高昂。
mcp-injector 解决了这个问题。它作为后台守护进程运行,将您的整个存储库预索引到本地 SQLite 目录中,并在每次查询时为克劳德提供整个代码库的压缩快照,成本约为正常令牌成本的 41-89%。
我构建了这个工具,因为我的团队的克劳德 API 账单达到每月 400 美元,在一个包含 50 万行代码的 Spring Boot 多模块仓库中。安装 mcp-injector 后,相同的流程成本约为每月 80 美元。差异在于 AST 正文折叠(剥离函数体,保留签名)和规范确定性(每次运行的字节相同输出,因此 Anthropic 的 KV 缓存被触发而不是未命中)。
无云。无遥测。完全在您的机器上运行。
## 现实世界代码库上下文基准
估计 AST 代码压缩对大型开源存储库的影响(按每百万输入令牌 3.00 美元计算,适用于克劳德 3.5 Sonnet):
| 存储库 | 总文件数 | 原始上下文令牌 | 压缩上下文令牌 | 令牌减少 | 节省成本/运行 |
| --- | --- | --- | --- | --- | --- |
| **Django** | 2,359 | 5,554,607 | 596,752 | **89.3%** | **10.99 美元** |
| **Tokio** | 789 | 1,597,813 | 444,164 | **72.2%** | **3.11 美元** |
| **Gin** | 99 | 197,300 | 47,718 | **75.8%** | **0.39 美元** |
* 数字可复制。 在任何公共存储库上运行开源基准工具:
**[mcp-benchmark 存储库](https://github.com/foldwork-dev/mcp-benchmark)**
## 工具
### `get_project_map`
返回工作空间的压缩结构概述。函数体被折叠并替换为占位符以减少令牌使用。
- `tier`(整数,可选):要应用的压缩层级(默认:2)。
- `unfolded_files`(字符串数组,可选):工作空间相对路径或 glob 模式,用于提供完整解析的文件。
### `injector_retrieve`
从本地缓存中检索文件的完整未压缩源代码。
- `path`(字符串,必填):要检索的文件的工作空间相对路径。
- `retrievalKey`(字符串,可选):先前压缩有效载体中返回的 SHA-256 检索密钥。
- `start_line`(整数,可选):1 索引起始行,用于范围检索。
- `end_line`(整数,可选):1 索引结束行,用于范围检索。
### `injector_search`
对本地 SQLite 目录中的符号进行 BM25 排名全文搜索。
- `query`(字符串,必填):FTS5 查询字符串(裸术语,“短语”,前缀*)。
- `limit`(整数,可选):最大结果数(默认:20)。
### `injector_stats`
返回索引状态、当前压缩比率、已索引文件总数和缓存命中率。
### `injector_sync`
等待所有待处理的文件索引更新完成。 在写入文件后调用此命令,然后调用 `get_project_map` 之前。
## 快速安装
在本地安装守护进程并配置您的 IDE:
```bash
curl -fsSL https://foldwork.dev/install | sh
```
* 自动配置 **克劳德桌面版**、**Cursor IDE** 和 **VS Code**。
## 入门指南
### 步骤 1:检查您的项目是否有资格享受免费套餐
在您的项目上运行基准 CLI 以查看令牌节省和行数:
```bash
mcp-benchmark ./your-project
```
如果您的项目少于 50,000 行,mcp-injector 完全免费。基准输出显示您的确切行数。
### 步骤 2:安装守护进程
```bash
curl -fsSL https://foldwork.dev/install | sh
```
安装程序自动检测克劳德桌面版、Cursor、VS Code 和 Devin Desktop 并自动写入 MCP 配置。您应该看到类似的输出:
```text
* mcp-injector v0.2.0 已安装到 /usr/local/bin/mcp-injector
* 克劳德桌面版已配置
* Cursor 已配置
重启您的 IDE,mcp-injector 将生效。
```
### 步骤 3:重启您的 IDE
MCP 服务器在您的 IDE 启动时自动启动。无需单独的守护进程。
### 步骤 4:验证它是否正在工作
在克劳德代码或 Cursor 中,询问克劳德:
> “使用 get_project_map 显示我这个项目的结构”
克劳德将调用 mcp-injector 工具并返回您整个代码库的压缩映射。如果您看到模块名称、入口点和依赖信息 - 则它正在工作。
### 步骤 5:在需要时获取完整源代码
当克劳德需要查看压缩函数的完整实现时,它会自动调用 `injector_retrieve`。您也可以显式触发此操作:
> “显示 UserService.java 的完整实现”
克劳德将从本地缓存中获取未压缩的源代码。
### 步骤 6:检查您的节省
```bash
injector_stats
```
或直接询问克劳德: “调用 injector_stats 并告诉我当前的令牌节省。”
## 高级用法
### 检查特定文件的未压缩内容
有时您需要克劳德查看文件的确切实现,同时保持其余文件压缩。使用 `unfolded_files` 参数:
在您的 MCP 调用中或询问克劳德:
> “获取项目映射,但显示 src/auth/handler.go 文件的完整解析”
这会将 `"unfolded_files": ["src/auth/handler.go"]` 传递给 get_project_map。该文件以原始形式提供;其他文件保持压缩。
通配符模式也适用:
- `"**/*_test.go"` - 所有测试文件未压缩
- `"src/auth/*.go"` - 目录中的所有文件未压缩
### 切换分支
mcp-injector 在首次运行安装 `post-checkout` git 钩子。分支切换会自动触发完整重新索引。您将在守护进程日志中看到:
```text
[mcp-injector] 分支切换到 feature/auth-refactor,重新索引...
[mcp-injector] 重新索引完成,4.2s(索引 47,293 行)
```
### 安全第一:零泄漏保证
企业安全团队通常会阻止 AI 编码工具,因为开发人员在上下文窗口中意外泄漏敏感凭证。
mcp-injector 在本地解决了这个问题。守护进程包含一个内置的香农熵过滤器,实时分析所有 AST 字符串和注释。如果检测到高熵字符串(如 AWS 访问密钥、SSH 私钥或数据库密码),则在它们离开您的机器之前动态将其编辑为 `[REDACTED: high entropy]`。您的 API 凭证永远不会发送给 Anthropic。
如果您的代码库中有硬编码的 API 密钥或 AWS 凭证,`get_project_map` 响应将包括:
```json
"secrets_redacted": 2,
"files_with_redactions": ["config/db.go", "scripts/deploy.sh"]
```
实际值被替换为 `[REDACTED: high entropy]`。变量名被保留,因此克劳德仍然理解代码结构。
### 手动 MCP 配置
如果自动安装程序未检测到您的 IDE,请手动将以下内容添加到您的 MCP 配置:
```json
{
"mcpServers": {
"mcp-injector": {
"command": "/usr/local/bin/mcp-injector",
"env": {
"MCP_WORKSPACE": "${workspaceFolder}"
}
}
}
}
```
配置文件位置:
- 克劳德桌面版(Mac):`~/Library/Application Support/Claude/claude_desktop_config.json`
- 克劳德桌面版(Windows):`%APPDATA%\Claude\claude_desktop_config.json`
- 克劳德桌面版(Linux):`~/.config/Claude/claude_desktop_config.json`
- Cursor:`~/.cursor/mcp.json`
- VS Code:`.vscode/mcp.json`
- Devin Desktop:`~/.devin/mcp.json`
## 工作原理
* **持久本地守护进程:** 将您的存储库结构索引到高性能 WAL 模式 SQLite 数据库目录中。
* **智能文件监视器:** 通过 OS 通知钩子(`inotify`/`FSEvents`)和本地 `git post-checkout` / `post-merge` 触发器增量监视文件。
* **分支感知重新索引:** 在启动时安装 `post-checkout` git 钩子。切换分支会触发自动工作空间重新索引。`get_project_map` 始终反映您的当前分支,包括未提交的更改。
* **规范输出确定性:** 确保跨运行的字节相同输出,最大化克劳德的 **KV 提示缓存**命中率。
* **压缩-缓存-检索(CCR):** 采用无损 AST 压缩。LLM 获取高级别大纲并调用 `injector_retrieve` 按需获取原始文件正文。
* **100% 本地和离线:** 完全在您的本地机器上运行,保持您的知识产权私密和安全。
**支持:** Go、Python、TypeScript、JavaScript、Java、C++、Rust。
## 定价层级
* **免费层级:** 少于 50,000 总源代码行的工作区(所有工具和功能均完全激活)。
* **专业层级($12/月或 $99/年):** 解锁无限工作区大小和高速增量差异索引。
**[在 foldwork.dev 上激活专业版](https://foldwork.dev/#pricing)**
## 暴露的 MCP 工具
* **`get_project_map`** - 生成模块导出、结构和内部依赖的层次结构大纲。
* `unfolded_files` 参数:传递特定文件路径或 glob 模式,以接收未压缩的文件,同时保持其他文件折叠。
* `git_context`:始终在响应中包含当前分支、更改的文件和最近的提交。
* `secrets_redacted`:自动编辑的凭证计数,在发送到克劳德之前。
示例调用:
```json
{
"tool": "get_project_map",
"arguments": {
"tier": 3,
"unfolded_files": ["src/auth/handler.go", "**/*_test.go"]
}
}
```
* **`injector_retrieve`** - 从本地缓存中检索任何压缩符号的原始源代码。支持 `start_line` 和 `end_line` 参数,用于手术片段提取。
* **`injector_search`** - 索引符号上的 BM25 全文搜索。返回行范围、符号类型和上下文片段,以便您跳过冗余的文件检索。
* **`injector_stats`** - 可视化索引状态、当前令牌节省和 CCR 缓存命中率。
* **`injector_sync`** - 同步等待守护进程完成待处理的文件系统编辑的索引。返回已重新索引的确切文件列表以确认更改。
### 检查您的投资回报率(节省仪表盘)
您可以在任何时候运行 `mcp-injector status`。此 CLI 仪表盘直观地证明了您的确切令牌节省和估计节省的美元,通过将您的原始代码库令牌与 AST 压缩令牌进行比较。
## 安全
mcp-injector 在您的代码到达克劳德的上下文窗口之前自动编辑敏感信息:
- AWS 访问密钥、GitHub PAT、Stripe 机密密钥
- JWT 令牌和 bearer 令牌
- 通过香农熵分析检测到的高熵字符串
- 私钥头 (`-----BEGIN RSA PRIVATE KEY-----`)
- **空气隔离就绪:** 专业许可验证使用严格离线的 Ed25519 加密。守护进程从不进行外部网络请求,甚至用于验证您的订阅。
编辑内容被替换为 `[REDACTED BY MCP-INJECTOR]`。编辑计数包含在 `get_project_map` 响应中,因此您始终知道保护了什么。
您的代码永远不会离开您的机器。编辑在压缩前在本地发生,并且始终开启 - 它无法被禁用。
## 卸载
要完全删除 mcp-injector:
```bash
# 删除二进制文件
sudo rm /usr/local/bin/mcp-injector
# 删除索引缓存和日志
rm -rf ~/.mcp-injector/
# 从 IDE MCP 配置中删除(手动编辑):
# 克劳德桌面版(Linux):~/.config/Claude/claude_desktop_config.json
# 克劳德桌面版(macOS):~/Library/Application Support/Claude/claude_desktop_config.json
# Cursor:~/.cursor/mcp.json
# VS Code:.vscode/mcp.json
# Devin Desktop:~/.devin/mcp.json
# (从 mcpServers 中删除“mcp-injector”条目)
```
## 删除内容
mcp-injector 在您的代码到达克劳德之前自动删除以下内容:
| 模式 | 示例匹配 |
| --- | --- |
| AWS 访问密钥 ID | `AKIAIOSFODNN7EXAMPLE` |
| GitHub PAT(ghp_,ghs_) | `ghp_aBcDeFg...` |
| Stripe 机密密钥 | `sk_live_abc...` / `sk_test_abc...` |
| JWT 令牌 | `eyJ...` |
| PEM 私钥头 | `-----BEGIN RSA PRIVATE KEY-----` |
| 通用高熵字符串 >20 个字符 | 通过香农熵检测 |
| 密码/机密/令牌赋值 | `password = "abc123"` |
删除的值被替换为 `[REDACTED BY MCP-INJECTOR]`。文件路径和变量 **名称** 永不被删除 - 仅删除值。
## 许可证
商业。免费层级可用。源代码不公开。
支持联系方式:[foldwork@proton.me](mailto:foldwork@proton.me)