Dual Model MCP Server
The Dual Model MCP Server lets you send a single prompt to two AI models (Claude Opus 4.8 and GPT-5.5) simultaneously via OpenRouter and receive structured, multi-perspective responses in one call.
Parallel querying – Both models respond at the same time; if one fails, you still get the other's answer.
Structured responses – Each model returns a 6–8 paragraph analysis covering core analysis, context, evidence, arguments, counter-arguments, reflection, and conclusion.
Custom system prompts – Override the default structured prompt with your own.
MCP client integration – Works with clients like Cherry Studio or Claude Desktop.
Autostart – Can be configured to launch on boot via Windows Task Scheduler.
Customizable models & response length – Change which models are called via OpenRouter and adjust max tokens (default: 6000).
Use cases – Decision-making, quality assurance, fact cross-checking, and creative exploration by comparing two independent AI outputs side-by-side.
Allows querying OpenAI GPT-5.5 via OpenRouter, enabling side-by-side comparison with Claude for comprehensive analysis and cross-checking.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Dual Model MCP ServerWhat are the arguments for and against nuclear energy?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Dual Model MCP Server
An MCP server that queries multiple LLMs (default: Claude Fable 5.1 and OpenAI GPT-6 Astra, reasoning effort high) in parallel via OpenRouter and returns side-by-side responses, optionally with an automatic synthesis step that compares them. A second tool, ask_gpt, asks a single cheap model (default GPT-5.6 Sol) for an everyday second opinion.
Runs locally over stdio (Claude Code, Claude Desktop, Cherry Studio) and remotely over Streamable HTTP – so you can use it from claude.ai on the web and in the mobile apps as a custom connector.
The Problem
Sometimes a single AI model gets stuck in a particular perspective or reasoning pattern. You ask a question, get a good answer, but you know there's another angle, another approach that might be equally valuable (or better). Switching between different models, waiting for separate responses, losing context. It's tedious.
Related MCP server: cognition-wheel
The Solution
Dual Model MCP Server sends your prompt to multiple models simultaneously, giving you independent, high-quality responses side-by-side. Compare, contrast, combine, all in one go. Perfect for:
Decision-making: See technical/medical/business/research/legal questions from multiple angles
Quality assurance: Spot blind spots in reasoning or missed edge cases
Creative work: Get diverse perspectives on problems
Validation: Cross-check facts and arguments between models
Features
Parallel queries – All models respond simultaneously, not sequentially
Resilient – If one model fails, you still get the others' answers instead of a total error
Synthesis step (optional) – A third, cheap model compares the answers: convergences, contradictions, unique points
Token usage reporting – Every response includes per-model and total token counts
Configurable without rebuild – Models, reasoning effort, max_tokens, temperature, timeout via
.env; per-call overrides via tool parametersN models, not just two – Configure any number of OpenRouter models
Structured responses – Default system prompt produces 6-8 concise paragraphs (analysis, context, evidence, arguments, alternatives, reflection, conclusion); custom system prompts supported
Easy integration – Works with Claude Code, Claude Desktop, Cherry Studio, or any MCP client
Remote access – Optional HTTP mode serves the same tool over HTTPS for claude.ai (web/mobile) via custom connector, secured by a secret URL path
Quick Start
Installation
git clone https://github.com/Firnschnee/dual-model-mcp.git
cd dual-model-mcp
npm installnpm install builds the server automatically (via the prepare script).
Setup
Get an OpenRouter API key:
Go to openrouter.ai
Create an account / sign in
Copy your API key from settings
Create
.envfile (copy the template):cp .env.example .envThen edit
.envand paste your key:OPENROUTER_API_KEY=your_actual_api_key_here.envis gitignored, so your key never lands in version control. The server loads.envrelative to its own location, so it works no matter which working directory your MCP client uses.Verify:
npm startYou should see:
✅ Server läuft! Warte auf MCP-Anfragen via STDIO...Stop it with
Ctrl+C. You do not need to keep it running: MCP clients start the server themselves as a child process whenever they need it.
Usage
With Claude Code
claude mcp add --scope user dual-model -- node C:/path/to/dual-model-mcp/build/index.jsOr add it to a single project via .mcp.json in the project root:
{
"mcpServers": {
"dual-model": {
"command": "node",
"args": ["C:/path/to/dual-model-mcp/build/index.js"]
}
}
}Then ask Claude Code to use the query_dual_models tool, e.g. "Frag beide Modelle: ... und synthetisiere die Antworten."
With claude.ai (web & mobile)
claude.ai talks to remote MCP servers over Streamable HTTP. The HTTP entry point serves exactly that; you need a server with a public HTTPS domain and a reverse proxy.
On your server: clone, install, and configure:
git clone https://github.com/Firnschnee/dual-model-mcp.git cd dual-model-mcp && npm ciIn
.env(or a systemdEnvironmentFile), set your API key plus:MCP_PATH_SECRET=$(openssl rand -hex 24)Run the HTTP entry point (ideally as a systemd service):
npm run start:httpIt binds to
127.0.0.1:3777and serves MCP at/<MCP_PATH_SECRET>/mcp. Requests to any other path get a bare 404.Route it through your reverse proxy. Caddy example:
your-domain.example { handle /<MCP_PATH_SECRET>/mcp { reverse_proxy 127.0.0.1:3777 } }Add the connector in claude.ai: Settings → Connectors → Add custom connector →
https://your-domain.example/<MCP_PATH_SECRET>/mcp. The tool then works in web chats and the mobile apps.
Security model: the secret path is the only authentication – anyone who knows the URL can spend your OpenRouter credit. Keep the URL private, set a spending limit in the OpenRouter dashboard as a backstop, and rotate the secret (env file + proxy + connector URL) if it ever leaks. For anything beyond personal use, put proper OAuth in front instead.
With Cherry Studio
Open Cherry Studio
Settings → MCP Servers → Add
Fill in:
Name:
Dual Model MCPCommand:
nodeArguments:
C:\path\to\dual-model-mcp\build\index.js
Save & restart Cherry Studio
Choose the MCP server in the chat window, ask a question, and all models respond
Tool parameters
query_dual_models accepts:
Parameter | Type | Default | Description |
| string | (required) | The prompt sent to all models |
| string | structured 6-8 paragraph prompt | Custom system prompt |
| string[] | from | OpenRouter model IDs for this call only |
| number | 32000 | Max output tokens per model (reasoning tokens count against this) |
|
|
| Reasoning effort, passed through OpenRouter's unified |
| number | unset | Sampling temperature (0-2). Ignored by OpenAI and Anthropic reasoning models |
| boolean | false | Adds a comparison step: convergences, contradictions, unique points |
ask_gpt is the everyday variant: one cheap model (default GPT-5.6 Sol at effort high), no synthesis, same output format. It accepts prompt, system_prompt, max_tokens and effort. Keeping it as a separate tool means a caller that wants a quick second opinion does not accidentally trigger the expensive escalation tool.
Configuration
All settings live in .env (see .env.example):
Variable | Default | Description |
| (required) | Your OpenRouter API key |
|
| Comma-separated model IDs to query in parallel |
|
| Reasoning effort for all models ( |
|
| Model behind the |
|
| Reasoning effort for |
|
| Max output tokens for |
|
| Model for the synthesis step |
|
| Max output tokens per model, including reasoning tokens |
| unset | Sampling temperature; only sent when set |
|
| Per-request timeout |
| (required in HTTP mode) | Secret URL path segment, min. 16 chars |
|
| HTTP bind address (keep local behind a reverse proxy) |
|
| HTTP port |
No rebuild needed after changing .env; the MCP client restarts the server on demand.
Stack & Dependencies
Aspect | Technology |
Language | TypeScript |
Protocol | Model Context Protocol (MCP) |
API | OpenRouter (supports 200+ models) |
Runtime | Node.js 20+ (native |
Build | tsc + npm |
Cost & Token Usage
This is an escalation tool, not a daily driver: the default models are the most expensive tier of both vendors (roughly $10 in / $50 out per million tokens each), and max_tokens defaults to 32000 per model so that effort: high has room to think and still answer. Reasoning tokens count against max_tokens on every provider; if the budget runs out before the answer starts, the tool says so instead of reporting an empty response, and a truncated answer is flagged as such. A single hard question can cost a dollar or two.
Note on claude.ai: the web client gives up on a tool call after roughly four minutes. Calls that run longer are billed by OpenRouter but never reach the chat. The HTTP entry point aborts in-flight model calls when the client disconnects, and ask_gpt defaults to effort high rather than xhigh for that reason. Claude Code over stdio has no such limit. Every response reports actual token usage per model and in total, so you can see what a query cost. For quick factual questions, pass a smaller max_tokens per call.
Testing
npm testRuns a minimal smoke test: starts the built server, sends one short prompt with a one-sentence system prompt, prints the response. Costs a few hundred tokens.
Contributing
Found a bug? Have an idea? Fork & submit a PR!
License
MIT License – See LICENSE file
Available Tools
1 toolquery_dual_modelsMulti-Modell-AnfrageA
Schickt eine Prompt parallel an mehrere Modelle via OpenRouter (Standard: anthropic/claude-opus-4.8, openai/gpt-5.5). Liefert alle Antworten nebeneinander, optional mit Synthese (Konvergenzen, Widersprüche, Unikate). Standard-System-Prompt: strukturierte Antwort in 6-8 Absätzen.
| Name | Required | Description | Default |
|---|---|---|---|
| models | No | Optional: OpenRouter-Modell-IDs für diesen Aufruf. Standard: anthropic/claude-opus-4.8, openai/gpt-5.5 | |
| prompt | Yes | Die Prompt für alle Modelle | |
| max_tokens | No | Optional: max_tokens pro Modell. Standard: 6000 | |
| synthesize | No | Optional: Zusätzlicher Vergleichsschritt über alle Antworten (Konvergenzen, Widersprüche, Unikate). | |
| temperature | No | Optional: Temperature. Standard: 0.7 | |
| system_prompt | No | Optional: Custom System-Prompt. Falls leer: Standard-Prompt (strukturiert, 6-8 Absätze). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes parallel query behavior, return of multiple responses, optional synthesis, and default system prompt. No annotations provided, so description carries full burden. It is transparent about the main actions and does not contradict annotations (none exist). Could mention auth or rate limits, but overall sufficient for a read-like operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. Each sentence adds critical information: first on core functionality, second on options and defaults. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no output schema, and no annotations, the description covers the main flow (parallel, multiple models, synthesis, defaults). It could detail the return format (e.g., array of responses), but for a multi-model query tool, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, baseline 3. Description adds value by specifying default models (anthropic/claude-opus-4.8, openai/gpt-5.5), mentioning 'parallel' execution, and describing the standard system prompt behavior (6-8 paragraphs), which is absent in the schema parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it sends a prompt in parallel to multiple models via OpenRouter and returns responses side by side with optional synthesis. Verb 'schickt' and resource 'Modelle via OpenRouter' are specific and distinct. No sibling tools exist, so no differentiation needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for comparing multiple model responses or obtaining a synthesized output. Mentions default models, default system prompt, and optional synthesis. Lacks explicit when-not or alternatives, but given no siblings, the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.1- Changed
query_dual_models8 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / max_tokensAdded value: +{ + "description": "Optional: max_tokens pro Modell. Standard: 6000", + "exclusiveMinimum": 0, + "type": "integer" +} - added
Input schema / properties / modelsAdded value: +{ + "description": "Optional: OpenRouter-Modell-IDs für diesen Aufruf. Standard: anthropic/claude-opus-4.8, openai/gpt-5.5", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / prompt / descriptionPrevious value: -"Die Prompt für beide Modelle"New value: +"Die Prompt für alle Modelle" - added
Input schema / properties / synthesizeAdded value: +{ + "description": "Optional: Zusätzlicher Vergleichsschritt über alle Antworten (Konvergenzen, Widersprüche, Unikate).", + "type": "boolean" +} - changed
Input schema / properties / system_prompt / descriptionPrevious value: -"Optional: Custom System-Prompt. Falls leer: Standard-Prompt (strukturiert, prägnant, 6-8 Absätze)."New value: +"Optional: Custom System-Prompt. Falls leer: Standard-Prompt (strukturiert, 6-8 Absätze)." - added
Input schema / properties / temperatureAdded value: +{ + "description": "Optional: Temperature. Standard: 0.7", + "maximum": 2, + "minimum": 0, + "type": "number" +}
1 tool update
v1.0.0- First observed
query_dual_models
TDQS
Scored across 1 tool
With only one tool, there is no possibility of confusion or ambiguity between tools.
The single tool name 'query_dual_models' is descriptive and follows a clear verb_noun pattern; consistency is trivially maintained.
The server has a narrow, focused purpose of querying dual models, and one tool fully covers that functionality without excess or deficiency.
The tool provides complete coverage for the server's domain: sending queries to multiple models and optionally synthesizing results. No obvious gaps exist.
Maintenance
Related MCP Connectors
Multi-model AI debates: GPT-4o, Claude, Gemini & 200+ models discuss, then synthesize insight.
Fan out deep research across multiple AI providers, synthesize into one unified report.
Measure what ChatGPT, Claude, Gemini and 4 more AI engines say about any business. No auth.
Multiple AIs peer-review and debate your question, then return one fact-checked answer.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceQuery multiple AI models (GPT-4, Claude, Gemini, Grok) in parallel for diverse perspectives. Get different expert viewpoints when stuck or need enhanced reasoning.1MIT
- AlicenseAqualityDmaintenanceEnables querying multiple AI models in parallel (Claude, Gemini, O3) and synthesizing their responses using anonymous analysis to reduce bias, providing a comprehensive answer.145 npm193MIT
- AlicenseNot gradedqualityDmaintenanceSends questions to Gemini and Claude CLI simultaneously and returns their answers side by side.MIT

polydev-aiofficial
AlicenseNot gradedqualityDmaintenanceQueries multiple AI models simultaneously (GPT 5.2, Claude Opus 4.5, Gemini 3, Grok 4.1) via a single API call to provide diverse expert perspectives and consensus recommendations.MIT