Asking three models the same thing is easy; deciding what to do with three different answers is the actual problem. The vote, judge, iterate and debate tools are that machinery — a tally with confidence scores, a ranking by one model of the others, or a multi-round argument with a synthesis at the end. It connects to provider APIs directly, which the README notes is the direction the spec now recommends after server-side `sampling` was deprecated.
A bridge from one MCP client to many models: any OpenAI-compatible HTTP endpoint, and local CLI coding agents like Claude Code, Codex, Gemini CLI, Grok and Aider running as processes. On top of plain multi-model querying it adds group behaviours — voting, judging, iterative refinement and debate.
- A question sent to one provider, or to several at once, or to every configured provider — `ask_duck`, `compare_ducks`, `duck_council`
- Conversations that keep context across messages, and a way to clear them — `chat_with_duck`, `clear_conversations`
- Group decision tools: multi-model voting with reasoning and confidence scores, one model evaluating and ranking the others, two models iteratively refining an answer, and multi-round debate in Oxford, Socratic or adversarial formats — `duck_vote`, `duck_judge`, `duck_iterate`, `duck_debate`
- Provider health and model discovery, plus request, token and estimated-cost tracking per provider — `list_ducks`, `list_models`, `get_usage_stats`
- 8 reusable prompt templates for multi-model work — assigned-lens analysis, hidden assumptions, blindspots, tradeoff comparison, red teaming, reframing, architecture review and diverge-converge — `perspectives`, `assumptions`, `blindspots`, `tradeoffs`, `red_team`, `reframe`, `architecture`, `diverge_converge`
- Rich interactive HTML panels for compare, vote, debate and usage in clients supporting MCP Apps — clients without it get the same plain text, losing nothing
- An MCP bridge that lets the models reach other MCP servers, with per-server approval controls and session-based approvals — `mcp_status`, `get_pending_approvals`, `approve_mcp_request`
- A pluggable guardrail layer with rate limiting, token limits, pattern blocking and PII redaction
- Vision input for models that accept images, and automatic failover to another provider when the primary fails
Node.js 20 or higher, and `npm install -g mcp-rubber-duck` or `npx mcp-rubber-duck`; a Docker image is published to ghcr.io. You need at least one API key for an HTTP provider or a CLI coding agent installed locally — `OPENAI_API_KEY`, `GEMINI_API_KEY` and `GROQ_API_KEY` are read from the environment, with `DEFAULT_PROVIDER` picking the fallback, and `CLI_{AGENT}_ENABLED` switching on local agents. Configuration lives in a `.env` file or `config/config.json`. Licensed MIT.
One command plus a key — npm install -g mcp-rubber-duck, then supply credentials
