内容
<div align="center">
<img src="docs/logo.svg" alt="Conduit" width="84" />
# Conduit
**一款适用于所有 MCP 服务器的本地网关,所有 AI 客户端共享,令牌使用量大大减少。**
[](https://github.com/tsouth89/conduit/actions/workflows/ci.yml)
[](https://github.com/tsouth89/conduit/releases)
[](LICENSE)
[](https://discord.gg/Xsn27MxdBA)
</div>


Conduit 是一款本地 MCP(模型上下文协议)网关。你只需设置和验证一次每个服务器,所有 AI 客户端(Claude、Cursor、Codex 等)都指向 Conduit 并共享它们,从而避免在每个应用中单独配置相同的服务器。
它还解决了这些服务器为你的代理带来的成本问题。每个你连接的 MCP 服务器都会在每次请求时将所有工具放入上下文中,而且累计速度很快:仅 3 个服务器(62 个工具)就需要大约 24,000 个令牌来定义,而你甚至还没提出任何问题。Conduit 会宣传 3 个元工具,代理按需搜索,从而大大减少令牌使用量。
**在前沿模型上测量:与任务成功率相同的条件下,令牌使用量减少高达 91%**(按正确回答评分,而非仅限于完成度),每次请求的工具定义开销减少 97%,在包含 415 个工具的真实目录中,这一数字更是高达 99.6%(参见 [BENCHMARK.md](BENCHMARK.md))。无论你运行一个还是五个 AI 工具,在云模型(令牌计费)还是本地模型(工具定义占用上下文窗口)上,这一优势都保持不变。
## 截图
| 服务器 | 目录 | 活动 |
|---|---|---|
|  |  |  |
## 为什么使用 Conduit
每个 MCP 服务器在每次请求时都会将其完整的工具列表放入代理的上下文中,而大多数 AI 客户端也希望有其自己的独立配置。因此,你每次调用都需要支付令牌费用,并在每个应用中重新配置相同的服务器。Conduit 解决了这两个问题。
### 更少的令牌
- **大约 90% 的令牌减少**。在惰性发现模式下,网关会宣传三个元工具(`conduit_status`、`conduit_search_tools`、`conduit_call_tool`),而不是整个目录,代理按需搜索和调用,从而保持上下文扁平,无论连接多少服务器。基准测试中,在任务成功率相同的情况下,令牌使用量减少高达 91%,每次请求的工具定义开销减少 97%,在包含 415 个工具的真实目录中,这一数字更是高达 99.6%(参见 [BENCHMARK.md](BENCHMARK.md))。询问 `conduit_status` 以了解迄今为止的节省。
- **按意图搜索,而非仅限关键词**。`conduit_search_tools` 按相关性在所有服务器中排名,并且没有工具被隐藏,任何服务器的完整工具集只需一次调用即可访问。 可选的语义重新排序(本地或托管的嵌入式端点)会浮现类似“充值卡”的同义查询;默认为纯粹的词汇搜索。
### 一次设置,所有客户端
- **设置一次,随处使用**。每个客户端都指向一个网关。添加并验证一个服务器只需一次,它就会出现在所有客户端中。
- **从任何客户端的文档中复制粘贴**。从 MCP 服务器的安装说明中复制服务器配置片段(Cursor JSON、Codex TOML、VS Code、Zed、Claude Code CLI 或其他支持的客户端),然后粘贴到“添加服务器”对话框中。Conduit 会自动检测格式并预填充字段,包括环境变量值。
- **每个代理的范围**。为每个客户端提供它应该看到的服务器。编码代理实际上无法调用其配置文件中未启用的计费工具。
- **明显的身份验证**。OAuth 或 API 密钥存储在 OS 密钥链中,一次单击每个服务器。新验证的服务器会传播到连接的客户端,无需重启。
- **客户端配置中没有密钥**。客户端只会说“与 Conduit 通信”。密钥存储在 OS 密钥链中,并在运行时注入。
- **可扩展的目录**。从 40 多个精选服务器中添加,或在官方 MCP 注册表中搜索,然后通过相同的流程进行身份验证。
### 安全,因为网关在路径上
- **工具完整性(防拉毯式攻击 + 毒药检测)**。Conduit 在连接服务器时为每个工具添加指纹,如果定义稍后更改或服务器静默添加工具(“拉毯式攻击”),或者描述或模式包含类似注入的内容(“工具中毒”),则会标记它。检测仅限于默认开启,完全本地([详情](docs/specs/mcp-integrity.md))。
- **内容防御(防代理劫持)**。当工具 *返回* 未受信任的内容(Sentry 错误、网页、问题正文)并带有类似注入的指令时,Conduit 会标记它并将其标记为外部数据,而不是指令,这是间接提示注入的隔离。永不阻止,默认开启([详情](docs/specs/content-defense.md))。
- **治理和审计**。切换任何工具的开启或关闭,或用一个开关隐藏每个客户端的破坏性工具。每次调用都记录,包括每个服务器的延迟和错误率。
### 控制和额外功能
- **代理控制,根据您的意愿**。可选地让代理通过网关启用或禁用服务器(`conduit_enable_server` / `conduit_disable_server`),并在应用程序中实时反映。默认为关闭,破坏性工具的开关始终由您控制。
- **完整的 MCP,而不仅仅是工具**。工具、资源和提示都经过代理。
- **在连接之前进行测试**。内置的游乐场调用任何工具,并使用从其模式生成的表单,以便在配置客户端之前确认服务器正常工作。
- **一键诊断**。将您的版本、操作系统、服务器摘要(无密钥)和最近的网关日志捆绑在一起,以便粘贴到错误报告中。
## Conduit 的工作原理
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、...)
```
注册表是共享的真实来源;网关监视它并实时重建,因此切换和新的凭证立即生效,而无需重启客户端。如果连接的服务器在会话期间更改其自己的工具集,Conduit 会捕获并刷新。
## 支持的客户端
Conduit 自动检测了 **20 个 AI 客户端**,一键安装网关,并可以导入客户端现有的服务器。它为您编写下面显示的配置文件,因此您永远不需要手动编辑这些。
| 客户端 | 配置文件 | 格式 |
| --- | --- | --- |
| Claude Desktop | `<config>/Claude/claude_desktop_config.json` | JSON (`mcpServers`) |
| Claude Code | `~/.claude.json` | JSON (`mcpServers`) |
| Cursor | `~/.cursor/mcp.json` | JSON (`mcpServers`) |
| VS Code | `<config>/Code/User/mcp.json` | JSON (`servers`) |
| Windsurf | `~/.codeium/windsurf/mcp_config.json` | JSON (`mcpServers`) |
| Codex | `~/.codex/config.toml` | TOML (`mcp_servers`) |
| Continue | `~/.continue/config.yaml` | YAML (`mcpServers`) |
| Antigravity | `~/.gemini/config/mcp_config.json` | JSON (`mcpServers`) |
| Gemini CLI | `~/.gemini/settings.json` | JSON (`mcpServers`) |
| Cline | `<config>/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json` | JSON (`mcpServers`) |
| Roo Code | `<config>/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json` | JSON (`mcpServers`) |
| Warp | `~/.warp/.mcp.json` | JSON (`mcpServers`) |
| Amazon Q | `~/.aws/amazonq/mcp.json` | JSON (`mcpServers`) |
| Kiro | `~/.kiro/settings/mcp.json` | JSON (`mcpServers`) |
| Zed | `~/.config/zed/settings.json` | JSON (`context_servers`) |
| LM Studio | `~/.lmstudio/mcp.json` | JSON (`mcpServers`) |
| Jan | `<data>/Jan/data/mcp_config.json` | JSON (`mcpServers`) |
| BoltAI | `~/.boltai/mcp.json` | JSON (`mcpServers`) |
| Goose | `~/.config/goose/config.yaml` | YAML (`extensions`) |
| Hermes | `~/.hermes/config.yaml` | YAML (`mcp_servers`) |
`<config>` 是您的操作系统应用程序配置目录(Windows 上为 `%APPDATA%`,macOS 上为 `~/Library/Application Support`,Linux 上为 `~/.config`);`<data>` 是数据目录(Linux 上为 `~/.local/share`,其他平台与 `<config>` 相同)。Zed 和 Goose 的路径因操作系统而异;Conduit 会自动解析正确的位置。
### Codex 设置指南
适用于 Codex 已经创建了 `~/.codex/` 目录的情况。
1. 在 Conduit 中,添加或启用您希望 Codex 使用的 MCP 服务器。
2. 打开 **客户端**,选择 **Codex**,可选地选择一个配置文件,然后单击 **连接到 Conduit**。
3. Conduit 更新 `~/.codex/config.toml` 以包含单个 `[mcp_servers.conduit]` 条目。该条目运行已解析的 `conduit-gateway` 二进制文件;现有的 Codex TOML 键和其他 MCP 服务器均被保留,并且在写入之前会备份现有配置。
4. 启动新的 Codex 会话,以便它重新读取配置。在 Conduit 中,Codex 行更改为 **已连接到 Conduit**;在 Codex 中,通过一个 `conduit` MCP 服务器提供 Conduit 管理的工具。启用惰性发现后,Codex 获取 Conduit 的紧凑搜索工具,而不是一开始就获取所有下游工具。
注意事项:在从源代码运行 Conduit 时,请先使用 `npm run build:gateway` 构建网关二进制文件。打包发行版中已包含它,因此安装的用户无需此步骤,但 Codex 会报告网关丢失,直到二进制文件存在。
### Open WebUI 和其他 HTTP/OpenAPI 消费者
网关原生支持 HTTP/OpenAPI,因此 Open WebUI(和任何 OpenAPI 工具客户端)可以直接连接到 Conduit,无需桥接或代理。在应用程序中打开 **设置 -> 集成 -> Open WebUI / HTTP 端点** (或运行 `conduit-gateway --http 8765`),然后添加 `http://localhost:8765` 作为 OpenAPI 工具服务器。参见 [docs/openwebui.md](docs/openwebui.md)。相同的端点为任何 HTTP/OpenAPI MCP 消费者(n8n、LibreChat、自定义代理)提供服务。
## 配置
惰性发现、破坏性工具阻止和代理控制是全局设置,在应用程序的“设置”视图中存储和切换,因此它们适用于所有客户端(默认为启用惰性发现)。每个客户端的行为通过网关入口处的环境变量设置:
- `CONDUIT_PROFILE=<name>` - 将此客户端范围限定为一个配置文件的服务器。未设置 = 活动配置文件。
- `CONDUIT_DISCOVERY=lazy|full` - 客户端覆盖全局惰性设置的选项目标。很少需要;网关读取注册表的默认值。
- `CONDUIT_REGISTRY=<path>` - 覆盖注册文件位置。默认为稳定的每用户路径,以便打包和解包的客户端达成一致。
- `CONDUIT_RESULT_BUDGET=<bytes>` - 将超大工具结果限制在此字节数(0 禁用)。可选;默认为关闭。
- `CONDUIT_HTTP=<port>` (带有可选 `CONDUIT_HTTP_HOST`,默认为 `127.0.0.1`,和 `CONDUIT_HTTP_TOKEN`,用于所需的承载令牌)- 以 HTTP/OpenAPI 模式运行网关,而不是 stdio,用于 Open WebUI 和其他 OpenAPI 客户端(参见上文)。应用程序中的“设置 -> 集成”切换按钮为您设置这些,网关拒绝非环回绑定而没有令牌。
**语义搜索(可选)**。惰性发现默认按词汇顺序排列工具。将其指向任何 `/v1/embeddings` 端点(LM Studio、Ollama 或云提供商)以混合嵌入相似性以应对同义查询:`CONDUIT_SEMANTIC=on`、`CONDUIT_EMBED_ENDPOINT`、`CONDUIT_EMBED_MODEL`,以及可选的 `CONDUIT_EMBED_KEY`(端点身份验证)和 `CONDUIT_EMBED_BLEND`。参见 [docs/specs/semantic-search.md](docs/specs/semantic-search.md)。
**同一服务的多个帐户**。凭证属于服务器,而不是配置文件。要使用,例如,一个工作和一个个人 GitHub 服务器,请添加 GitHub 两次作为两个服务器(“GitHub(工作)”,“GitHub(个人)”),每个服务器使用自己的帐户,并在每个配置文件中启用一个。客户端范围限定为工作配置文件(`CONDUIT_PROFILE`),然后永远只看到工作帐户。工具名称按服务器命名空间,因此即使在同一个配置文件中,它们也不会冲突。
## 安装
预构建的安装程序发布在 [Releases](https://github.com/tsouth89/conduit/releases) 页面上。Conduit 在 **Windows 和 macOS** 上运行(两个版本均带有代码签名;macOS 还经过了 notarization),**Linux** 版本为 beta。在 Linux 上,首选 **`.deb`** (它链接到系统的 WebKitGTK,是最可靠的软件包);**AppImage** 是一个便携、无需 root 的备用方案,但可能与非常新或虚拟化的图形栈发生冲突(参见故障排除)。如果您从源代码运行,请参见下面的开发。
Windows 和 macOS 安装程序均带有代码签名(macOS 还经过了 notarization)。macOS 安装程序干净地通过 Gatekeeper。在 Windows 上,安装程序使用标准证书签名,而不是 EV,因此 SmartScreen 声誉仍会随着下载量而建立,因此早期安装可能会显示“Windows 保护了您的 PC”,请单击 **更多信息 -> 继续运行** 以继续。Linux 软件包是无签名的,这是常见的。参见 [docs/SIGNING.md](docs/SIGNING.md) 以获取详细信息。
**在 Linux 上更新和卸载**。没有图形卸载器,请使用终端。软件包名为 `conduit`。
```bash
# 更新到较新版本:只需安装新的 .deb,它会原地升级。
sudo apt install ./Conduit_0.6.0_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 钥匙串重复提示 / “无法从钥匙串读取秘密”(在开发环境中)。** 未签名的开发环境构建获得不稳定的代码签名标识,因此钥匙串重复提示或拒绝读取。签名发布构建(v0.9.3+)不会:它们将秘密存储在 macOS 数据保护钥匙串中,共享访问组下,因此网关读取它们时无需提示。这是仅在开发环境中存在的产物。
- **Linux 上“无法读取/存储秘密”。** 秘密存储使用 freedesktop Secret Service(libsecret),由 GNOME Keyring、KWallet 或类似软件提供。无头框或没有运行中的 keyring 守护进程的会话没有地方存储秘密。在桌面会话中运行 Conduit,或安装并解锁 keyring(例如 `gnome-keyring`)。
- **macOS 钥匙串和网关(v0.9.3+)。** 应用程序和单独签名的网关共享一个团队范围的钥匙串访问组,因此网关读取应用程序保存的秘密时无需提示,即使在应用程序更新之间。(早期版本显示一次性“始终允许”提示;当前签名构建中已消失。)
- **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 加速。(这是打包/GPU 问题,而不是 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]` 反补丁。
## Conduit Teams
是否希望为整个团队设置一个共享的、受管制的 MCP 服务器? **Conduit Teams** 是一个可自行托管的服务器:管理员定义一次团队的服务器,每个成员的 Conduit 都同步它们,每个成员的密钥仍然留在自己的机器上。
- **免费适用于最多 4 人** — 使用一个 Docker 命令(`docker pull ghcr.io/tsouth89/conduit-teams`)自行托管。
- **超出 4 个席位,每席每月 12 美元**;前 4 个席位保持免费。
- 集中式破坏工具策略、可导出的审计轨迹,以及每个成员选择加入本地命令服务器(团队配置永远不会在成员的机器上静默运行代码)。
定价、快速入门和结账页面均位于 **[conduitmcp.app/teams](https://conduitmcp.app/teams)**。
## 许可证
[MIT](LICENSE),本地应用程序和网关将始终保持开源。Conduit 遵循开放核心模型:桌面应用程序和 `conduit-gateway` 免费开源,Conduit Teams(上文)资助免费应用程序。您在此处贡献的任何内容都属于 MIT 许可,并造福所有人,请参见 [CONTRIBUTING.md](CONTRIBUTING.md)。
连接信息
猜你喜欢
暂无推荐服务器