内容
# MCP Rubber Duck
MCP(模型上下文协议)服务器,作为查询多个LLM的桥梁——既支持OpenAI兼容的HTTP API,也支持CLI编码代理。就像橡胶鸭调试一样,向各种AI“鸭子”解释你的问题,获得不同的视角!
[](https://www.npmjs.com/package/mcp-rubber-duck)
[](https://github.com/nesquikm/mcp-rubber-duck/pkgs/container/mcp-rubber-duck)
[](https://registry.modelcontextprotocol.io)
<p align="center">
<img src="assets/mcp-rubber-duck.jpg" alt="MCP Rubber Duck - AI ducks helping debug code" width="600">
</p>
> **为什么直接集成提供商?** MCP的`sampling`原始操作——一个服务器借用*宿主*模型的服务器——已在 [2026-07-28 规格 RC](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2577) 中被弃用,取而代之的是服务器直接与LLM提供商API集成。 Rubber Duck 一直以这种方式工作(它自带鸭子),因此它与协议的发展方向一致——无需迁移。
## 功能
- **通用 OpenAI 兼容性** - 与任何 OpenAI 兼容的 API 端点配合使用
- **CLI 代理支持** - 使用 CLI 编码代理(Claude Code、Codex、Gemini CLI、Grok、Aider)作为鸭子
- **多个鸭子** - 同时配置和查询多个 LLM 提供商
- **对话管理** - 在多个消息中保持上下文
- **鸭子委员会** - 同时从所有配置的 LLM 获取响应
- **共识投票** - 多鸭子投票,附带推理和置信度评分
- **LLM 作为裁判** - 让鸭子评估和排名彼此的响应
- **迭代改进** - 两个鸭子协作改进响应
- **结构化辩论** - 牛津式、苏格拉底式和对抗性辩论格式
- **MCP 提示** - 8 个可重用的多 LLM 工作流提示模板
- **视觉输入** - 将图像发送到具有视觉能力的模型的提示([文档](./docs/tools.md#vision-input))
- **自动故障转移** - 如果主要提供商失败,则回退到其他提供商
- **健康监测** - 所有提供商的实时健康检查
- **使用情况跟踪** - 跟踪每个提供商的请求、令牌和估计成本
- **MCP 桥接** - 将鸭子连接到其他 MCP 服务器以扩展功能([文档](./docs/mcp-bridge.md))
- **防护栏** - 可插入的安全层,带有速率限制、令牌限制、模式阻止和 PII 删除([文档](./docs/guardrails.md))
- **粒度安全** - 每个服务器的审批控制,带有基于会话的审批
- **交互式 UI** - 用于比较、投票、辩论和使用情况工具的丰富 HTML 面板(通过 [MCP 应用](https://github.com/modelcontextprotocol/ext-apps))
- **工具注释** - MCP 兼容的工具行为提示(只读、破坏性等)
- **结构化输出** - 工具返回结构化 JSON 的 `outputSchema`,用于客户端验证(Cursor、VS Code/Copilot)
- **规范对齐设计** - 直接连接到提供商 API,这是 MCP `2026-07-28` 规范推荐的,现在服务器端 `sampling` 已弃用([SEP-2577](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2577))
## 支持的提供商
### HTTP 提供商(OpenAI 兼容 API)
任何具有 OpenAI 兼容 API 端点的提供商,包括:
- **OpenAI**
- **Google Gemini**
- **Anthropic** (通过 OpenAI 兼容端点)
- **Groq** (开源模型的快速推理)
- **Together AI** (广泛的开源模型目录)
- **Perplexity** (带有网络搜索的在线模型)
- **Anyscale** 、 **Azure OpenAI** 、 **Ollama** 、 **LM Studio** 、 **Custom**
### CLI 提供商(编码代理)
作为本地进程运行的命令行编码代理:
- **Claude Code** (`claude`) - **Codex** (`codex`) - **Gemini CLI** (`gemini`) - **Grok CLI** (`grok`) - **Aider** (`aider`) - **Custom**
参见 [CLI 提供商](./docs/cli-providers.md) 以获取完整的设置和配置。
## 快速入门
```bash
# 全局安装
npm install -g mcp-rubber-duck
# 或直接在 Claude Desktop 配置中使用 npx
npx mcp-rubber-duck
```
**使用 Claude Desktop?** 跳转到 [Claude Desktop 配置](./docs/claude-desktop.md)。
**使用 Cursor、VS Code、Windsurf 或其他工具?** 参见 [设置指南](./docs/setup.md)。
## 安装
### 先决条件
- Node.js 20 或更高版本
- npm 或 yarn
- 至少一个 HTTP 提供商的 API 密钥,或本地安装的 CLI 编码代理
### 从 NPM 安装
```bash
npm install -g mcp-rubber-duck
```
### 从源码安装
```bash
git clone https://github.com/nesquikm/mcp-rubber-duck.git
cd mcp-rubber-duck
npm install
npm run build
npm start
```
## 配置
创建 `.env` 文件或 `config/config.json`。关键环境变量:
| 变量 | 描述 |
| --- | --- |
| `OPENAI_API_KEY` | OpenAI API 密钥 |
| `GEMINI_API_KEY` | Google Gemini API 密钥 |
| `GROQ_API_KEY` | Groq API 密钥 |
| `DEFAULT_PROVIDER` | 默认提供商(例如,`openai`) |
| `DEFAULT_TEMPERATURE` | 默认温度(例如,`0.7`) |
| `LOG_LEVEL` | `debug`、`info`、`warn`、`error` |
| `MCP_SERVER` | 设置为 `true` 以启用 MCP 服务器模式 |
| `MCP_BRIDGE_ENABLED` | 启用 MCP 桥接(鸭子访问外部 MCP 服务器) |
| `CUSTOM_{NAME}_*` | 自定义 HTTP 提供商 |
| `CLI_{AGENT}_ENABLED` | 启用 CLI 代理(`CLAUDE`、`CODEX`、`GEMINI`、`GROK`、`AIDER`) |
完整参考: **[配置文档](./docs/configuration.md)**
## 交互式 UI(MCP 应用)
四个工具 - `compare_ducks`、`duck_vote`、`duck_debate` 和 `get_usage_stats` - 可以在支持的 MCP 客户端中渲染丰富的交互式 HTML 面板,通过 [MCP 应用](https://github.com/modelcontextprotocol/ext-apps)。一旦此 MCP 服务器配置在支持的客户端中,UI 将自动出现 - 无需额外设置。没有支持 MCP 应用的客户端仍然接收相同的纯文本输出(不会丢失功能)。参见 [MCP 应用仓库](https://github.com/modelcontextprotocol/ext-apps) 以获取支持的客户端的最新列表。
### 比较鸭子
并排比较多个模型响应,带有延迟指示器、令牌计数、模型徽章和错误状态。
<p align="center">
<img src="assets/ext-apps-compare.png" alt="Compare Ducks interactive UI" width="600">
</p>
### 鸭子投票
多个鸭子对选项进行投票,显示为视觉投票计数器,带有条形图、共识徽章、获胜者卡片、置信度条形图和可折叠的推理。
<p align="center">
<img src="assets/ext-apps-vote.png" alt="Duck Vote interactive UI" width="600">
</p>
### 鸭子辩论
鸭子之间的结构化多轮辩论,以回合制视图显示,带有格式徽章、参与者列表、可折叠的回合和综合部分。
<p align="center">
<img src="assets/ext-apps-debate.png" alt="Duck Debate interactive UI" width="600">
</p>
### 使用情况统计
使用情况分析,带有摘要卡片、提供商细分、令牌分布条形图和估计成本。
<p align="center">
<img src="assets/ext-apps-usage-stats.png" alt="Usage Stats interactive UI" width="600">
</p>
## 可用工具
| 工具 | 描述 |
| --- | --- |
| `ask_duck` | 向特定的 LLM 提供商询问一个问题 |
| `chat_with_duck` | 与上下文保持跨多个消息的对话 |
| `clear_conversations` | 清除所有对话历史记录 |
| `list_ducks` | 列出配置的提供商和健康状态 |
| `list_models` | 列出提供商可用的模型 |
| `compare_ducks` | 同时向多个提供商询问相同的问题 |
| `duck_council` | 从所有配置的鸭子获取响应 |
| `get_usage_stats` | 使用情况统计和估计成本 |
| `duck_vote` | 多鸭子投票,带有推理和置信度 |
| `duck_judge` | 让一个鸭子评估和排名其他鸭子的响应 |
| `duck_iterate` | 在两个鸭子之间迭代改进响应 |
| `duck_debate` | 鸭子之间的结构化多轮辩论 |
| `mcp_status` | MCP 桥接状态和连接的服务器 |
| `get_pending_approvals` | 待处理的 MCP 工具审批请求 |
| `approve_mcp_request` | 批准或拒绝鸭子的 MCP 工具请求 |
完整参考,含输入模式: **[工具文档](./docs/tools.md)**
## 可用提示
| 提示 | 目的 | 必需参数 |
| --- | --- | --- |
| `perspectives` | 多角度分析,分配镜头 | `problem`、`perspectives` |
| `assumptions` | 发现计划中的隐藏假设 | `plan` |
| `blindspots` | 查找被忽视的风险和空白 | `proposal` |
| `tradeoffs` | 结构化选项比较 | `options`、`criteria` |
| `red_team` | 多角度安全/风险分析 | `target` |
| `reframe` | 不同层次的问题重构 | `problem` |
| `architecture` | 跨关注点设计审查 | `design`、`workloads`、`priorities` |
| `diverge_converge` | 分散探索然后收敛 | `challenge` |
完整参考,含示例: **[提示文档](./docs/prompts.md)**
## 开发
```bash
npm run dev # 开发模式,带监听
npm test # 运行所有测试
npm run lint # ESLint
npm run typecheck # 类型检查,无输出
```
## [文档](./docs/README.md)
| 主题 | 链接 |
| --- | --- |
| **所有工具的设置指南** | **[docs/setup.md](./docs/setup.md)** |
| 完整的配置参考 | [docs/configuration.md](./docs/configuration.md) |
| Claude Desktop 设置 | [docs/claude-desktop.md](./docs/claude-desktop.md) |
| 所有工具及其模式 | [docs/tools.md](./docs/tools.md) |
| 提示模板 | [docs/prompts.md](./docs/prompts.md) |
| CLI 编码代理 | [docs/cli-providers.md](./docs/cli-providers.md) |
| MCP 桥接 | [docs/mcp-bridge.md](./docs/mcp-bridge.md) |
| 防护栏 | [docs/guardrails.md](./docs/guardrails.md) |
| Docker 部署 | [docs/docker.md](./docs/docker.md) |
| 提供商特定设置 | [docs/provider-setup.md](./docs/provider-setup.md) |
| 使用示例 | [docs/usage-examples.md](./docs/usage-examples.md) |
| 架构 | [docs/architecture.md](./docs/architecture.md) |
| 路线图 | [docs/roadmap.md](./docs/roadmap.md) |
## 故障排除
### 提供商无法正常工作
1. 检查 API 密钥是否正确设置
2. 验证端点 URL 是否正确
3. 运行健康检查:`list_ducks({ check_health: true })`
4. 检查日志中的详细错误消息
### 连接问题
- 对于本地提供商(Ollama、LM Studio),确保它们正在运行
- 检查本地端点的防火墙设置
- 验证到云提供商的网络连接
### 速率限制
- 配置故障转移到备用提供商
- 调整 `max_retries` 和 `timeout` 设置
- 参见 [防护栏](./docs/guardrails.md) 以获取速率限制配置
## 贡献
```
__
<(o )___
( ._> /
`---' 鸭鸭!准备调试!
```
我们欢迎贡献!无论您是修复错误、添加功能还是教我们的鸭子新技巧,我们都非常乐意邀请您加入我们的团队。
查看我们的 [贡献指南](./CONTRIBUTING.md) 以开始。
**贡献者快速入门:**
1. 复刻仓库
2. 创建功能分支
3. 遵循我们的 [约定提交指南](./CONTRIBUTING.md#commit-messages-duck-communication-protocol)
4. 为新功能添加测试
5. 提交拉取请求
## 许可证
MIT 许可证 - 有关详细信息,请参见 LICENSE 文件。
## 致谢
- 灵感来自橡胶鸭调试方法
- 构建在模型上下文协议(MCP)上
- 使用 OpenAI SDK 实现 HTTP 提供商兼容性
- 支持 CLI 编码代理(Claude Code、Codex、Gemini CLI、Grok、Aider)
## 更新日志
在 [CHANGELOG.md](./CHANGELOG.md) 中查看详细的更改历史和发布记录。
## 注册和目录
- **NPM 包**: [npmjs.com/package/mcp-rubber-duck](https://www.npmjs.com/package/mcp-rubber-duck)
- **Docker 镜像**: [ghcr.io/nesquikm/mcp-rubber-duck](https://github.com/nesquikm/mcp-rubber-duck/pkgs/container/mcp-rubber-duck)
- **MCP 注册表**: 官方 MCP 服务器 `io.github.nesquikm/rubber-duck`
- **Glama 目录**: [glama.ai/mcp/servers/@nesquikm/mcp-rubber-duck](https://glama.ai/mcp/servers/@nesquikm/mcp-rubber-duck)
- **Awesome MCP 服务器**: 在 [社区目录](https://github.com/punkpeye/awesome-mcp-servers) 中列出
## 支持
- 报告问题: https://github.com/nesquikm/mcp-rubber-duck/issues
- 文档: https://github.com/nesquikm/mcp-rubber-duck/wiki
- 讨论: https://github.com/nesquikm/mcp-rubber-duck/discussions
---
祝您使用 AI 鸭面板调试愉快!