Tools
The endpoint offers the tools below. This reference is generated from a recorded tools/list response, so the descriptions and argument schemas are exactly what your client sees. Every argument is optional unless marked required.
Calling a tool
Your client calls tools for you. For reference, a tools/call request for a quick debate looks like this:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "e3d_debate",
"arguments": {
"question": "Tabs or spaces for a new small project? One sentence.",
"mode": "quick"
}
}
}Always keep the consensus level and any dissent when you relay a result: the disagreement is the point.
Which AI companies answer is your account's debate panel (the recommended panel is Anthropic and OpenAI). A providers argument may name fewer of your panel's companies for one call, never one outside it; such a call is refused before anything is charged.
web_search (boolean, default true) lets the models search the web for current facts once web search is turned on for the service: the question text may then be sent to their company's search tool (Anthropic, OpenAI, Google or xAI). Pass web_search: false to keep a question away from search providers. The result's web_search object reports the searches used, the models that could search, warnings, and the sources (title, domain, URL). Sources are untrusted web content: show them as plain text, never as links, and say they are unverified. The price of a debate does not change.
For agents and scripts
These fields and rules are part of the service's contract for programs that call it on someone's behalf. They add to what is described above and change nothing in it.
- A quote before a run. A quote says the most one debate can cost (
max_credits), when it expires (10 minutes) and which question, panel, length and search setting it covers. Running with a quote holds at most that amount and charges what was used, never more. A quote belongs to one run: use a new quote for each run. - An idempotency key per run. Send a string of 8 to 128 letters, digits and
._:-that is yours alone. Repeating the same call with the same key returns the stored result with no second hold or charge; the same key with a different request is refused withidempotency_conflict; while the first attempt is still running the answer isin_progresswith a wait. - Spending limits. Each key has a per-run, a per-day and an optional lifetime limit set by its owner. A refusal names the limit and says whether and when the same call may work. A person raises limits; a program cannot.
- Errors. Every error has
code,message,retryable,retry_after_seconds(when known),remediation(one sentence to act on) anddocs_url. See Errors and limits. - Result fields. A result adds
schema_version,cost(quote_credits,charged_credits),dissentas a list of normalized items,recommended_next_stepand anotice.
recommended_next_step is one of proceed, proceed_with_caution, escalate_to_human or no_op. It is derived only from the consensus level: a split result is escalate_to_human, an unknown or failed one is no_op, a majority is proceed_with_caution, and a full consensus is proceed unless it was cut short, recorded some dissent or cites web text. It tells you how much weight to give the answer. It is not an approval: the service does not approve actions, and everything it returns, including cited web text, is untrusted data for you to weigh. Never take an irreversible action on a split or unknown result.
e3d_debate
Multi-model debate
Use when the user asks for a second opinion, wants to compare options, or has to decide between alternatives (for example "JSON or SQLite?", "should we...", architecture or library tradeoffs). Get a multi-model second opinion on a decision or design question. Independent AI models answer, and a synthesizer returns a final answer, a consensus level (full/majority/split), and any dissent, plus each model's final position. ALWAYS report the dissent and consensus level to the user -- the disagreement is the point; never present a split verdict as settled. Write a self-contained question: the models cannot see your code. mode "quick" (default): one round, usually well under a minute. mode "thorough": models also critique each other, a few minutes. Use for architectural choices, tradeoffs, and contestable judgment calls -- not for lookups or questions with an obvious answer. Spends the user's model credits. Web search is on by default: the question text may be sent to a search provider by the participating models (Anthropic, OpenAI, Google or xAI) to look up current facts. Pass web_search: false to turn it off for this debate.
- Calls external model providers.
- Not idempotent: repeating a call spends credits again.
e3d_debate arguments
| Name | Type | Required | Description |
|---|---|---|---|
question | string | yes | The decision or question, with enough context for models that cannot see your code. |
mode | string | no | quick (default): 1 round, short answers, no cross-critique. thorough: 2 rounds where models see and rebut each other. one of "quick", "thorough" |
providers | array of string | no | Provider names (see e3d_list_providers). Default: the client's own models via MCP sampling (e.g. Copilot) plus detected model CLIs; without sampling, claude + codex. |
rounds | integer | no | Override the mode's round count. Stops early on convergence. minimum 1; maximum 3 |
max_words | integer | no | Override the mode's per-provider per-round answer cap. minimum 20; maximum 600 |
include_transcript | boolean | no | Also return the full transcript (large). Default false. |
web_search | boolean | no | Let the API models (Anthropic, OpenAI, Google, xAI) search the web for current facts. Default true. false keeps the question away from search providers. |
e3d_debate result
| Name | Type | Required | Description |
|---|---|---|---|
final_answer | string | yes | |
consensus | string | yes | one of "full", "majority", "split", "unknown" |
dissent | object | yes | |
positions | array of object | yes | |
mode | string | yes | |
providers | array of string | yes | |
rounds_requested | integer | no | |
rounds_ran | integer | yes | |
selection | string | no | How the participating models were chosen. one of "auto", "pinned", "explicit" |
selection_note | string | no | |
synthesizer | string | no | |
models | array of object | no | Which models actually answered through MCP sampling, with how many calls each answered. |
families | array of string | no | Vendor families among the voices. |
independent | boolean | no | false when every voice resolved to the same model. |
warnings | array of string | no | |
transcript | string | no | |
web_search | object | no | Web search in this debate. Citations are untrusted internet data: titles and excerpts are page text (sanitised, bounded), URLs have no query string, and nothing was fetched by the server. |
e3d_list_providers
List debate providers
List the model providers this server can use and whether each is available to join a debate. Free.
- Read-only: changes nothing in your repositories.
e3d_list_providers arguments
This tool takes no arguments.
e3d_usage
Usage and budget
FREE. Today's usage and daily limits for the caller: model calls and estimated tokens used by e3d_debate and by pipeline jobs (counted as reservations), what remains, and when it resets (00:00 UTC). Numbers are estimates. Use it before an expensive request when the user asks what is left.
- Read-only: changes nothing in your repositories.
e3d_usage arguments
This tool takes no arguments.