BetaServer tools are currently in beta. The API and behavior may change.
The openrouter:fusion server tool gives any model access to multi-model deliberation. When your model decides a prompt benefits from multiple perspectives, it invokes this tool — a panel of models answers in parallel, a judge compares their responses, and the structured analysis comes back to your model for the final answer.This is the same pipeline behind the openrouter/fusion model alias and the fusion plugin. Using the server tool directly gives you the most control: choose your own outer model, combine it with other tools, and configure the panel and judge independently.
The tool’s description tells the model to call openrouter:fusion only when a task genuinely benefits from multiple perspectives — research questions, multi-domain critique, “compare and contrast” prompts, or anything where being wrong is expensive. Simple tactical prompts won’t trigger it.To force fusion on every request, set tool_choice: "required". See Forcing fusion on every request.
Models that form the panel. Each runs in parallel with openrouter:web_search and openrouter:web_fetch enabled. 1–8 models allowed.
model
Your outer model
The judge that produces the structured analysis JSON. Defaults to the same model handling your request.
max_tool_calls
8
Max tool-calling steps each panel model and the judge may take in their openrouter:web_search / openrouter:web_fetch loop before they must return text. Range 1–16.
max_completion_tokens
Provider default
Max output tokens (including reasoning) per inner panel/judge call. Keeps reasoning-heavy models from exhausting their budget before producing visible text.
reasoning
Provider default
Reasoning config forwarded to the panel and judge calls — an object with optional effort and max_tokens.
temperature
Provider default
Temperature (0–2) forwarded to the panel calls. The judge always runs at temperature 0.
On success, the tool result contains the structured analysis and the raw panel responses:
{ "status": "ok", "analysis": { "consensus": ["Points all or most panel models agreed on"], "contradictions": [ { "topic": "...", "stances": [{ "model": "...", "stance": "..." }] } ], "partial_coverage": [ { "models": ["..."], "point": "Only some models covered this" } ], "unique_insights": [ { "model": "...", "insight": "Something only one model raised" } ], "blind_spots": ["Topics no panel model addressed"] }, "responses": [ { "model": "anthropic/claude-opus-4.5", "content": "..." }, { "model": "openai/gpt-4.1", "content": "..." }, { "model": "google/gemini-2.5-pro", "content": "..." } ]}
When some panel models error but at least one succeeds, the result still has status: "ok" and adds a failed_models array describing which ones failed and why.
If the panel succeeds but the judge fails — an upstream error, an empty completion, or output that isn’t valid analysis JSON — the tool does not error. It returns status: "ok" with the raw panel responses and simply omitsanalysis. Your model can still write the final answer from the panel responses:
openrouter:web_search and openrouter:web_fetch are enabled on both the panel and the judge calls, so models can pull fresh sources while they answer and analyze. The judge compares the panel responses rather than merging them: it treats what all or most models agree on as higher-confidence consensus, surfaces contradictions, preserves unique insights from individual models, and flags blind spots none of them addressed. The outer model writes the final answer from that analysis — so the result isn’t a simple majority vote.
Inner fusion calls carry an x-openrouter-fusion-depth header. Panel and judge models cannot recursively invoke openrouter:fusion — the plugin refuses to inject the tool a second time, keeping deliberation bounded to a single level.