ask_duckLABSCO SUMMARY
Several opinions, and machinery for reconciling them.
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.
What it is
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.
What you get
- 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
Requirements
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.
Setup effort
One command plus a key — npm install -g mcp-rubber-duck, then supply credentials
USE CASES
Sanity-checking an answer you do not trust
Send it to several providers at once and read the responses side by side with their latencies and token counts.
Choosing between options with more than one opinion
Put the options to a vote and read the tally, the confidence bars and each model's reasoning.
Pressure-testing a design
Run a structured debate or a red-team prompt across models, then read the synthesis rather than each round.
Getting a cheap second pass without leaving the client
Route the draft to a fast local CLI agent as one duck, and the final judgement to a stronger hosted one.
Watching what the panel costs
Read requests, tokens and estimated cost broken down by provider before you make multi-model querying a habit.
15 tools
Listed in project docs. Your client may show a different list.
chat_with_duckclear_conversationslist_duckslist_modelscompare_ducksduck_councilget_usage_statsduck_voteduck_judgeduck_iterateduck_debatemcp_statusget_pending_approvalsapprove_mcp_requestBEFORE YOU INSTALL
What to know first
Tools you get
15 tools named in the project's documentation.
Requires
- npm on PATH
- Node.js 20 or later
- At least one of OPENAI_API_KEY, GEMINI_API_KEY or GROQ_API_KEY in your environment, or a local CLI coding agent
INSTALLATION
Connect your client
Server setup
npm install -g mcp-rubber-duckMCP Clients
Claude Desktop, Claude Code, Cursor
{
"mcpServers": {
"rubber-duck": {
"command": "npx",
"args": [
"-y",
"mcp-rubber-duck"
],
"env": {
"MCP_SERVER": "true",
"OPENAI_API_KEY": "<YOUR_OPENAI_API_KEY>",
"DEFAULT_PROVIDER": "openai"
}
}
}
}Each block sets OPENAI_API_KEY, and one provider key is enough to start. To add more ducks, put GEMINI_API_KEY or GROQ_API_KEY in the same env block.
Windsurf
{
"mcpServers": {
"rubber-duck": {
"command": "npx",
"args": [
"-y",
"mcp-rubber-duck"
],
"env": {
"MCP_SERVER": "true",
"OPENAI_API_KEY": "${env:OPENAI_API_KEY}",
"DEFAULT_PROVIDER": "openai"
}
}
}
}Each block sets OPENAI_API_KEY, and one provider key is enough to start. To add more ducks, put GEMINI_API_KEY or GROQ_API_KEY in the same env block.
VS Code
{
"servers": {
"rubber-duck": {
"command": "npx",
"args": [
"-y",
"mcp-rubber-duck"
],
"env": {
"MCP_SERVER": "true",
"OPENAI_API_KEY": "${env:OPENAI_API_KEY}",
"DEFAULT_PROVIDER": "openai"
}
}
}
}Each block sets OPENAI_API_KEY, and one provider key is enough to start. To add more ducks, put GEMINI_API_KEY or GROQ_API_KEY in the same env block.
Continue
{
"mcpServers": [
{
"name": "rubber-duck",
"command": "npx",
"args": [
"-y",
"mcp-rubber-duck"
],
"env": {
"MCP_SERVER": "true",
"OPENAI_API_KEY": "<YOUR_OPENAI_API_KEY>",
"DEFAULT_PROVIDER": "openai"
}
}
]
}Each block sets OPENAI_API_KEY, and one provider key is enough to start. To add more ducks, put GEMINI_API_KEY or GROQ_API_KEY in the same env block.