ModelCouncil for Claude Desktop, Claude.ai, Cursor, and ChatGPT
Query Claude, GPT, Gemini, and Grok against your project context — without leaving your editor or chat client. Connect via the Model Context Protocol (MCP).
What you get
- Council queries — ask one question, get parallel responses from Claude, GPT, and Gemini synthesized into a Decision Board (recommendation, risks, consensus, disagreements, rare finds).
- Diamond mode — for high-stakes decisions, have the models cross-review each others' responses before synthesis. Async — runs in the background, you get an email when it's done if you disconnect.
- Project context — every query runs against your uploaded project documents, automatically. No copy-pasting.
- Full web-UI mirror — every MCP query appears in your ModelCouncil dashboard with a thread, just like web queries.
What NOT to expect
Honest about the edges — these are common misconceptions worth clearing up before you set up.
- Not an automatic import of your Claude.ai (or ChatGPT) thread. The MCP tool sees what you pass it:
project_id,question, and optionaladditional_context. If you want chat history factored in, paste the relevant chunk intoadditional_context. - Not a live workspace sync. Documents you uploaded to a ModelCouncil project are available. Documents you have open in your editor are not — unless your editor exposes them as its own MCP tools.
- Not (yet) in the Anthropic or OpenAI app directories. Setup is self-serve via paste-a-URL. We're working on verification.
- Not magically faster than the web app. Same models, same call paths. Diamond Mode still takes 30s–a few minutes — that's why it's async with a poll-by-query-id pattern.
- Not free or unlimited. Same per-query economics as the dashboard. The $10 per-call hard cap below is a safety net, not a budget.
Step 1: Get an API key
- Sign in at modelcouncil.co/settings and scroll to API Keys & MCP.
- Click New key. Give it a descriptive name like "Cursor on my laptop" or "Claude Desktop home".
- Copy the key immediately. It's shown once — we don't store the full value. If you lose it, revoke and create a new one.
Step 2: Configure your MCP client
ModelCouncil's MCP server speaks Streamable HTTP. Configure it once per client; the same key works across clients.
Claude Desktop & Claude.ai (web)
Claude Desktop: ⚙ Settings → Connectors → Add custom connector
Claude.ai web: Profile → Settings → Connectors → Add custom connector
Name: ModelCouncil
URL: https://modelcouncil.co/api/mcp
(Leave OAuth Client ID and Client Secret BLANK — Claude handles
OAuth automatically via Dynamic Client Registration. You do NOT need
to generate an API key in Settings for this flow; that's only for
Cursor and Claude Code CLI below.)After clicking Add, click Connect. You'll be redirected to a ModelCouncil consent screen — review which app is requesting access (the warning panel shows the connector's claimed identity and redirect host), then click Approve. The four tools appear immediately. Same flow in both Claude Desktop and Claude.ai web — they share the Connectors UI.
ChatGPT (web Apps + Desktop) — Plus / Pro / Team / Enterprise
Settings → Apps & Connectors → Add MCP server
Name: ModelCouncil
URL: https://modelcouncil.co/api/mcp
Authentication: OAuth (default)
(Leave Client ID and Client Secret BLANK — ChatGPT handles OAuth via
Dynamic Client Registration, same as Claude.)ChatGPT redirects you to ModelCouncil's consent screen on first Connect — review the connector identity + redirect host in the warning panel, then click Approve. ChatGPT requests tool permissions per-tool on first use; approve each once. If the connector doesn't appear after Save, your plan likely doesn't include MCP Apps yet (gated to Plus / Pro / Team / Enterprise as of May 2026).
Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"modelcouncil": {
"url": "https://modelcouncil.co/api/mcp",
"headers": {
"Authorization": "Bearer mc_live_paste_your_key_here"
}
}
}
}Restart Cursor. The tools appear in the @ menu under MCP.
Claude Code CLI
.mcp.json (project-scoped) or ~/.config/claude-code/mcp.json (user-scoped)
{
"mcpServers": {
"modelcouncil": {
"url": "https://modelcouncil.co/api/mcp",
"headers": {
"Authorization": "Bearer mc_live_paste_your_key_here"
}
}
}
}Run `claude mcp` to confirm the server is registered, or restart your Claude Code session. Project-scoped configs (.mcp.json in the repo root) override user-scoped ones — useful if you want a per-project key with a different daily spend cap.
Two auth flows — and which to use
ModelCouncil supports both auth flows the MCP ecosystem uses:
- OAuth 2.1 + PKCE (Claude Desktop, Claude.ai web, ChatGPT) — the client handles registration + authorization automatically. You only see a consent screen. Tokens expire after 30 days and auto-refresh. This is the default for the Claude and ChatGPT desktop/web apps.
- Static Bearer token (Cursor, Claude Code CLI) — you generate a key in Settings, paste it into a JSON config file. The token is long-lived (never expires) and survives across app restarts. CLI / IDE tools that don't have a browser-redirect flow use this.
You don't have to choose — they coexist. Manual keys appear in Settings; OAuth-authorized apps appear under Connected apps. Revoke either at any time.
Advanced: legacy claude_desktop_config.json
Claude Desktop still accepts a static-Bearer JSON config alongside the Connectors UI. Most users should use the Connectors flow above, but the JSON path is useful for sharing a config across machines or scripting it into a setup tool.
// ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
// %APPDATA%\Claude\claude_desktop_config.json (Windows)
{
"mcpServers": {
"modelcouncil": {
"url": "https://modelcouncil.co/api/mcp",
"headers": {
"Authorization": "Bearer mc_live_paste_your_key_here"
}
}
}
}Quit and reopen Claude Desktop after editing. If both the Connectors UI and a JSON entry are configured for the same URL, the Connectors entry wins.
Other MCP clients
ModelCouncil uses standard MCP Streamable HTTP transport. Any spec-compliant client can connect. For static-Bearer clients, the minimum config is the URL https://modelcouncil.co/api/mcp and an Authorization: Bearer mc_live_... header. For OAuth clients, point them at the URL and let them probe /.well-known/oauth-authorization-server for registration + auth endpoints.
Step 3: Use the tools
The AI client follows a find-or-create flow: list_projects first to discover existing projects, create_project if none match the topic, then query_council or query_diamond_mode against the chosen id.
list_projects
Lists your ModelCouncil projects. ALWAYS call this first — both to obtain a project_id and to check whether an existing project is a topic-match for the user's question (reuse beats creating duplicates).
(no arguments)"Use list_projects to see my projects"
create_project
Creates a new project when list_projects returns no good fit. Name it after the DECISION TOPIC (e.g. 'Q3 GTM strategy'), not the specific question. New projects start empty — for document-grounded answers, upload files via the web app or pass the relevant context inline through query_council's additional_context. Per-user cap of 100 unarchived projects prevents runaway creation.
name: string (required, 3-80 chars, trimmed) — topic-shaped noun phrase
description: string (optional, ≤500 chars) — 1-2 sentences explaining the project's scope"Use create_project to start a "Q3 GTM strategy" project before asking the council about pricing changes."
query_council
Synchronous standard query. Returns a Decision Board (recommendation + risks + consensus + disagreements + rare finds) within ~30-60 seconds. Defaults to Pro tier — MCP users are typically on consequential decisions; pass model_tier='fast' for cheaper iteration.
project_id: UUID (required, from list_projects or create_project)
question: string (required, ≤10000 chars)
model_tier: "pro" (default — $0.10-0.20 per query) | "fast" ($0.04-0.08 per query)
model_selection: array of "anthropic" | "openai" | "google" | "xai" (optional, 2-3)
additional_context: string (optional, ≤500K chars) — conversation history to send alongside
allow_web_search: boolean (optional, default false) — when true, runs one Google-grounded search (Gemini Flash) before dispatching; every model deliberates over the same evidence block. ~$0.003 extra, rolled into the $10 cap. Use for questions about current/recent info not in your docs."Use query_council against project <id> to ask: "Should we ship the new pricing model this quarter?""
query_diamond_mode
Async deep deliberation. Models cross-review each others' responses before synthesis. Pro tier (default): ~$0.20-2.00 per query typical (avg ~$0.95 observed in the last 30 days; p95 ~$2.12); heavy role-prompts or 100K+ token projects can reach ~$2.35. Fast tier: ~$0.20-0.50 projected (no recent production samples; new Fast lineup is 3-5× more expensive per token than historical). Returns a query_id immediately; poll with get_query_status.
project_id: UUID (required, from list_projects or create_project)
question: string (required, ≤10000 chars)
model_tier: "fast" | "pro" (default: "pro" — recommended for high-stakes)
model_selection: array of "anthropic" | "openai" | "google" | "xai" (optional, 2-3)
allow_web_search: boolean (optional, default false) — when true, runs one Google-grounded search (Gemini Flash) before Round 1; every R1 model deliberates over the same evidence block, R2 cross-review and synthesis inherit it. ~$0.003 extra, folded into the final Diamond bill. Use for questions about current/recent info not in your docs."Use query_diamond_mode for deep deliberation on: "What's the right go-to-market for our enterprise tier?""
get_query_status
Look up a query by ID. Returns the Decision Board when complete, or the current phase + estimated time remaining for in-flight queries. Also useful for re-fetching the FULL response when Claude/ChatGPT summarized the original tool reply — see 'Getting the full response back' below.
query_id: UUID (required, from query_diamond_mode response or query_council)"Use get_query_status to check query <id>"
Getting the full response back
Claude.ai and ChatGPT often summarize the council's response rather than quoting it verbatim — that's the AI client's choice, not a ModelCouncil truncation. The tool itself returns the complete output every time. Four ways to see everything:
- Click the "View on ModelCouncil →" link. Every tool response prepends a deep-link to the specific Decision Board / project in your dashboard. The link survives AI summarization — even when Claude truncates the rest, you can one-click open the full untruncated board.
- Ask explicitly: "Show me the full Decision Board verbatim" or "Quote the entire tool response — don't summarize."
- Open your dashboard: every MCP query mirrors into ModelCouncil with the full content untouched. Visit your projects at modelcouncil.co/projects.
- Re-fetch via query_id: ask the AI to call
get_query_statuswith the query_id from the original response.
Billing & limits
Same per-query economics as the web dashboard. The numbers below are observed production ranges as of May 2026 — your actual cost scales with context size and selected model tier.
- Standard queries: typically $0.04–$0.20 per call. Lower end is Fast tier on a small project; upper end is Pro tier with significant context.
- Diamond Mode: typically $0.20–$1.00 per call, up to ~$2 on very large 200K-token projects. Diamond makes ~3× the gateway calls of a standard query (R1 + R2 cross-review + synthesis).
- $10 per-query hard cap. MCP queries estimated above $10 are rejected before dispatch (no interactive UI to confirm higher-cost runs). For exceptional cases, use the web app.
- $50/day default cap per key. Adjust up to $200/day in Settings → API Keys & MCP → Edit. The daily cap is a safety net, not a fraud-prevention mechanism.
- Insufficient-balance pre-check. If your remaining balance can't cover the estimated cost of the query, you'll get a structured
insufficient_balanceerror — no half-finished bill. Top up and retry. - 60 requests/minute rate limit per key. Independent from your web-UI rate limit — a leaked key won't exhaust your web budget.
- 1 concurrent query per user. If you fire a second query (from any client) while one is in-flight, you'll get a 409. Use get_query_status to check status.
- Credit-balance footer. Every tool response includes your remaining balance — your MCP client renders it inline.
Security
- Treat your API key like a password. Anyone with it can spend your credits up to the daily cap. Store it in your MCP client config or a password manager.
- Rotate quarterly. Generate a new key in Settings, update your MCP client config, then revoke the old one. Revoked keys stop working immediately.
- Revoke if a device is lost. Settings → API Keys & MCP → trash icon. One click.
- Cross-account isolation. Your API key can only query your projects. Even with another user's project ID, the call returns 404.
- We log query attribution (user ID, project ID, cost, latency) but never log your raw API key, question, document content, or model responses.
Troubleshooting
401 Unauthorized
Cause: Wrong header format, missing Bearer prefix, or the key was revoked.
Fix: Check your MCP client config — the header must be exactly `Authorization: Bearer mc_live_...`. If the key was revoked, generate a new one.
404 Not Found on /api/mcp
Cause: MCP server isn't enabled in this environment, or the URL is wrong.
Fix: Use the exact URL https://modelcouncil.co/api/mcp. If you're testing in a Vercel preview or staging environment, confirm MCP_ENABLED is set there.
429 Rate Limit
Cause: More than 60 requests per minute on this key.
Fix: Slow down. Or split traffic across multiple keys.
"You already have a query in progress" (409)
Cause: MCP enforces 1 concurrent query per user across the web app and all MCP clients.
Fix: Wait for the current query to complete (poll via get_query_status), or wait ~5 minutes for it to time out.
Diamond mode never finishes
Cause: The MCP transport may time out before the multi-minute Diamond flow completes. This is expected for Diamond — it's why it's async.
Fix: Poll with get_query_status. If you disconnect entirely, our server-side abandonment recovery picks it up within 12 hours and emails you a deep-link to the Decision Board.
insufficient_balance error
Cause: Your remaining credit balance is below the estimated cost of this query (e.g. $0.08 balance, $0.20 estimated Pro query).
Fix: Top up at Settings → Usage & Billing → Add funds, then retry. The pre-check is conservative — sometimes the actual cost lands lower than the estimate, but we won't dispatch until you can cover the worst case.
Claude.ai connector stuck on "Authorize" / shows cached state
Cause: Claude.ai caches the OAuth registration per server URL. If you connected before our OAuth flow shipped, or if you delete the connector and re-add it too quickly, Claude.ai may still send a stale client_id.
Fix: Remove the connector entirely (Settings → Connectors → trash icon), wait ~30 seconds, then re-add by pasting the URL. The next authorization mints a fresh client registration.
401 with WWW-Authenticate header pointing to /.well-known/oauth-protected-resource
Cause: Your access token expired (OAuth-issued tokens have a finite TTL) and your client didn't refresh in time.
Fix: MCP clients that speak OAuth should auto-refresh. If yours doesn't, re-authorize the connector. For manually-issued mc_live_ keys, check that the key wasn't revoked in Settings → API Keys & MCP.