# Available Tools
## Basic Tools
### ask_duck
Ask a single question to a specific LLM provider. When MCP Bridge is enabled, ducks can automatically access tools from connected MCP servers. Supports [vision input](#vision-input) via the optional `images` parameter.
```typescript
{
"prompt": "What is rubber duck debugging?",
"provider": "openai", // Optional, uses default if not specified
"temperature": 0.7, // Optional
"images": [ // Optional, for vision-capable models
{ "data": "", "mimeType": "image/png" }
]
}
```
### chat_with_duck
Have a conversation with context maintained across messages. Supports [vision input](#vision-input) via the optional `images` parameter.
```typescript
{
"conversation_id": "debug-session-1",
"message": "Can you help me debug this code?",
"provider": "groq", // Optional, can switch providers mid-conversation
"images": [ // Optional
{ "data": "", "mimeType": "image/png" }
]
}
```
### clear_conversations
Clear all conversation history and start fresh. Useful when switching topics or when context becomes too large.
```typescript
{
// No parameters required
}
```
### list_ducks
List all configured providers and their health status.
```typescript
{
"check_health": true // Optional, performs fresh health check
}
```
### list_models
List available models for LLM providers.
```typescript
{
"provider": "openai", // Optional, lists all if not specified
"fetch_latest": false // Optional, fetch latest from API vs cached
}
```
### compare_ducks
Ask the same question to multiple providers simultaneously. Renders an [interactive UI](../README.md#interactive-uis-mcp-apps) in supported clients. Supports [vision input](#vision-input) via the optional `images` parameter.
```typescript
{
"prompt": "What's the best programming language?",
"providers": ["openai", "groq", "ollama"], // Optional, uses all if not specified
"images": [ // Optional
{ "data": "", "mimeType": "image/png" }
]
}
```
### duck_council
Get responses from all configured ducks - like a panel discussion! Supports [vision input](#vision-input) via the optional `images` parameter.
```typescript
{
"prompt": "How should I architect a microservices application?",
"images": [ // Optional
{ "data": "", "mimeType": "image/png" }
]
}
```
### get_usage_stats
Get usage statistics and estimated costs for your duck queries. Renders an [interactive UI](../README.md#interactive-uis-mcp-apps) in supported clients.
```typescript
{
"period": "today" // Optional: "today", "7d", "30d", or "all"
}
```
Returns requests, tokens (prompt/completion), errors, and estimated costs broken down by provider and model.
Usage data is stored in `~/.mcp-rubber-duck/data/usage.json`.
## Multi-Agent Consensus & Debate Tools
Research-backed tools for multi-agent coordination.
### duck_vote
Have multiple ducks vote on options with reasoning and confidence scores. Renders an [interactive UI](../README.md#interactive-uis-mcp-apps) in supported clients.
```typescript
{
"question": "Best approach for error handling?",
"options": ["try-catch", "Result type", "Either monad"],
"voters": ["openai", "google"], // Optional, uses all if not specified
"require_reasoning": true // Optional, default: true
}
```
Returns vote tally, confidence scores, and consensus level (unanimous, majority, plurality, split, none).
### duck_judge
Have one duck evaluate and rank other ducks' responses. Use after `duck_council`.
```typescript
{
"responses": [/* responses from duck_council */],
"judge": "openai", // Optional, uses first available
"criteria": ["accuracy", "completeness", "clarity"], // Optional
"persona": "senior engineer" // Optional, e.g., "security expert"
}
```
### duck_iterate
Iteratively refine a response between two ducks.
```typescript
{
"prompt": "Write a function to validate email addresses",
"providers": ["openai", "google"], // Exactly 2 providers
"mode": "critique-improve", // or "refine"
"iterations": 3 // Optional, default: 3, max: 10
}
```
Modes:
- **refine**: Each duck improves the previous response
- **critique-improve**: Alternates between critiquing and improving
### duck_debate
Structured multi-round debate between ducks. Renders an [interactive UI](../README.md#interactive-uis-mcp-apps) in supported clients.
```typescript
{
"prompt": "Should startups use microservices or monolith for MVP?",
"format": "oxford", // "oxford", "socratic", or "adversarial"
"rounds": 2, // Optional, default: 3
"providers": ["openai", "google"], // Optional, uses all if not specified
"synthesizer": "openai" // Optional, duck to synthesize debate
}
```
Formats:
- **oxford**: Structured pro/con arguments
- **socratic**: Question-based philosophical exploration
- **adversarial**: One defends, others attack weaknesses
## Vision Input
Four tools support sending images alongside text prompts: `ask_duck`, `chat_with_duck`, `compare_ducks`, and `duck_council`. Pass images as base64-encoded data in the optional `images` array:
```typescript
{
"prompt": "What's wrong with this UI layout?",
"images": [
{
"data": "iVBORw0KGgo...", // Base64-encoded image data
"mimeType": "image/png" // MIME type: image/png, image/jpeg, image/webp, image/gif
}
]
}
```
Multiple images can be included in a single request. Images are passed to the LLM provider as inline data URIs using the OpenAI vision API format.
**Notes:**
- The target model must support vision (e.g., GPT-4o, Gemini 2.5, Claude 3.5). Non-vision models will return an API error.
- There is no enforced size limit on image data — large base64 payloads are passed through as-is.
- Multi-round tools (`duck_iterate`, `duck_debate`, `duck_vote`, `duck_judge`) are text-only since their intermediate prompts are generated internally.
## MCP Bridge Tools
Tools for managing MCP server connections and tool approvals.
### mcp_status
Get status of MCP Bridge, connected servers, and pending approvals.
```typescript
{
// No parameters required
}
```
### get_pending_approvals
Get list of pending MCP tool approvals from ducks.
```typescript
{
"duck": "openai" // Optional, filter by duck name
}
```
### approve_mcp_request
Approve or deny a duck's MCP tool request.
```typescript
{
"approval_id": "abc123", // Required
"decision": "approve", // "approve" or "deny"
"reason": "Not needed" // Optional, reason for denial
}
```