内容
# 导管
**您的代理程序不需要加载500种工具。 它只需要3种。**


Conduit 是一个本地的 MCP(模型上下文协议)网关。 您连接的每个 MCP 服务器都会将其所有工具转储到代理程序的上下文中,但 Conduit 将所有服务器放在一个网关后面,该网关提供 3 种元工具,代理程序按需搜索,从而大大减少了标记使用量。
**实测:每请求工具定义开销减少97%,总标记减少约90%,任务成功率保持不变** (参见 [BENCHMARK.md](BENCHMARK.md))。无论您运行一个还是五个AI工具,在云模型(标记计费)或本地模型(工具定义占用上下文窗口)上,结果都相同。
由于所有内容都位于一个网关后面,因此您还可以为所有客户端设置和验证每个服务器一次,无需在 Cursor、Claude、Codex 等客户端中分别配置相同的服务器。
## 截图
| 服务器 | 活动 | 游乐场 |
|---|---|---|
|  |  |  |
## 为什么
您连接的每个 MCP 服务器都会将其完整的工具列表转储到代理程序的上下文中,并且大多数AI客户端也希望有自己的独立配置。因此,您每次调用都需要支付标记税,并且需要为每个应用程序重新配置相同的服务器。Conduit 解决了这两个问题:
- **约90%的标记减少。** 在延迟发现模式下,网关提供三个元工具(`conduit_status`、`conduit_search_tools`、`conduit_call_tool`),而不是完整的目录。代理程序按需搜索和调用工具,因此上下文保持不变,无论您连接多少个服务器。在基准测试中,每请求工具定义开销减少97%,总标记减少约90%,成功率保持不变([BENCHMARK.md](BENCHMARK.md))。
- **设置一次,随处使用。** 每个客户端都指向一个 Conduit 网关。添加一个服务器并验证一次,它就会出现在所有客户端中。
- **代理程序范围。** 为每个客户端提供它应该看到的服务器。编码代理程序无法调用不在其配置文件中的计费工具。
- **明显的身份验证。** OAuth 或 API 密钥,一次存储在 OS 密钥链中。状态显示在每个服务器上;单击一次即可身份验证。新身份验证的服务器会传播到连接的客户端,无需重启。
- **目录增长。** 从精选列表中添加热门服务器或搜索官方 MCP 注册表,然后通过相同的流程进行身份验证。
- **客户端配置中没有机密。** 客户端只需“与 Conduit 通信”。密钥存储在 OS 密钥链中,并在运行时注入。
- **内置治理。** 切换任何工具的开启或关闭,或切换一个开关以隐藏每个客户端的破坏性工具。每个工具调用都记录在审计日志中,包含每个服务器的延迟和错误率。
- **完整的 MCP,而不仅仅是工具。** 工具、资源和提示都经过代理。
- **测试后再连接。** 内置游乐场通过工具模式生成的表单调用任何工具,因此您可以在不配置客户端的情况下确认服务器工作正常。
## 工作原理
Conduit 有两个部分:
1. **桌面应用程序** (Tauri + React),您在其中管理服务器、配置文件、凭据和连接的客户端。
2. **网关二进制文件** (`conduit-gateway`),每个AI客户端通过 stdio 启动。它读取 Conduit 的注册表,连接到启用的下游服务器(stdio 或远程 HTTP/SSE),并将工具调用路由到正确的服务器。工具名称按服务器命名空间(`stripe__list_charges`),因此它们永远不会冲突。
```
AI 客户端(Cursor / Claude / Codex / Antigravity / ...)
│ stdio MCP
▼
conduit-gateway ──读取──► registry.json + OS 密钥链
│ 路由工具/调用
▼
下游 MCP 服务器(Stripe、Supabase、GitHub、...)
```
注册表是共享的真实来源;网关监视它并实时重建,因此切换和新凭据无需重启客户端即可生效。
## 支持的客户端
Cursor、Claude Desktop、Claude Code、Codex、Google Antigravity、VS Code、Windsurf、Gemini CLI、Cline、Roo Code、Warp、Amazon Q、Kiro、Zed、LM Studio、Jan 和 Goose。Conduit 检测到每个客户端,一键安装网关,并可以导入客户端现有的服务器。
## 配置
延迟发现和破坏性工具策略是全局设置,存储在注册表中,并在应用程序中切换,因此它们适用于所有客户端(默认启用延迟发现)。每个客户端的行为通过网关入口的环境变量设置,您在连接客户端时为您设置:
- `CONDUIT_PROFILE=<name>` - 将此客户端范围限定为一个配置文件的服务器。未设置 = 活动配置文件。
- `CONDUIT_DISCOVERY=lazy|full` - 客户端延迟设置的全局设置的选定覆盖。通常不需要;网关读取注册表默认值。
- `CONDUIT_REGISTRY=<path>` - 覆盖注册表文件位置。默认为稳定的每用户路径,以便打包和解包客户端达成一致。
**同一服务的多个帐户。** 凭据属于服务器,而不是配置文件。要使用,例如,工作和个人 GitHub,请将 GitHub 添加为两个服务器(“GitHub(工作)”,“GitHub(个人)”),每个帐户验证一次,并在每个配置文件中启用一个。范围限定为工作配置文件的客户端(`CONDUIT_PROFILE`)只能看到工作帐户。工具名称按服务器命名空间,因此即使在同一配置文件中,两个也不会冲突。
## 安装
预构建的安装程序发布在 [Releases](https://github.com/tsouth89/conduit/releases) 页面上。Conduit 在 **Windows 和 macOS** 上运行(macOS 构建已签名和 notarized),**Linux** 处于测试阶段。在 Linux 上,优先使用 **`.deb`** (它链接到系统的 WebKitGTK,是最可靠的软件包);**AppImage** 是一个便携式、无需 root 的备用方案,但可能与非常新的或虚拟化的图形栈发生冲突(参见故障排除)。要从源代码运行,请参见下面的开发。
安装程序尚未进行代码签名。在 **Windows** 上,SmartScreen 可能会显示“Windows 保护了您的电脑”,请单击 **更多信息 → 允许运行**。在 **macOS** 上,Gatekeeper 可能会说应用程序“已损坏”或无法打开;右键单击应用程序并选择 **打开**,或运行 `xattr -dr com.apple.quarantine /Applications/Conduit.app`。有关签名计划,请参见 [docs/SIGNING.md](docs/SIGNING.md)。
**在 Linux 上更新和卸载。** 没有图形卸载程序,请使用终端。软件包名称为 `conduit`。
```bash
# 更新到较新版本:只需安装新的 .deb,它会就地升级。
sudo apt install ./Conduit_0.3.10_amd64.deb
# 卸载(保留配置 + 保存的机密)。
sudo apt remove conduit
# 卸载并清除应用程序配置(机密存储在钥匙串中)。
sudo apt purge conduit
```
如果您使用了 **AppImage**,无需卸载,只需删除 `.AppImage` 文件即可。(在 Windows 上使用添加或删除程序;在 macOS 上,将 **Conduit.app** 拖到回收站。)
## 开发
需要 Node 和 Rust 工具链。
```bash
npm install
npm run tauri dev # 运行桌面应用程序
```
其他常用命令:
```bash
cargo test --manifest-path src-tauri/Cargo.toml # Rust 单元测试(库 + 网关)
# 构建网关二进制文件。在从源代码运行时需要:AI 客户端直接启动
# 此二进制文件,因此连接的客户端报告“未找到”。
# (打包版本包含它,因此安装的用户永远不会遇到这种情况。)
npm run build:gateway
# 使用捆绑的网关构建 Windows 安装程序(NSIS)。
npm run tauri:bundle
```
前端使用 `npx tsc --noEmit` 进行类型检查。
## 故障排除
- **OAuth 打开空白页(macOS)。** OAuth 流重定向回本地 `http://127.0.0.1` 回调。Safari 可以无声地阻止此重定向,因此登录页面呈现为空白。请将 **Chrome 或 Brave** 设置为默认浏览器(或粘贴访问令牌)。每次完成一个尝试,放弃的尝试会在几分钟内保留回调端口,并可能导致下一次尝试出现“状态不匹配”的错误。
- **客户端报告网关“未找到”(从源代码运行)。** 构建网关二进制文件一次:`cd src-tauri && cargo build --bin conduit-gateway`。`npm run tauri dev` 构建应用程序但不构建此单独的二进制文件;打包版本包含它,因此安装的用户永远不会遇到这种情况。
- **macOS 密钥链提示重复 / “无法从密钥链读取机密”在开发中。** 未签名的开发版本获得不稳定的代码签名标识,因此密钥链会重复提示或拒绝读取。签名的版本修复了这个问题;它是一个仅限开发的产物。
- **Linux 上的“无法读取/存储机密”。** 机密存储使用 freedesktop Secret Service(libsecret),由 GNOME Keyring、KWallet 或类似服务提供。无头框或没有运行密钥环守护进程的会话没有存储机密的地方。在桌面会话中运行 Conduit,或安装和解锁密钥环(例如 `gnome-keyring`)。
- **第一次运行网关时出现 macOS 密钥链提示。** 当客户端启动网关时,它会读取保存的密钥,macOS 会询问密钥链访问权限(“Conduit 想要使用 ...”)。单击 **始终允许** 一次,它就不会再询问。(应用程序和网关目前是单独的签名二进制文件;未来版本将共享密钥链访问权限,因此此提示会消失。)
- **VS Code:Conduit 服务器不会自动启动。** VS Code 可能需要您在第一次单击 **启动服务器** 在 Conduit MCP 条目上,这是 VS Code 自己的 MCP 处理,不是 Conduit。之后,它会在自己的情况下重新连接。
- **Linux:AppImage 无法启动 / 无窗口(`EGL_BAD_PARAMETER`)。** AppImage 捆绑了自己的库,这些库可能与非常新的或虚拟化的图形栈(例如 VMware 的 `vmwgfx` 驱动程序)发生冲突,其中默认 EGL 显示失败)。 **改用 `.deb`** ,它链接到系统的 WebKitGTK,是更可靠的 Linux 软件包。如果必须使用 AppImage,请尝试 `EGL_PLATFORM=surfaceless ./Conduit_*.AppImage`,或在虚拟机中启用 3D 加速。(这是打包/图形问题,而不是 Conduit 错误;`.deb` 在 AppImage 无法工作的情况下有效。)
## 状态
Conduit 处于积极的开发中。网关、延迟发现、代理范围、OAuth/密钥身份验证与实时传播、目录、客户端导入/迁移、工具和破坏性治理、审计日志与延迟/错误统计、资源 + 提示代理以及工具游乐场都已正常运行。有关已完成和计划的内容,请参见 [docs/ROADMAP.md](docs/ROADMAP.md)。
## 已知问题
- **仅限 Linux,glib `VariantStrIter` 健全性([RUSTSEC-2024-0429](https://rustsec.org/advisories/RUSTSEC-2024-0429))。** Tauri 的 Linux webview 堆栈引入了 `glib` 0.18 传递性(`wry → webkit2gtk → gtk 0.18 → glib 0.18`)。修复程序仅存在于 `glib` 0.20+ 中,而 gtk-0.18 绑定线,即 Tauri 2 在 Linux 上使用的绑定线,硬性固定 `glib = "^0.18"`,因此无法选择修补版本而无需移动整个 webview 堆栈。错误是健全性/空指针取消引用崩溃(不是远程代码执行),仅限于 webview 绑定层(Conduit 永远不会调用 `VariantStrIter`),并且不影响 Windows 或 macOS 版本。我们正在跟踪上游移动到 glib-0.20 堆栈,并在 Linux 崩溃出现之前应用 `[patch.crates-io]` 补丁。
## 许可证
[MIT](LICENSE)。网关和本地管理器在开源模型下免费且开源;计划的团队/企业功能(共享/托管网关、RBAC/SSO、策略、审计导出、机密保险箱集成)是一个单独的付费层。
连接信息
猜你喜欢
暂无推荐服务器