llm-council
The LLM Council works together to answer your hardest questions
Install / Use
claude mcp add amiable-dev -- npx -y github:amiable-dev/llm-councilIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
AI & Machine LearningSupported Platforms
Tags
Our assessment of llm-council
llm-council scores 75/100 on our quality scale, 644th of 762 AI & Machine Learning skills we index.
Its MCP Server is 53 KB long, well organised into 130 sections with 60 code examples: long enough that it reads more like full documentation than a focused instruction file, which agents can find harder to follow.
It has 43 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 3 days ago, so llm-council is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
llm-council compared with similar skills
All 4 of these similar skills score higher than llm-council; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| llm-council (this skill)by amiable-dev | 75 | 43 | 3d ago | MCP Server |
| claude-memby thedotmack | 100 | 94.8k | 1d ago | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 85.7k | 12d ago | CLAUDE.md |
| Understand-Anythingby Egonex-AI | 100 | 84.3k | 15d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 73.9k | today | CLAUDE.md |
Frequently asked questions
- How do I install llm-council?
- Run
claude mcp add amiable-dev -- npx -y github:amiable-dev/llm-council. The install tabs above show the steps for each supported agent. - Which AI agents does llm-council work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is llm-council safe to use?
- It is MIT-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is llm-council still maintained?
- The repository was last updated 3 days ago, so llm-council is actively maintained.
Skill content
View source on GitHubWhat is This?
Instead of asking a single LLM for answers, this MCP server:
- Stage 1: Sends your question to multiple LLMs in parallel (GPT, Claude, Gemini, Grok, etc.)
- Stage 2: Each LLM reviews and ranks the other responses (anonymized to prevent bias)
- Stage 3: A Chairman LLM synthesizes all responses into a final, high-quality answer
Quick Deploy
Deploy your own LLM Council instance:
| Platform | Deploy | Best For |
|----------|--------|----------|
| Railway | | Production, webhooks |
| Render |
| Evaluation, free tier |
Required Environment Variables:
OPENROUTER_API_KEY- Your OpenRouter API keyLLM_COUNCIL_API_TOKEN- A secure token for API authentication (generate withopenssl rand -hex 16)
Note: Railway is recommended for n8n integration (no cold-start). Render Free tier spins down after 15 minutes which may cause webhook timeouts.
For detailed deployment instructions, see the Deployment Guide.
Credits & Attribution
This project is a derivative work based on the original llm-council by Andrej Karpathy.
Karpathy's original README stated:
"I'm not going to support it in any way, it's provided here as is for other people's inspiration and I don't intend to improve it. Code is ephemeral now and libraries are over, ask your LLM to change it in whatever way you like."
...the irony of producing a derivative work that packages the core concept for broader use via the Model Context Protocol!
Installation
# Recommended (isolated tool install; puts `llm-council` on PATH):
uv tool install "llm-council-core[mcp,secure]"
# Or with pip:
pip install "llm-council-core[mcp,secure]"
For core library only (no MCP server):
pip install llm-council-core
Why
[mcp,secure]and not just[mcp]? Thesecureextra provides keychain support. Without it,llm-council setup-keyis unavailable AND a key already stored in your keychain is silently ignored — the server starts butcouncil_health_checkreportsapi_key_configured: false. Include both extras unless you only ever use environment variables.
Setup
1. Choose Your Gateway
The council supports three gateway options for accessing LLMs:
| Gateway | Best For | API Keys Needed |
|---------|----------|-----------------|
| OpenRouter (default) | Easiest setup, 100+ models via single key | OPENROUTER_API_KEY |
| Requesty | BYOK mode, analytics, cost tracking | REQUESTY_API_KEY + provider keys |
| Direct | Maximum control, direct provider APIs | Provider keys (Anthropic, OpenAI, Google) |
Quick Start (OpenRouter):
# Sign up at openrouter.ai and get your API key
export OPENROUTER_API_KEY="sk-or-v1-..."
Direct Provider Access:
# Use your existing provider API keys directly
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
export GOOGLE_API_KEY="..."
export LLM_COUNCIL_DEFAULT_GATEWAY=direct
Requesty with BYOK:
export REQUESTY_API_KEY="..."
export ANTHROPIC_API_KEY="sk-ant-..." # Your own key, routed through Requesty
export LLM_COUNCIL_DEFAULT_GATEWAY=requesty
2. Store Your API Keys Securely
Choose one of these options (in order of recommendation):
Option A: System Keychain (Most Secure)
Store keys encrypted in your OS keychain:
# Install with keychain support
pip install "llm-council-core[mcp,secure]"
# Store key securely (prompts for key, no echo)
llm-council setup-key
# For CI/CD automation, pipe from stdin:
echo "$OPENROUTER_API_KEY" | llm-council setup-key --stdin
Option B: Environment Variables
Set in your shell profile (~/.zshrc, ~/.bashrc):
# OpenRouter (default gateway)
export OPENROUTER_API_KEY="sk-or-v1-..."
# Or use direct provider APIs
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
export GOOGLE_API_KEY="..."
Option C: Environment File
Create a .env file (ensure it's in .gitignore):
# For OpenRouter
echo "OPENROUTER_API_KEY=sk-or-v1-..." > .env
# Or for direct APIs
cat > .env << 'EOF'
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
GOOGLE_API_KEY=...
LLM_COUNCIL_DEFAULT_GATEWAY=direct
EOF
Security Note: Never put API keys in command-line arguments or JSON config files that might be committed to version control.
3. Customize Models (Optional)
You can customize which models participate in the council using three methods (in priority order):
Option 1: Environment Variables (Recommended)
# Comma-separated list of council models
export LLM_COUNCIL_MODELS="openai/gpt-4,anthropic/claude-3-opus,google/gemini-pro"
# Chairman model (synthesizes final response)
export LLM_COUNCIL_CHAIRMAN="anthropic/claude-3-opus"
# Skip chairman synthesis, return the top-ranked Stage 1 response directly
# (cheaper/faster, but NEVER enable this for council-verify/council-gate --
# no verdict is computed; see docs/guides/verify.md)
export LLM_COUNCIL_CHAIRMAN_DISABLED=false
Option 2: YAML Configuration (Recommended)
Create llm_council.yaml in your project root or ~/.config/llm-council/llm_council.yaml:
council:
# Tier configuration (ADR-022)
tiers:
default: high
pools:
quick:
models:
- openai/gpt-4o-mini
- anthropic/claude-3-5-haiku-20241022
timeout_seconds: 30
balanced:
models:
- openai/gpt-4o
- anthropic/claude-3-5-sonnet-20241022
timeout_seconds: 90
high:
models:
- openai/gpt-4o
- anthropic/claude-opus-4-7
- google/gemini-3-pro
timeout_seconds: 180
# Triage configuration (ADR-020)
triage:
enabled: false
wildcard:
enabled: true
prompt_optimization:
enabled: true
# Gateway configuration (ADR-023, ADR-025a)
gateways:
default: openrouter
fallback:
enabled: true
chain: [openrouter, ollama] # Can use Ollama as fallback
# Provider-specific configuration
providers:
ollama:
enabled: true
base_url: http://localhost:11434
timeout_seconds: 120.0
hardware_profile: recommended # minimum|recommended|professional|enterprise
openrouter:
enabled: true
base_url: https://openrouter.ai/api/v1/chat/completions
requesty:
enabled: true
base_url: https://router.requesty.ai/v1/chat/completions
api_key: ${REQUESTY_API_KEY}
# Per-gateway model-id translation (e.g. Requesty rejects OpenRouter's
# ":free" suffix and uses provider-prefixed names for some models)
model_name_map:
requesty:
"some/model:free": "some/model"
# Webhook notifications (ADR-025a)
webhooks:
enabled: false # Opt-in
timeout_seconds: 5.0
max_retries: 3
https_only: true
default_events:
- council.complete
- council.error
observability:
log_escalations: true
Priority: YAML config > Environment variables > Defaults
Option 3: JSON Configuration (Legacy)
Create ~/.config/llm-council/config.json:
{
"council_models": [
"openai/gpt-4-turbo",
"anthropic/claude-3-opus",
"google/gemini-pro",
"meta-llama/llama-3-70b-instruct"
],
"chairman_model": "anthropic/claude-3-opus",
"synthesis_mode": "consensus",
"exclude_self_votes": true,
"style_normalization": false,
"max_reviewers": null
}
Option 4: Use Defaults
If you don't configure anything, these defaults are used:
- Council: GPT-5.1, Gemini 3 Pro, Claude Sonnet 4.5, Grok 4
- Chairman: Gemini 3 Pro
- Mode: consensus
- Self-vote exclusion: enabled
Finding Models:
- OpenRouter: openrouter.ai/models
- Anthropic: docs.anthropic.com/models
- OpenAI: platform.openai.com/docs/models
- Google: ai.google.dev/gemini-api/docs/models
Usage
With Claude Code
# First, store your API key securely (one-time setup)
llm-council setup-key
# Then add the MCP server (key is read from keychain or environment)
claude mcp add --transport stdio llm-council --scope user -- llm-council
Then in Claude Code:
Consult the LLM council about best practices for error handling
With Claude Desktop
First ensure your API key is available (via keychain, environment variable, or .env file).
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"llm-council": {
"command": "llm-council"
}
}
}
Note: No
envblock needed—the key is resolved from your system keychain or environment automatically.
Client timeouts (
high/reasoningtiers): deliberation can exceed MCP clients' default transport timeout (~60s). SetMCP_TIMEOUT(milliseconds) in your client config to at least the tier budget (high≈ 180000,reasoning≈ 600000) or the client cuts the connection mid-deliberation.
With Other MCP Clients
Any MCP client can use the server by running:
llm-council
Quality Benchmark (llm-council bench)
A golden dataset (bench/dataset/v1/, 20 items across coding/reasoning/factual/judgment) guards council quality against drift (ADR-048). Every run costs real API spend — it runs nightly/on-demand, never per-PR:
Truncated for display — read the full file on GitHub.
Related Skills
claude-mem
94.8kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
85.7kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
Understand-Anything
84.3kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
headroom
73.9kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
