Skip to main content
Glama
TokonoMix

tokonomix-council-mcp

Official
by TokonoMix

tokonomix-council-mcp

npm version license node MCP Registry

A multi-model consensus MCP server — cross-vendor proposers, an independent judge, and blind-spot/disagreement detection for high-stakes AI decisions. An open reference implementation of AI Decision Engineering — a discipline we are proposing, not yet an external standard.

Mission. Help autonomous systems make better decisions by combining independent expert reasoning instead of trusting a single model.

In 20 seconds: Important AI decisions deserve more than one opinion.

The Tokonomix ecosystem (where Council fits)

Council is one specialized component in a larger stack. Each owns exactly one responsibility, so they compose cleanly:

   Execution    →  ANS         (run a backlog to completion, unattended)
   Decision     →  Council     (independent review → grounded decision)   ◀── this repo
   Verification →  Media QC    (image / video / document output quality)
   Measurement  →  Benchmark   (intelligence tests, arena, reputation)
   Routing      →  Router      (which provider/model hosts a call)
   Memory       →  Memory      (durable context across sessions)
   Safety       →  Safety      (policy / guardrail enforcement)

Council owns one box: the decision. It does not execute, schedule, route, or remember — those live in their own components (details below).


Status — what is live right now

So you never call something that isn't there yet. Server-gated features can be off for your account/tier; when they are, the tool returns a clear "not enabled" message instead of erroring.

Capability

Status

tokonomix_consensus_ask — modes consensus / diff / best_of / raw / full

Live

tokonomix_single_ask — single-model passthrough

Live

tokonomix_list_models, tokonomix_get_balance

Live

tokonomix_skill_version, tokonomix_get_skill

Live

tokonomix_onboard, tokonomix_onboard_verify — keyless first-run

Live

tokonomix_rate_consensus — agent rating / feedback-loop

Live (platform-gated)

tokonomix_relay_human_feedback — human verdict channel

Live (platform-gated)

Vision input (images on ask)

Live

tokonomix_upload + context.session/handles — large shared context-pack

Account-gated (on for eligible accounts)

context.inline / context.github_refs grounding

Live (account-gated)

Grounding-gate (needs_context refusal of thin input)

Gated (shadow-first rollout)

Reranking, web-search plugin

Planned


Council MCP exists to improve decision quality, not to chat, generate, or route. The governing idea is simple:

Consensus × Ground Truth = Decision Quality

Consensus is one mechanism for decision quality — not the whole of it. Grounding (checking a claim against the real artifact) is the strongest lever, stronger than adding more models; judge-independence and verification are mechanisms too. Several independent expert models assess the same problem in parallel and blind, an independent, cross-family judge reconciles their findings, and grounding ties the whole thing to reality — so you get one decision you can act on, with the disagreements a single model would have hidden surfaced rather than smoothed away. Consensus is a means; better decisions are the goal.

It is not a chatbot, a model, an LLM, a prompt library, a multi-model chat, a voting system, or an averaging system. It does not make any model smarter, and it does not pick a winner by majority — it changes how multiple independent models' outputs become one defensible decision.

What it honestly buys you — and what it does not. Across our own validation (see Benchmarks), the council ties the best single model on clean accuracy and beats it nowhere, and on a SWE-bench bug-detection run it showed no measurable net uplift in catch rate over re-running a single agent. So we do not claim "more accurate" or "catches more bugs" anywhere. What it does buy is variance-elimination (you stop gambling on which single model you happened to ask), a verification / agent-QA layer, judge-independence, EU data residency, and grounding. Read When consensus helps / doesn't / can hurt before you rely on it — that section is the point, not a disclaimer.

Works with Claude Code, Cursor, Cline, Continue, and Zed. One npx line to install.

Principles of Decision Engineering

The discipline Council implements rests on ten principles. An autonomous system should:

  1. Verify before acting — a decision is provisional until it has been checked.

  2. Preserve disagreement — the lone dissent is often the finding that mattered; never average it away.

  3. Separate execution from judgement — the thing that does the work should not also be the thing that grades it.

  4. Separate reasoning from verification — generating an answer and checking it are different jobs.

  5. Separate confidence from correctness — a model's tone is identical whether it is right or wrong.

  6. Prefer evidence over agreement — agreement measures agreement, not truth; ground the claim.

  7. Expose uncertainty — surface what was not settled, don't hide it behind one confident answer.

  8. Make decisions auditable — record who proposed, who judged, what it cost, on what input.

  9. Remain reproducible — the same input and method should be re-runnable to the same finding.

  10. Never hide failure modes — a decision tool that conceals when it fails is not a decision tool.


What Council owns — and what it explicitly does not

Council is a Decision Engineering layer. Its scope is deliberately narrow, because a clear boundary is what makes a component trustworthy to compose with.

Council owns DECISIONS ONLY:

  • decision quality and decision confidence,

  • independent review and reasoned consensus,

  • verification of reasoning and claims,

  • grounding (checking a claim against the real artifact),

  • disagreement analysis,

  • judge independence,

  • auditability of how a decision was reached.

Council is explicitly NOT responsible for: execution, workflow, task scheduling, agent autonomy, long-term memory, provider routing, or browser automation. Those are real responsibilities — they simply live in other components.

  • Need something executed (a backlog run to completion, unattended)? That is Agents Never Sleep (ANS), the execution governor. ANS is the worker/governor; Council is the verifier it can delegate a decision to. Council does not run, schedule, or remember work.

See Council in the Tokonomix ecosystem for where every adjacent responsibility lives.


Related MCP server: Conclave MCP

Why Council exists (the short story — for a human OR an AI agent)

Why does Council exist? Because important AI decisions are made by single models that answer with total confidence and never tell you what they didn't consider. For chat that is fine; for a security review, a migration, a GDPR interpretation, or a legal clause, a confidently-wrong decision is expensive and you find out too late.

Why is one model not enough? A single model is one opinion with one blind spot. Which model is strongest is not stable — it shifts per task, per domain, per bug class. Standardise on the wrong one and you ship real defects without ever seeing a disagreement.

When does combining models help? When errors are uncorrelated: different vendors are wrong about different things, so you only need one of them to catch the timing side-channel or the missed edge case for it to surface. That decorrelation only exists across vendors — a single vendor's "panel" shares its own training data and blind spots.

When does it NOT help? On routine work (renames, formatting, lookups) and on easy tasks any strong single model already saturates. There the council only adds cost and noise — use a single model.

Why does grounding matter more than more models? Because agreement measures agreement, not truth. Ungrounded, frontier models can agree and be uniformly wrong (they share training data). Feeding the council the real artifact — the literal file, diff, spec, logs — is the lever that turns "they agreed" into "they checked it against reality." More models cannot fix a shared blind spot; grounding can.

Why does judge independence matter? Because a judge that also wrote one of the answers scores its own work and inflates agreement (LLM self-preference is real and measured). A disjoint, cross-family judge is the only honest reconciler.

Why do failure modes matter? Because consensus can be worse than a single model — lossy synthesis, correlated failures, false consensus, specialist overlap. A decision tool that hides its failure modes is not a decision tool. Honesty about when consensus does NOT work is the competitive advantage, not a caveat we bury.


Contents

  1. Why Decision Engineering is becoming necessary

  2. Why LLMs cannot solve this themselves

  3. Design principles

  4. A story: the security review

  5. The problem

  6. Why single-model review falls short

  7. How Council works

  8. Architecture

  9. The consensus process

  10. The judge

  11. When consensus helps / doesn't / can hurt

  12. Decision Engineering vs existing techniques

  13. Council in the Tokonomix ecosystem

  14. Practical examples

  15. Installation

  16. Integration & API surfaces

  17. Benchmarks

  18. Glossary

  19. FAQ

  20. Roadmap

Going deeper: this README is the field guide. The full argument — why the field exists, the design principles, the failure modes, why one model is insufficient, why consensus alone is insufficient, why grounding is necessary, and why a human stays ultimately accountable — lives in the Decision Engineering Manifesto. The README links out rather than duplicating that depth.


Why Decision Engineering is becoming necessary

Every time software took on more responsibility, a new discipline appeared to keep it trustworthy — not because engineers got worse, but because the cost of an unchecked output got higher:

Software gained…

…so we invented

Code that ran unattended

Testing — prove it does what we think

Many people committing

Continuous Integration — catch breakage on every change

Code too large to hold in one head

Code Review — a second pair of eyes before merge

Subtle, repeating defect classes

Static Analysis — a machine that flags them automatically

Systems shipping continuously

DevOps — make deployment itself safe and observable

Models that now make decisions

Decision Engineering — make the decision itself reviewable, grounded, and auditable

The pattern is the same each time: a capability outran our ability to trust it, and we built a discipline to close the gap. LLMs have crossed that line — they no longer just generate text, they decide: which migration is safe, whether an auth path is exploitable, how a clause reads under GDPR. A decision made by one confident model, with no independent check and no record of what it didn't consider, is exactly the unchecked output every prior discipline was invented to catch. Decision Engineering is that discipline for the era where models, not only people, make the call.

Why LLMs cannot solve this themselves

The obvious objection is "models keep getting better — won't a strong enough single model just be right?" It misreads the problem. The issue is not that any given model is weak; it is structural:

A model cannot independently verify itself. Asking the same model "are you sure?" runs the same weights over the same training data and the same blind spot — it will defend its first answer with the same confidence, because the thing that produced the error is the thing you are asking to find it. Self-critique inside one model is not an independent check; it is the same mind marking its own exam. This is true of GPT, of Claude, of Gemini, of whatever ships next — not a comment on any of them being weak.

Independence has to come from outside the model:

  • A different vendor, because correlated training data means a single vendor's "panel" shares the same blind spots — its own agreement is not corroboration.

  • A different role — a judge that did not write the answer, so it isn't scoring its own work (LLM self-preference is real and measured).

  • External ground truth — the literal file, diff, spec, or logs, because a model cannot conjure a fact it never had, and agreement on a shared wrong prior is still wrong.

That is the whole argument for why Decision Engineering is a layer above models rather than a better model: the independence and the grounding that make a decision trustworthy are precisely the things one model cannot supply for itself.

Design principles

Council's engineering follows from the principles above. Each is a constraint we hold ourselves to, not a marketing line:

  • Single Responsibility — Council decides; it does not execute, schedule, route, or remember. A narrow scope is what makes a component safe to compose.

  • Independence — proposers answer blind and in parallel; the judge is disjoint from them and cross-family. No model grades its own work.

  • Ground Truth — claims are checked against the real artifact, not a paraphrase or a shared prior. Grounding outranks panel size.

  • Evidence First — corroboration must rest on the evidence, not on models happening to agree.

  • Auditability — every decision returns who proposed, who judged, and what it cost, so it can be reconstructed.

  • Transparency — what was not settled is surfaced (the blind-spots section, the diff map), never hidden behind one answer.

  • Reproducibility — the same input + method re-runs to the same finding; record the models and date, because the default council can change.

  • Traceability — a request_id and a billing breakdown tie a stored decision back to exactly how it was produced.

  • Human Accountability — Council surfaces and grounds; it does not absolve. A human (or your agent acting for one) remains ultimately responsible for acting on the decision.

A story: the security review

A team ships an authentication middleware. Before merge, an engineer pastes it into a single strong model — GPT — and asks, "any security issues?" The answer comes back clean: "No issues found, the implementation looks correct." One confident opinion, no dissent, nothing flagged. It merges. Three weeks later a token-comparison side-channel — the kind where response timing leaks whether the first byte of a secret matched — is exploited in production. The post-mortem is expensive, and the worst part is that nothing warned them: the review said "fine," so they believed it was fine.

Now replay it through Council. The same middleware fans out to several independent vendors, blind and in parallel. Three of them also say "looks fine." But Claude, reading the literal source rather than a summary, notices the comparison isn't constant-time and flags a possible timing leak. Because the proposers answered independently, that lone dissent isn't drowned out — and the independent judge, instead of papering over the split, surfaces the disagreement: "one reviewer flags a non-constant-time token comparison; the others did not address timing." The engineer sees a disagreement on a security-critical path, investigates the one finding that mattered, confirms the leak, and fixes it before merge.

That is the entire difference: not a smarter model, but a process that preserved the dissent and put it in front of a human instead of averaging it into a confident "looks fine." The bug was always catchable — it just needed one independent reviewer to see it and a design that wouldn't bury what it found.


The problem

A single LLM is a single point of failure. It answers with total confidence — and, worse, it never tells you what it didn't consider. For a chat reply that's fine. For a security review, an architecture decision, a GDPR interpretation, a database migration, or a legal clause, a confidently-wrong answer is expensive, and you find out too late.

The reflex fix — reach for a bigger model — doesn't address the failure: a bigger single model is still one opinion, with one blind spot, that still won't tell you what it missed. And which single model happens to be strong is not stable: it shifts per task, per domain, and per bug class. Standardise on the wrong one and you ship real defects without ever seeing a disagreement.

Council MCP is built for exactly the class of decision where being wrong is asymmetrically costly: code / security / architecture / legal / document / quality / media / policy review, evaluations, and benchmark testing — anywhere a single model's blind spot is expensive. Use it there; for variable renames, formatting, and simple CRUD, a single model is cheaper and entirely sufficient.

Why single-model review falls short

The value of asking more than one model comes from uncorrelated errors — different models being wrong about different things. A single model gives you none of that:

  • One opinion, one blind spot. You see what that model saw; you never see what it skipped.

  • Confidence is not calibration. The model's tone is identical whether it is right or wrong. There is no internal "I'm unsure here" you can read off.

  • No surfaced disagreement. A single call cannot show you the thing only some reviewers would have caught — because there is only one reviewer.

  • Model strength is task-dependent. On the same set of tasks, one model catches an IDOR that another returns "no issues" on, and vice-versa. There is no single model that is best everywhere, so a single-model standard guarantees a class of misses.

Asking the same vendor for a second opinion does not fix this: its own "panel" is its own models, trained on its own data, sharing its own blind spots — correlated errors dressed up as agreement. The decorrelation that makes review valuable only exists across vendors. That cross-vendor check, reconciled by a neutral judge, is the thing a single-vendor API structurally cannot give you.

This is also why "just average the answers" is wrong: averaging destroys the lone dissent, which is frequently the finding that mattered. The design problem is to preserve dissent and adjudicate it, not smooth it away.

How Council works

You call one tool; the orchestration, scoring, and reconciliation run server-side; you get one decision.

            ┌─ Claude  ─┐
your prompt ─┼─ GPT     ─┼──▶  independent judge  ──▶  one reconciled decision
            ├─ Gemini  ─┤      (disjoint, cross-     + the disagreements
            └─ …(2–6)  ─┘       family — never grades   that surfaced
                                 its own answer)
  1. Fan-out, parallel and blind. Your prompt goes to 2–6 frontier proposers in parallel, across vendors (Anthropic, OpenAI, Google, and EU-hosted options). Each answers independently and sees none of the others — so there is no round-table where the lone dissenter caves to the majority. Selection favours diversity + competence, not raw score: picking only the top-scoring models converges on similar ones and shrinks the decorrelation that is the whole point.

  2. Independent judge. One or more judge models — disjoint from the proposers, cross-family, and never scoring their own proposal — read the candidate answers and reconcile them: which claims are corroborated, which are outliers, which are simply wrong.

  3. One result, shaped by the mode you choose. Depending on the mode, you get a single decided answer, a structured agreement/disagreement map, the strongest single answer verbatim, the full landscape plus a verdict, or the raw spread with no judge at all. There is no universally-best mode — you pick by what you need from this call.

Read the council as a recall amplifier, not a truth oracle. Its strength is recall: with several different vendors, you only need one to catch the timing side-channel or the missed edge case, and it gets surfaced. The cost is precision: more models means more flags, some of them nitpicks, so a human (or your agent) adjudicates. That trade is worth it for rare, high-asymmetric-cost decisions — and not for routine work.

Architecture

                       ┌──────────────────────────────────────────────┐
   MCP client          │                Tokonomix gateway             │
 (Claude Code,         │                                              │
  Cursor, …)           │   ┌── proposer 1 ──┐                         │
       │  tool call    │   │   (vendor A)   │                         │
       ├──────────────▶│  ─┼── proposer 2 ──┤   blind, parallel       │
       │               │   │   (vendor B)   │   2–6 proposers         │
       │               │   └── proposer 3 ──┘                         │
       │               │           │                                  │
       │               │           ▼                                  │
       │               │   ┌────────────────┐  disjoint, cross-family │
       │               │   │  judge (panel) │  never judges own answer│
       │               │   └────────────────┘                         │
       │               │           │                                  │
       │   one result  │           ▼                                  │
       │◀──────────────│   synthesis + surfaced disagreement +        │
                       │   billing breakdown + request_id             │
                       └──────────────────────────────────────────────┘

Components:

  • Proposers — the 2–6 models that answer the prompt. Chosen for cross-family decorrelation, not just raw score. Empirically selected from Tokonomix's own measurement layer (intelligence tests, arena games via TrueSkill, judge-reputation ok/wrong rates), with anti-Goodhart guards and an exploration budget so past winners aren't entrenched.

  • Judge — disjoint from the proposers by default, cross-family, never scoring its own answer. Budget is auto-sized to the proposer count.

  • Gateway — runs the orchestration, applies region/residency policy, meters cost, returns one result with a billing breakdown and a request_id. The gateway itself is EU-hosted; region selection controls which model providers see your prompt.

  • Per-key policy — budget caps, default council/route, and allow-lists are set on the API key, not re-decided per call, so an unattended run can't overspend or send your prompt somewhere you didn't intend.

The orchestration favours traceability: every call returns the proposer models, the judge model, and charged_credits, so a decision-of-record can be reproduced — record those alongside the answer, because the default council can change server-side over time.

The consensus process

tokonomix_consensus_ask is the core tool. The proposers are the dominant cost in every mode; the judge pass is the only differential between them. Pick the mode by intent — there is no universally-best mode, including diff:

Mode

What you get

Judge?

Use it for

consensus (default)

One merged, decided answer built from the most-corroborated claims

1 pass

"Just give me the decision I'll act on"

diff

A structured agreements / disagreements / confidence report. The judge compares; it does NOT decide.

1 pass

When you'll adjudicate yourself but want the disagreement mapped

best_of

The judge picks the single strongest existing answer, verbatim (no merge)

1 pass

When one model is likely fully right and merging would only dilute it

full

Every proposer answer plus the judge's per-model reasoning plus a conclusion, in one judge pass

1 pass

Auditability — you want both the raw landscape and a verdict

raw

Every proposer's raw answer, no judge (cheapest)

none

You want the unfiltered spread and will reduce it entirely yourself

raw skips the judge, so it is the cheapest; diff, consensus, best_of, and full each bill one judge pass (full returns the most detail for that same single pass — it is not an extra call). Reach for raw for control / no judge-bias, not mainly to save money; and don't pay for the judge in diff only to ignore its comparison.

Every consensus answer also ends with a ## ⚠️ Blind spots & disagreements section at no extra cost. Read it as surfaced disagreement, not a correctness guarantee.

Grounding — the single biggest lever

The largest determinant of a good consensus call is not the mode and not the number of models — it is grounding: feeding the council verifiable ground truth (the actual file, the real diff, the literal spec, the real logs). Ungrounded consensus amplifies a shared wrong prior into false confidence; grounded consensus checks a claim against reality. Two real catches we have observed existed only because the model could read the literal artifact — a U+2028 control-char bug invisible in any summary, and a relay-integrity gap that only appeared when the panel saw the verbatim spec rather than a paraphrase. The discipline:

  • Send the reviewed artifact verbatim and complete — no summary, no .... The fault always lives in the literal details (a char-range, a control-flow order, a specific phrasing, an edge case named-or-not), and a summary hides exactly that. This holds for code, documents, configs, and instructions alike.

  • Facts maximal, steering minimal. Give every relevant fact; give no leading hints ("watch the regex"). A hint pollutes the signal — you no longer know whether the model found it itself.

  • The hard limit is the smallest context window in the panel — judge included. Exceed it and that member is silently truncated and effectively votes blind. Know the panel first (tokonomix_list_models reports context_window); doesn't fit → swap to a larger-window panel or split per module. Never compress-to-fit — that re-hides the faults grounding exists to surface.

You pass grounding either inline in the prompt, or via the structured context argument (server-gated) so the same context-pack is reused by every proposer and the judge — you pay for the context once, not once per model.

The grounding-gate (refuse-to-judge-on-thin-input)

The genuine differentiator, and an honest one: rather than producing a confident blind review of input that is too thin to evaluate, the council can ask back. If a call returns {status:"needs_context", request_id, missing, delivery_hint} — a context request, not an error — the council did not run and you were not charged. missing lists the artifacts you referenced (a file, a diff, "this code") whose content you did not actually include. You gather the real content, attach it verbatim, and re-call with the same request_id to run the now-grounded council. For a genuinely artifact-less prompt (a general question with nothing to attach), set acknowledge_ungrounded: true with a short reason to force a best-effort verdict flagged grounding:insufficient.

Status: the grounding-gate is dormant / shadow-first today — the needs_context / continuation_id / acknowledge_ungrounded plumbing exists in the MCP and gateway but is server-gated and not yet active by default. It is described here because it is the intended mechanism; do not assume it is enforcing on your account until the platform enables it.

The judge

The judge is where a council either earns its keep or quietly fails, so its independence is a load-bearing design choice, not a detail:

  • Disjoint from the proposers by default. The judge never wrote the answer it scores. A model never judges its own proposal — LLM self-preference bias is real and measured, and a non-disjoint judge that is also a proposer inflates agreement (see specialist overlap).

  • Cross-family by preference. A cross-family judge avoids inheriting one vendor's blind spot in the synthesis step. You can override the judge (judge_model) or run a multi-judge panel (judge_models, used for multi-judge best_of); prefer a cross-family choice.

  • A multi-judge panel lifts reliability, not the ceiling. More judges damp one judge's idiosyncrasy (e.g. the known bias toward long, confident answers), but judges share training data with each other and with the proposers — so more judges raise reliability, they do not raise the truth ceiling. Grounding does more than adding judges.

  • The judge cannot exceed its own ground truth. It dampens one model's idiosyncrasy; it cannot conjure a fact none of the proposers had and it didn't have either. This is the structural reason grounding matters more than panel size.

Auto-sizing: the judge's output budget scales with the proposer count (4096 + 2048 × proposers, with a 4096 floor and a 16384 ceiling). Note the judge step is hard-capped at 8192 output tokens on the standard consensus path regardless of your max_tokens — on very large structured outputs the judge can truncate even when proposers fit; batch or split rather than raising max_tokens past 8192.

When consensus helps / doesn't / can hurt

This section is the honest core of the product. Multi-model review is not free of failure modes — and several of ours are documented from our own validation, not hypothesised. Read it before you rely on a result.

When consensus helps

  • Rare, high-asymmetric-cost decisions — auth, migrations, GDPR, money, anything quoted to a regulator/customer — where one real catch pays for a lot of false alarms.

  • Variance-elimination. You stop gambling on which single model you happened to ask: the council buys top-of-panel recall without your having to know in advance which model is strong for this task.

  • Surfacing disagreement. diff mode drags the lone dissenter into the open instead of averaging it away — the split is the signal.

  • As a verification / agent-QA layer. A cross-vendor check is the one thing your host agent's own sub-agents (one vendor) cannot reproduce.

When consensus does NOT help

  • Routine work — renames, formatting, simple classification, quick lookups. It adds cost and noise with no benefit. Use tokonomix_single_ask (~3× cheaper) or your own host model.

  • Tasks where any single strong model already saturates. On easy, well-trodden problems the best single model already gets it right; the council matches it, does not exceed it (and costs more). See Benchmarks.

When consensus can HURT

These are real limitations, named — honesty is the feature here, not a caveat to bury:

  • Lossy synthesis. The judge can drop a real finding that a single member actually had — we have observed the merged answer being weaker than one member's own answer. If you need to be sure no finding is lost, use diff or full (which preserve per-model content) rather than consensus.

  • Correlated failures / shared hallucinations. Frontier models share heavily overlapping training data. On a shared blind spot — post-cutoff facts, niche domains — they can agree and be uniformly wrong. The judge then hands you a confident wrong answer with a clean "blind spots" section that found nothing. Agreement measures agreement, not truth. The lever against this is grounding, not more models.

  • False consensus. Apparent convergence can be an artifact of similar prompting, similar fine-tuning, or one dominant phrasing — not independent corroboration. Treat a unanimous answer on an out-of-distribution fact with the same suspicion you'd treat one model's.

  • Specialist overlap. If the judge is also a proposer (a non-disjoint judge), it scores its own work and inflates the measured agreement. This is exactly why the default judge is disjoint and cross-family — but if you override the judge to a model already in the proposer list, you reintroduce the bias.

The bottom line: consensus reduces single-model error and surfaces disagreement a single model would hide. It does not guarantee correctness, it showed no net uplift in catch rate over a strong single model in our measured runs, and it is not a blind merge gate you should auto-trust. It is a recall amplifier that feeds your judgment.

Decision Engineering vs existing techniques

Decision Engineering is not a brand-new idea pulled from nowhere — it composes several well-studied techniques and adds two things most of them lack: cross-vendor independence and grounding against the real artifact. This is an honest map of where it overlaps with and differs from related approaches. The point is what problem each solves, not "we're better than all of them" — several of these are mechanisms Council itself uses.

Technique

What problem it solves

Where it overlaps Council

Where it differs

LLM-as-Judge

Scoring/ranking model outputs automatically

Council uses an LLM judge to reconcile

Council requires the judge be disjoint and cross-family; the common LLM-as-judge setup lets a model grade outputs from its own family (or its own answer), which inflates agreement

Debate (models argue to a conclusion)

Surfacing reasoning by making models challenge each other

Both aim to expose disagreement

Debate lets the louder/longer arguer win and can induce capitulation; Council keeps proposers blind and parallel so the lone dissent is preserved, not argued away

Tree of Thought

Better reasoning within one model by exploring branches

Both seek a more deliberate answer

ToT is single-model — one mind, one blind spot. Council's value is cross-vendor decorrelation, which ToT structurally cannot provide

Self-Consistency

Reducing variance by sampling one model many times and taking the majority

Both reduce the luck of a single sample

Self-consistency samples the same model, so it cannot escape that model's systematic errors; Council samples different vendors, whose errors are uncorrelated

Mixture of Experts

Efficient capacity by routing tokens to specialized sub-networks inside one model

Both use the word "experts"

MoE is an architecture detail of a single model (one vendor, shared training); Council's "experts" are independent vendors reconciled by an outside judge — a decision layer, not a model internal

Ensemble Learning

Lower variance by combining many models' predictions

Both combine multiple models

Classic ensembling averages/votes, which destroys the lone dissent that often matters; Council preserves and adjudicates dissent and adds grounding + an independent judge

Constitutional AI

Aligning a model to written principles via self-critique

Both care about a reasoned, principled output

Constitutional AI is self-critique inside one model against a rulebook; Council's check is external — a different vendor and real ground truth, not the same model marking itself

Peer Review (human)

Independent expert scrutiny before publication

Council is explicitly modelled on it — independent reviewers, a reconciling editor

Human peer review is slow, scarce, and inconsistent; Council is fast and reproducible, but its "reviewers" share training data, so it is not a substitute for human review on the highest-stakes calls — it feeds human judgment

Static Analysis

Deterministically flagging known defect classes in code

Both catch issues before they ship

Static analysis is exact and rule-bound (no false-negative drift, but blind to anything not encoded as a rule); Council reasons about novel, semantic, cross-domain issues a linter can't encode. They are complementary, not rivals

Where Council sits. It is the layer that takes the genuinely useful parts of these — an LLM judge, ensemble combination, the peer-review structure — and adds the two properties the single-model and single-vendor versions cannot have: independence across vendors and grounding against ground truth. That, not novelty for its own sake, is the contribution.

Council in the Tokonomix ecosystem

Council is one specialized building block among a growing set of Tokonomix components. Each is standalone-usable, but each owns one responsibility and points to where the adjacent ones live. Council owns decision-making; it does not try to be the whole stack.

Component

Owns

Council's relationship

Council (this repo)

decision-making — independent review, consensus, reasoning-verification, grounding, judge-independence, decision confidence, auditability

ANS — Agents Never Sleep

execution — running a backlog to completion, unattended, with deterministic governance

Council is the verifier ANS delegates a decision to; ANS executes, Council does not

Media QC

verification of media artifacts — image/video/document output quality control

Council reviews decisions and reasoning; Media QC reviews media outputs. Council can take an image as grounding for a decision, but it does not own media QC

Benchmark

measurement — intelligence tests, arena, model/judge reputation

Feeds Council's empirical proposer/judge selection; Council consumes it, does not run it

Routing

provider-selection — which provider/model hosts a call

Council exposes a region/residency policy (EU-only data residency), but the underlying provider routing is Routing's job

Memory

long-term context — durable state across sessions

Council is stateless per call (it records a request_id for audit); persistent memory lives in Memory

If you need execution, scheduling, autonomy, memory, browser automation, or general provider routing, you are in the wrong component — Council only decides. Point execution at ANS.

Practical examples

Code / security review (diff — preserve the dissent)

tokonomix_consensus_ask({
  prompt: "Is this auth middleware safe? Review for timing side-channels, IDOR, and missing-auth paths.\n\n```ts\n" + middlewareSource + "\n```",
  mode: "diff"   // surface the one model that flags the constant-time issue; don't average it away
})

Four models say "looks fine"; one flags the token comparison isn't constant-time. A single-model call would have returned "looks fine" and you'd have shipped it. diff surfaces the lone dissent so a human adjudicates the thing that actually matters.

Migration safety check (diff — irreversible action)

tokonomix_consensus_ask({
  prompt: "Is this migration reversible? Flag any irreversible step.\n\n" + migrationSql,
  mode: "diff"
})

For a safety check you want the lone dissenter preserved, not averaged away.

tokonomix_consensus_ask({
  prompt: "Can a SaaS legally store EU-citizen API logs in a US-hosted S3 bucket for 30 days under GDPR? Answer in 4 bullets: legal basis, Schrems II, alternatives, action plan.",
  mode: "consensus",
  models: ["claude-opus-4-8", "gpt-5.4", "gemini-2.5-pro"]   // slugs illustrative — confirm with tokonomix_list_models
})

This prompt asks about a practice and carries no personal data, so a US frontier council is fine. If the prompt contained actual customer records, keep the data EU-only (next example).

Personal-data prompt — EU data residency (mandatory for PII)

// 1. discover the EU-hosted set
tokonomix_list_models({ hosting_region: "eu" })
// 2. pin the council to it — the default council is US-hosted
tokonomix_consensus_ask({ prompt: promptContainingPII, models: [/* EU slugs from step 1 */] })

The default council is US-hosted. Sending a privacy question that contains personal data to three US clouds is itself a cross-border transfer — the very thing the question is trying to avoid. EU-only routing keeps prompts in-region — data-minimisation and a hedge against transatlantic-transfer risk. It is not a complete GDPR compliance statement; compliance depends on your whole system.

What the gateway sees (data governance)

The skill deliberately asks you to send the artefact under review — code, a contract, a spec, logs — so every model reasons over the same source instead of guessing. That content passes through the Tokonomix gateway to the selected providers, so whether to route a given artefact through a third party is a real data-flow decision, independent of which region the providers sit in:

  • Send what the decision needs, not more. Redact secrets and identifiers you do not need reviewed before you attach a file — consensus quality depends on the relevant source, not on completeness for its own sake.

  • The gateway is EU-hosted and meters the call; the region selection above controls which model providers see the prompt. A full retention / sub-processor statement lives with the gateway service, not in this client.

  • Anything with personal data → prefer the EU council (above) over the US default.

What leaves your host, and what is stored locally. To be precise about the client side (the part this package controls):

  • On a consensus call the only fields sent outbound are messages, an x_council metadata block, and max_tokens — no hidden fields and no client-side telemetry (see SECURITY.md). Grounding content you attach (context.inline / context.github_refs) travels inside messages, so it reaches the selected providers — which is exactly why the "send what the decision needs, not more" rule above matters.

  • Locally, the client stores only your API key in ~/.tokonomix/credentials.json (written 0600) plus small local state files under ~/.tokonomix/ (the credentials/state directory named in SECURITY.md). The key is never logged.

  • Free-text you put in a rating note (tokonomix_rate_consensus) is handled admin-only: it is never returned to any caller and never shown publicly verbatim. The numeric score and structured findings feed model-selection scoring; the free text does not surface back to you or anyone else.

  • What this client does not state: the gateway's full retention windows and its sub-processor list. Those are a property of the hosted service, not of this package — treat that as a deliberate gap to check with the service, not an omission we can fill from the client.

Document / diagram QC (vision as grounding)

tokonomix_consensus_ask({
  prompt: "Key differences between these two architecture diagrams? Focus on data-flow and security boundaries.",
  mode: "diff",
  images: [
    { data: "/9j/4AAQSkZJRgAB...", media_type: "image/jpeg" },
    { data: "iVBORw0KGgoAAAAN...", media_type: "image/png" }
  ]
})

Vision input is grounding for a decision review (Council reasons about the diagrams) — not a media-QC pipeline. With no models set, the council auto-selects a current cross-vendor vision panel (a current Claude, Gemini, and GPT vision model — query tokonomix_list_models({"supports":["vision"]}) for live slugs, which drift). data is raw base64 with no data:image/...;base64, prefix; allowed types are image/jpeg, image/png, image/webp, image/gif; ≤8 images, ≤5 MB decoded each, ≤20 MB total.

Rating the result (feeds council selection)

tokonomix_rate_consensus({ request_id: "…", score: 8, consensus_benefit: "caught_blind_spot" })

Rate every call on its true value: a confirmation you solicited is a confirmation (raised_confidence), not a catch. Feature-gated on the platform feedback-loop; when it is off the tool returns a clear "not enabled" message.

Installation

1. Get an API key (or onboard keyless)

Sign up at tokonomix.ai/signup€5.00 free credit, no card required. Issue a key at /dashboard/keys (it starts with tok_live_).

Or onboard with no key at all: run tokonomix_onboard("you@example.com"), then tokonomix_onboard_verify with the emailed 6-digit code — it provisions a free-tier account (€5 credit) and saves the key to ~/.tokonomix/credentials.json (mode 0600). No env var needed after that.

2. Add it to your client

Quick add (Claude Code):

claude mcp add council npx tokonomix-council-mcp

Then set TOKONOMIX_API_KEY in your environment (or let the MCP pick it up from ~/.tokonomix/credentials.json after tokonomix_onboard).

Manual config — Claude Code (.mcp.json in your project, or ~/.claude.json):

{
  "mcpServers": {
    "tokonomix": {
      "command": "npx",
      "args": ["-y", "tokonomix-council-mcp"],
      "env": { "TOKONOMIX_API_KEY": "tok_live_..." }
    }
  }
}

Cursor / Cline / Continue / Zed — the same command + args + env triple goes in your tool's MCP-server config.

3. Configuration

Env var

Default

Description

TOKONOMIX_API_KEY

(optional after onboarding)

Bearer key, starts with tok_live_

TOKONOMIX_BASE_URL

https://tokonomix.ai/api/v1

OpenAI-compatible base (council). Anthropic base: https://tokonomix.ai/api/anthropic

TOKONOMIX_SITE_URL

derived from base

Main-app origin for the keyless onboard endpoints

4. The tools

The MCP server exposes ten tools, all prefixed tokonomix_:

Tool

What it does

tokonomix_consensus_ask

The core: 2–6 proposers + independent judge → one result (modes above)

tokonomix_single_ask

Single-model passthrough — cheap, for routine calls

tokonomix_list_models

Live catalog, filterable by region, provider, tier, capability, origin country

tokonomix_get_balance

Credit balance, tier, and month-to-date usage (€ spent and token throughput, by mode)

tokonomix_rate_consensus

Rate a result by request_id — feeds model votes / blind-spot reputation (dormant: returns 404 until the platform feedback-loop is enabled)

tokonomix_upload

Stage large context for a grounded call → session + handles (dormant: returns "not enabled" until context-upload is enabled)

tokonomix_onboard

Keyless first run, step 1 — email a one-time code

tokonomix_onboard_verify

Keyless first run, step 2 — provision a free account + save the key

tokonomix_get_skill

Fetch the canonical usage skill from the server

tokonomix_skill_version

Cheap version fingerprint of the skill (detect drift)

The skill

The package ships a tokonomix-consensus skill (skill/tokonomix-consensus/SKILL.md) that teaches your agent when to reach for consensus (and which mode) versus a single call. Drop it into .claude/skills/, or let the agent pull it at runtime via tokonomix_get_skill. The server's copy is canonical — tokonomix_skill_version detects drift.

Integration & API surfaces

Beyond the MCP tools, the gateway exposes two HTTP surfaces with different capability profiles — worth knowing when an agent needs native tool-calling or structured output:

Surface

Endpoint

Shape

tool-calling · structured-output · web-search · prompt-caching

Council (multi-model)

POST /api/v1/chat/completions

OpenAI-compatible

not forwarded — consensus fans out to N proposers + a judge; tool-calls/structured-output can't be averaged, so they are single-model-only

Single-model

POST /api/anthropic/v1/messages

Anthropic Messages wire-format · routes to any provider (OpenAI, Google, Anthropic, OVH-EU, Azure, xAI, Ollama…)

forwardedtools/tool_choice + server-tools (web search) round-trip as tool_use; cache_control prompt-caching is billed at cache-tier rates

Use the council path (or tokonomix_consensus_ask) when you want a verified, synthesized decision; use the single-model path when an agent needs native function-calling, schema-constrained output, or prompt caching. That path speaks the Anthropic Messages wire-format but is not Anthropic-only — the gateway sends your call to whichever configured provider hosts the model you name.

Agentic tool-use (e.g. running an external code-review harness through Tokonomix): point the client at https://tokonomix.ai/api/anthropic with the Anthropic wire format, and unset any ambient ANTHROPIC_API_KEY — some SDKs send it as x-api-key alongside your tok_live_ bearer, which the gateway rejects.

Per-key guardrails

Budget and region policy are set on the key, not re-decided per call:

  • a predefined default model + council route — which proposers, which judge, which mode;

  • a gateway-enforced monthly spend cap (monthly_limit_cents) — the key is blocked once the month's charged spend would exceed it;

  • allow-lists by model / mode / judge / hosting region / model-origin country.

So you can hand a key to an unattended run and trust it can't overspend or send your prompt somewhere unintended. Track usage with tokonomix_get_balance (€ and tokens, month-to-date).

Benchmarks

We publish what we measured — including, prominently, where the numbers cut against us. No benchmark figure here is fabricated, and we claim no accuracy or bug-catching uplift. Two findings are load-bearing:

Finding 1 — No measurable net uplift in bug-catch rate (SWE-bench, round 2, N=29)

A round-2 validation on SWE-bench-Verified defect tasks falsified the "consensus catches more bugs" hypothesis. A non-Anthropic baseline (GPT-4o) missed 29 of 30 real bugs; running a cross-family council on those 29 produced no measurable net uplift in catch rate over simply re-running the agent — the council occasionally caught a miss, but false-positive flags netted it out (effect +0.12, CI crossing zero). The precise, honest claim is therefore no net upliftnot "catches no more bugs" (which would over-claim the other way). We do not, anywhere, claim the council catches more bugs.

Finding 2 — Council ties best-single on clean accuracy, beats it nowhere (benchmark v2, 5 domains)

Across a 5-domain benchmark (v2), the council equalled the best single model and beat it in no domain. On clean, well-trodden tasks a strong single model already saturates, and the council matches it at higher cost. The winner shifts by domain — which is the actual case for the product: the council buys you variance-elimination (top-of-panel recall without knowing in advance which model is strong), not a higher accuracy ceiling.

Honest positioning that follows from the data

The measured value is variance-elimination + verification / agent-QA + judge-independence + EU data residency + groundingnot "more accurate" and not "catches more bugs."

Methodology over flattery. Every number above is tied to a reproducible method on a public dataset (SWE-bench-Verified for Finding 1) and points the same direction: the council ties, it does not beat. Where we have only a process rule (e.g. grounding improves recall via a mechanistically convincing case), we say "process rule, not a measured effect size" and do not put a percentage on it. Full datasets + harnesses behind these findings are being prepared as a reproducible publication (see Roadmap) so the method, not the marketing, is the artifact.

Glossary

Consistent terminology, so a human or an AI agent parses the same words the same way throughout these docs.

Term

Meaning

Decision engineering

Designing how a decision is produced — independent inputs, an independent reconciler, grounding, auditability — rather than trusting one model's single output. Council is a reference implementation of it — the first concrete one of the principles we define here; there is no external spec or second implementation yet.

Decision quality

The goal Council optimises for: a decision that is right and auditable. Expressed as Consensus × Ground Truth = Decision Quality — consensus is one mechanism, grounding (the strongest) is another, judge-independence and verification are others.

Reference implementation

A concrete, working build that demonstrates a discipline end-to-end — a factual description of Council, not a market-ranking claim. It is the first such build of the principles we define here: there is no external spec or second implementation yet, and no outside party has adopted it. (We do not claim "industry standard.")

Proposer

One of the 2–6 models that answers the prompt independently and blind.

Judge

The model that reconciles the proposers' answers. Independent by design.

Disjoint judge

A judge that is not one of the proposers, so it never scores its own answer.

Cross-family judge

A judge from a different vendor/model-family than the proposers, so it does not inherit their shared blind spot.

Consensus mode

One merged, decided answer from the most-corroborated claims. (Default.)

Diff mode

A structured agreements/disagreements/confidence report — the judge compares, it does not decide.

Best_of mode

The judge picks the single strongest existing answer verbatim, no merge.

Raw mode

All proposer answers, no judge — the unfiltered spread (cheapest).

Full mode

All proposer answers + the judge's per-model reasoning + a conclusion, in one judge pass (auditability).

Grounding

Feeding the council the real artifact (file, diff, spec, logs) so claims are checked against reality instead of a shared prior. The single biggest lever.

Lossy synthesis

A failure mode where the judge drops a real finding a single member had, making the merged answer weaker than that member's own answer.

Correlated failure

Frontier models sharing training data are wrong about the same thing, so agreement is not proof of correctness.

False consensus

Apparent convergence caused by similar prompting/fine-tuning rather than independent corroboration.

Specialist overlap

A non-disjoint judge (also a proposer) scoring its own work and inflating measured agreement.

Recall vs precision

Recall = catching the rare real issue (Council's strength: only one vendor needs to see it). Precision = avoiding false flags (Council's cost: more models → more flags to adjudicate).

Decision confidence

The agreement/disagreement signal Council surfaces — the diff report and the per-answer blind-spots section. It is a surfaced signal for your judgment, not a calibrated probability the answer is correct.

Variance-elimination

Council's honest value: you stop gambling on which single model you happened to ask; you get top-of-panel recall without knowing in advance which model is strong.

Grounding-gate

The dormant/shadow-first mechanism by which Council can refuse to judge too-thin input and ask back for the real artifacts instead of guessing.

FAQ

Is this a model, or a chatbot? Neither. It is a decision-engineering layer above models. It doesn't make any model smarter; it changes how several models' outputs become one decision. It is not a multi-model chat, a voting system, or an averaging system.

Does the council give more accurate answers than the best single model? No — and we will not claim it does. In our validation it ties the best single model on clean accuracy and beats it in no domain, and it showed no net uplift in catch rate on a SWE-bench run. Its measured value is variance-elimination, verification, judge-independence, EU data residency, and grounding.

So why pay for it? Because which single model is best shifts per task, and you usually don't know in advance which one. The council buys top-of-panel recall without that bet, surfaces disagreement a single model hides, and gives you a cross-vendor check no single-vendor API can. For rare, high-cost decisions that's worth more than its cost; for routine work it isn't — use tokonomix_single_ask.

If consensus is the means, what's the goal? Better decision quality. Consensus is one mechanism we use to get there; grounding and judge-independence are others. We optimise for the decision being right and auditable, not for models agreeing.

Can a single vendor sell me the same thing? No. OpenAI can't grade Claude, Anthropic can't grade Gemini, Google can't grade GPT. A vendor's own "panel" shares its own training data and blind spots — correlated errors dressed up as agreement. The decorrelation only exists across vendors.

Does agreement mean the answer is correct? No. Frontier models share training data, so they can agree and be uniformly wrong (shared hallucination, correlated failure). Agreement raises confidence, not correctness. For out-of-distribution or post-cutoff facts, still verify against a primary source — and ground the call.

Can consensus be worse than a single model? Yes, and we say so: lossy synthesis (the judge dropping a real finding), correlated failures, false consensus, and specialist overlap (a non-disjoint judge inflating agreement). See When consensus helps / doesn't / can hurt. Use diff/full when you can't afford a lost finding, and ground the call.

Can Council run, schedule, or remember my work? No — that is out of scope by design. Council only decides. Execution and unattended backlog runs are ANS; long-term memory, browser automation, and general provider routing live in their own components. See Council in the Tokonomix ecosystem.

What about personal data / GDPR? If the prompt contains personal/identifiable data, keep it EU-only: tokonomix_list_models({hosting_region:"eu"}) then pin those slugs. The default council is US-hosted. EU-only routing keeps prompts in-region — data-minimisation and a hedge against transatlantic-transfer risk. It is not a complete GDPR compliance statement; compliance depends on your whole system.

Is the grounding-gate live? The plumbing exists but is dormant / shadow-first — server-gated, not enforcing by default yet. Treat it as the intended mechanism, not a guarantee on your account today.

How do I keep a decision reproducible? Record the proposer models, the judge model, charged_credits, the date, and the exact prompt — all returned in the billing breakdown. The default council can change server-side over time, so the same prompt may use different models next month.

Documentation

The companion docs frame Council from AI Decision Engineering, not from the wire protocol. Start with the tutorial or the glossary; read the manifesto for the full argument. Every term is used consistently across the suite (see the glossary), and each doc carries an accessible diagram.

Roadmap

Honest about what's live versus planned:

  • Grounding-gate go-live. Move the refuse-to-judge-on-thin-input gate from dormant/shadow-first to enforcing, once shadow metrics validate it doesn't over-bounce.

  • Context-upload (tokonomix_upload). Activate the shared, region-pinned context-pack so large artifacts are staged once and read by every proposer + judge.

  • Consensus feedback-loop go-live. Enable tokonomix_rate_consensus structured findings (real/false split, consensus_benefit) to feed live council selection and blind-spot reputation.

  • Reproducible benchmark publications. Publish the full datasets + harnesses behind the findings above (including the falsified bug-catching claim), so the method — not the marketing — is the artifact.

  • Decision-engineering docs — now published (see Documentation above): Decision Theory · Consensus · Judge Independence · Grounding · Verification · Confidence · Bias · Recall vs Precision · Failure Modes · Architecture · Benchmark Methodology · Routing · Auditability · Glossary · a getting-started tutorial · accessible diagrams. Still planned: honest side-by-side comparisons with adjacent techniques (single-model review, peer review, LLM-as-judge, ensembles, self-consistency, tree-of-thought, multi-agent orchestration).

  • The Decision Engineering Manifesto (docs/decision-engineering-manifesto.md). The standalone statement of the field: why it exists, the design principles, the failure modes, why one model — and consensus alone — is insufficient, why grounding is necessary, and why the human stays ultimately accountable. The README links to it rather than duplicating the depth.

License

MIT © Tokonomix.ai / InterIP Networks

Issues & feedback

github.com/tokonomix/tokonomix-council-mcp/issues · support@tokonomix.ai

Available Tools

11 tools
tokonomix_consensus_askA

Ask 2-6 frontier LLM proposers (parallel + blind) and reconcile via an independent judge (disjoint from the proposers, never scoring its own answer). A recall amplifier that surfaces disagreement a single model hides — it reduces single-model error but does NOT guarantee correctness (frontier models share training data, so agreement is not proof; ground high-stakes facts). Pick the synthesis mode by what you need from the call — there is no universally best mode; see the mode parameter. Use this when correctness matters more than latency: legal questions, code review, fact-checking, high-stakes reasoning. Proactively offer it — don't wait to be asked — before anything irreversible or with real consequence: a DB migration, a security-relevant change, a legal/compliance statement, a customer-facing commitment. Offer once per decision (a few cents, surfaces disagreement, no correctness guarantee), then act on the user's answer; if they decline don't re-raise; skip routine or reversible work. Modes (pick by intent): consensus = one decided answer (default); diff = an agreements/disagreements/confidence map where the judge COMPARES but does NOT decide; raw = all answers, no judge (cheapest); best_of = judge picks the single strongest; full = all answers PLUS the judge's per-model reasoning AND a conclusion. You decide which fits. Tip: leave models empty to use the per-key or per-account default council. Use tokonomix_list_models to discover available slugs.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoSynthesis mode — pick by what you need; there is no universally best mode. `consensus` (default) = one merged, decided answer (use when you want THE answer; trades dissent away). `diff` = a structured agreements/disagreements/confidence report — the judge COMPARES, it does NOT decide (use when you will adjudicate yourself but want the disagreement mapped). `raw` = every answer verbatim, NO judge, cheapest (use when you want the unfiltered spread and will decide entirely yourself). `best_of` = judge picks the single strongest verbatim answer. `full` = every answer PLUS the judge's per-model reasoning AND a conclusion, in one judge pass — not an extra call (use when you want both the raw landscape and a verdict).
imagesNoOptional images to include in the user message (vision input). Non-streaming only; the council auto-selects a default vision panel (claude-fable-5 + gemini-2.5-pro + gpt-4o class) when no models are specified. With an explicit models list, non-vision models are skipped (reported in x_council.skipped); an explicit single non-vision model returns 400. Constraints: ≤8 images, ≤5 MB decoded per image, ≤20 MB total. Use tokonomix_list_models({"supports":["vision"]}) to discover vision-capable slugs.
modelsNoArray of 2-6 bare model slugs (e.g. "claude-haiku-4-5-20251001", "gpt-5", "gemini-2.5-flash"). Omit to use account/key defaults. Provider-prefixed slugs ("anthropic/claude-...") also accepted for explicit pinning.
promptYesThe user prompt to send to every proposer.
systemNoOptional system prompt prepended to the messages array.
contextNoOptional grounding context (INT-1817). Inline files/snippets are sent to ALL proposers AND the judge so the council reasons over the same source instead of guessing. Large payloads route to tokonomix_upload. Server-gated on the account's context-upload capability; when it is not enabled for the account, context is ignored (the prompt-only call is unchanged).
max_tokensNoMax output tokens per proposer. Default: 1024; clamped to a 16384 ceiling per proposer. The judge/synthesis step is hard-capped at 8192 output tokens regardless of this value, so on large multi-key structured outputs the judge can truncate even when proposers fit — batch keys or split the request rather than raising this past 8192. NOTE: each proposer also has a ~60s wall-clock timeout; a high max_tokens that a slow flagship (large reasoning models) cannot finish within 60s times that proposer out (the call still returns from the proposers that did finish). Keep max_tokens to what the slowest model in your council can emit in ~60s.
request_idNoContinuation id. Omit unless continuing a prior {status:"needs_context"} response: re-call with the SAME request/instructions PLUS the missing artefacts attached (inline or via tokonomix_upload) and this request_id, to run the council on the now-grounded input. Re-calling WITHOUT it is a fresh, chargeable request (not a continuation). Do not combine with acknowledge_ungrounded.
judge_modelNoModel slug used by the judge. Omit to use the system default (Claude Haiku).
judge_modelsNoArray of judge model slugs for multi-judge best_of. When provided, all listed models act as judges and the backend picks the strongest synthesis. Takes precedence over judge_model when both are set.
acknowledge_reasonNoRequired with acknowledge_ungrounded: a short reason why the prompt is intentionally artefact-less (e.g. "general question about coding best practices").
acknowledge_ungroundedNoSet true ONLY when you are submitting a prompt that is intentionally artefact-less — a general question with nothing to attach. Forces a best-effort council verdict flagged grounding:insufficient instead of being asked back for content. If you have or can quote the referenced artefact, attach it instead. Requires acknowledge_reason. Use sparingly; do not combine with request_id.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full transparency burden and exceeds it. It discloses the judge is 'disjoint from the proposers, never scoring its own answer,' does NOT guarantee correctness because 'frontier models share training data,' and details cost ('a few cents'), latency, per-proposer 60s timeouts, and judge output hard-cap. It even flags response-state behaviors like 'needs_context' and 'grounding:insufficient.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loaded: purpose, usage, then modes. Every section earns its place given the tool's 12 parameters and absence of annotations, but it is slightly sprawling, with a few cautionary themes (grounding, correctness) restated across sections rather than consolidated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is unusually complete for a tool with no output schema and no annotations. It covers purpose, safety limits, cost, latency tradeoffs, mode-specific behaviors, grounding/continuation flows, model selection, and failure/edge cases (skipped models, 400 on single non-vision model, judge truncation).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds substantial meaning beyond the bare schema. It maps each mode to an intent (e.g., 'diff' = judge compares but does not decide), warns that max_tokens past 8192 can truncate the judge, explains that an explicit single non-vision model returns 400, and clarifies request_id continuation semantics versus a fresh chargeable request.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Ask 2-6 frontier LLM proposers (parallel + blind) and reconcile via an independent judge,' which clearly states what the tool does. It also distinguishes itself from siblings by framing it as 'a recall amplifier that surfaces disagreement a single model hides,' implicitly contrasting with tokonomix_single_ask.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use guidance is present: 'Use this when correctness matters more than latency' and 'Proactively offer it... before anything irreversible or with real consequence.' It also gives when-not-to-use: 'skip routine or reversible work.' However, it does not explicitly name an alternative tool (e.g., tokonomix_single_ask) for the lighter cases, only implying a single-model alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tokonomix_get_balanceA

Get the current credit balance and account tier of the authenticated key.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the transparency burden. It does mention the authenticated key, implying authentication is needed, and the verb 'Get' implies a read-only operation. However, it does not disclose rate limits, response format, or any potential errors or side effects, leaving some ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence of 12 words that front-loads the action and resource. Every word adds value; no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial read-only getter with no parameters and no output schema, the description is sufficient: it states exactly what the tool retrieves. It does not specify the response structure, but the tool's simplicity and the explicit mention of balance and tier make it likely the agent can invoke it correctly. A fully complete description might mention when the balance is unavailable (e.g., unauthenticated), but that's minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the schema fully covers parameter semantics. The description adds no parameter details, but none are needed. Baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Get') and resource ('credit balance and account tier'), and it is distinct from all sibling tools which handle queries, models, skills, and onboarding.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose—use when you need the current balance or tier—but there is no explicit guidance about when to prefer this over alternatives or any exclusions. The description does not reference sibling tools or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tokonomix_get_skillA

Return the canonical Tokonomix consensus SKILL.md content for this MCP-server version. Use this on first connection, or when tokonomix_skill_version reports a version newer than your cache. The skill explains when to reach for consensus (legal, GDPR, code review, fact-check) vs single-model passthrough, plus what modes (consensus, diff, best_of, raw, full) are available right now.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses version-specific behavior and caching implications ('for this MCP-server version', 'newer than your cache'). While it does not explicitly state that the operation is read-only or describe the exact output format, the context supplied is useful and goes beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states the core function, the second provides usage guidance and a brief overview of the skill content. Every sentence earns its place, and it is front-loaded with the primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no annotations and no output schema, the description covers the purpose, when to use it, and what the returned skill explains (modes, consensus vs passthrough). It is complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the baseline is 4 per the rubric. The description adds relevant context about version-specific content and cache usage, which is not represented in the schema. There are no parameters to explain, so this is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns 'canonical Tokonomix consensus SKILL.md content for this MCP-server version', which is a specific verb+resource that distinguishes it from siblings like tokonomix_consensus_ask or tokonomix_single_ask. It is unambiguous and not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is given: 'Use this on first connection, or when tokonomix_skill_version reports a version newer than your cache.' This directly tells when to invoke the tool and references a sibling for version checking, providing clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tokonomix_list_modelsA

List the active models reachable through this account. Filter by hosting region for EU data-residency routing, by provider, by tier, or by capability. Returns id, owned_by, hosting_region, context_window, input/output price per 1M cents, capabilities (tools, vision, json_schema, prompt_caching, reasoning, audio_input, pdf_input). When recent-speed exposure is live on the platform, entries also carry a speed object (tier + recent p95/responsiveness numbers, advisory only — not a guarantee) and you can filter with max_p95_ms / speed_tier to self-select faster models; if the feature is not yet live these two filters are no-ops.

ParametersJSON Schema
NameRequiredDescriptionDefault
tierNoFilter to one model tier (catalog quality/pricing tier — not the recent-speed tier, see speed_tier).
limitNoMax results. Default 500, max 1000. The reply reports how many models matched in total, so you can tell whether the list was cut off.
providerNoFilter to one provider (anthropic, openai, google, ovh, openrouter).
supportsNoComma-separated capability list; models must support ALL of these.
max_p95_msNoOnly return models whose recent gateway p95 latency (EWMA) is at or under this ceiling, in milliseconds. Models with no recent gateway data are excluded (can't confirm they're fast). Advisory, recent-observed — not an SLA. No-op if recent-speed exposure is not yet live.
speed_tierNoFilter to one recent-speed tier (distinct from `tier` above). "unknown" = too little recent traffic to classify. No-op if recent-speed exposure is not yet live.
hosting_regionNo"eu" matches eu OR fr. Use for EU data-residency routing (a hedge against transatlantic transfer — not a full GDPR compliance guarantee).
origin_countryNoISO 3166-1 alpha-2 country code of the model's origin (e.g. "US", "FR", "DE"). Filters to models whose AI lab is headquartered in that country. Useful for origin-country filtering — e.g. models from EU-headquartered labs.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It discloses conditional behavior (speed features not yet live, no-op filters), the advisory nature of speed data, and the meaning of 'eu' matching both eu and fr. It does not mention auth, rate limits, or errors, but for a read-only list tool this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but information-dense, front-loading the core action and return fields. Conditional speed behavior is explained clearly, and every sentence contributes meaningful detail. It could be slightly more concise, but it remains well-structured for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters and no output schema, the description covers return values well, lists the key fields, and explains conditional speed behavior. It lacks explicit error/edge-case handling, but for a listing tool this is a minor gap. The description is sufficiently complete for an agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with detailed descriptions for all 8 parameters, so the description does not need to add much. It does offer use-case framing (e.g., EU data-residency routing, speed selection) but not syntax-level additions beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'List the active models reachable through this account.' It also enumerates the returned fields, making its purpose unambiguous. It stands apart from sibling tools, which handle balances, consensus, and skills rather than model listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete usage contexts, such as filtering by EU data-residency routing and self-selecting faster models via speed filters. It does not explicitly discuss when NOT to use the tool or name alternatives, but since no sibling tool lists models, the guidance is sufficient. The no-op warning for speed filters adds important context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tokonomix_onboardA

Step 1 of keyless first-run onboarding. Sends a 6-digit OTP to the provided email address. No API key is required to call this tool — it is the entry point for new users. Tokonomix is in beta: the server requires the user to accept the beta terms (functional gaps, use at your own risk — https://tokonomix.ai/beta) before it will send a code. If you call this WITHOUT accept_beta_terms and beta acceptance is required, the server replies with a 400 asking you to confirm the beta terms with your human and re-call with accept_beta_terms: true. So: confirm the beta terms with your human, then call this tool with accept_beta_terms: true. After a code is sent, instruct the user to check their email and call tokonomix_onboard_verify with the code. On success the server returns {ok:true} regardless of whether the email already has an account (enumeration-safe).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional display name for the account (max 200 characters).
emailYesThe user's email address. A 6-digit one-time code will be sent here.
localeNoOptional UI/email language for the account (the welcome email + dashboard links use it). Pass the user's language if you know it; defaults to English.
accept_beta_termsNoSet to true to record the user's acceptance of the Tokonomix beta terms (https://tokonomix.ai/beta). REQUIRED while the beta gate is on — only set it true AFTER your human has confirmed they accept. Do not accept on their behalf without confirmation.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that no API key is required, the server returns a 400 if beta terms are not accepted, the response is enumeration-safe, and success returns {ok:true} regardless of existing accounts. It also explains the beta terms URL and the importance of human confirmation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat long but every sentence contributes value—it covers the purpose, beta terms caveat, fallback behavior, and next step. It is front-loaded with the main action and flows logically. A slight trim could be made, but it remains efficient for the information density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the onboarding flow complexity (OTP, beta terms, enumeration safety) and the absence of an output schema, the description provides sufficient context for an agent to invoke correctly. It explains the conditional 400 response, the meaning of accept_beta_terms, and the follow-up verify step, making it complete for this tool's role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds behavioral context beyond the schema, particularly for accept_beta_terms, explaining when to set it true and the consequence of not doing so. It also clarifies the email's purpose and the optionality of name and locale, which is meaningfully more than the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Step 1 of keyless first-run onboarding' and clearly states it 'Sends a 6-digit OTP to the provided email address.' This gives a specific verb, resource, and step designation. It also distinguishes itself from the sibling tool tokonomix_onboard_verify by explicitly directing the user to call that tool after a code is sent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: this is the entry point for new users, no API key is required, and the beta terms acceptance flow is explained with a fallback. It explicitly instructs the agent to confirm beta terms with the human and then call with accept_beta_terms: true, and to direct the user to the verify step. However, it does not explicitly state when NOT to use this tool or mention alternative sibling tools beyond the next step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tokonomix_onboard_verifyA

Step 2 of keyless first-run onboarding. Verifies the 6-digit OTP from tokonomix_onboard. No API key is required to call this tool. On success: provisions a free-tier Tokonomix account, saves the API key to ~/.tokonomix/credentials.json (shown once here — the user must save it), and returns the starting credit balance. After this call succeeds, all other tokonomix_* tools will work without any env-var configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe 6-digit numeric code from the OTP email.
emailYesThe same email address used in tokonomix_onboard.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully bears the burden and excels: it discloses side effects (provisions account, writes credentials file, shows key once), the lack of API key requirement, and the postcondition that other tools become usable. This is rich, honest behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each dense and purposeful: purpose, prerequisite, side effects. It is front-loaded with what the tool does, then explains implications. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description covers the essential behavior: input (OTP), side effects, return value (starting credit balance), and the broader onboarding context. It is complete enough for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (both parameters fully described). The description adds minor context by specifying that email must match tokonomix_onboard and code comes from the OTP email, but these are already implied in the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Verifies the 6-digit OTP') and clearly identifies the resource ('from tokonomix_onboard'). It explicitly labels itself as 'Step 2 of keyless first-run onboarding', distinguishing it from its sibling tokonomix_onboard and other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it is step 2 of onboarding, must follow tokonomix_onboard, and is a prerequisite for using other tokonomix_* tools. It does not explicitly list when-not-to-use or alternatives, but the orchestration is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tokonomix_rate_consensusA

Rate a consensus call 1–10 on real-world usefulness, after you have seen the answer play out. The request_id is returned by tokonomix_consensus_ask in the billing breakdown line ( · request_id: ...) and in the x_council.request_id metadata field. Optional: helped_model credits the ONE model whose minority or blind-spot view actually helped (the red-thread blind-spot differentiator) — supply its bare slug (e.g. "gemini-2.5-pro"). Opt-in, no friction. Optional: note accepts up to 2000 chars of free text — it IS stored (admin-only, never returned to any caller, never shown publicly verbatim) and enriched by an EU-hosted model into the agent-source day/week/month summary, kept strictly separate from the human-feedback summary. Same privacy handling as the human free text. Optional feedback (INT-1882, accepted only when the platform feedback-loop is enabled): outcome (correct|wrong|partial) is the minimal always-useful signal; findings is the rich agent signal — the real/false split per severity bucket {high,medium,low}:{real,false}. The auto-scoring already counts the buckets; you supply only whether each was a TRUE catch or a FALSE positive. Sharing the full findings earns the review-discount once go-live (one model-call less on that round). Per-account dedup: one authoritative rating per request_id per account; re-submitting updates it (last-write-wins). Requires the same API key that made the original call. Feature-gated on the platform feedback-loop: when it is disabled the tool returns a clear "not enabled" message rather than an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional free-text context (max 2000 chars). Stored admin-only, never returned to any caller and never shown publicly verbatim; enriched by an EU-hosted model into the agent-source day/week/month summary (kept separate from the human-feedback summary). Same privacy handling as the human free text.
scoreYesUsefulness score 1–10 (1 = not useful at all, 10 = extremely useful in practice).
outcomeNoOptional (feedback-loop): did the consensus answer turn out correct, wrong, or partial in practice? The minimal validation signal — upgrades the call to high-confidence scoring.
findingsNoOptional (feedback-loop, agent path): the requester real/false validation per severity bucket. Counts only — never finding text. Each count must not exceed the bucket count the call actually produced.
request_idYesThe UUID of the consensus call to rate. Returned by tokonomix_consensus_ask.
helped_modelNoOptional bare model slug of the one model whose minority view or blind-spot catch actually helped (e.g. "gemini-2.5-pro"). Blind-spot direct credit — opt-in.
consensus_benefitNoYour structured verdict on whether the council helped: caught_blind_spot / resolved_disagreement / raised_confidence / no_added_value / consensus_was_wrong. Replaces the old discarded free-text note with a privacy-safe categorical signal. Optional (feedback-loop, accepted only when the platform feedback-loop is enabled).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It covers idempotency patterns (per-account dedup, last-write-wins), authentication requirements, feature-gating with a non-error response, storage/privacy guarantees (admin-only, never returned, EU-hosted enrichment), and the relationship between auto-scoring and user-supplied bucket counts. This is exemplary transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and logically progresses through optional parameters before behavior. It is nevertheless lengthy and includes some non-essential details (e.g., 'INT-1882', 'red-thread blind-spot differentiator', 'Opt-in, no friction') that could be trimmed without losing practical guidance. Dense but slightly overpacked.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 7 parameters, nested objects, and no output schema, the description covers input semantics, privacy, dedup, auth, feature-gating, and even the discount incentive. However, it does not describe the successful return value or acknowledgment after a rating is submitted; this is a minor gap given the tool's rating confirmation purpose. Overall, it is nearly complete for the agent's decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds substantial meaning beyond field names. It explains how to obtain request_id ('billing breakdown line' and 'x_council.request_id' metadata), clarifies helped_model's blind-spot credit semantics, details that findings are counts only and must not exceed produced bucket counts, and positions consensus_benefit as a privacy-safe replacement for free text. This is far more than schema labels provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action: 'Rate a consensus call 1–10 on real-world usefulness, after you have seen the answer play out.' It clearly identifies the resource (consensus call), references the originating tool (tokonomix_consensus_ask), and distinguishes itself from sibling tools by focusing on post-hoc rating rather than asking or listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool ('after you have seen the answer play out'), imposes a precondition ('Requires the same API key that made the original call'), and mentions the feature-gated behavior with a clear 'not enabled' message. It does not explicitly name alternatives like tokonomix_relay_human_feedback, but it does contrast agent-source feedback from human-feedback summaries, implying a specific niche.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tokonomix_relay_human_feedbackA

Relay the HUMAN end-user's verdict on a consensus call — the human channel (source_type='human_via_agent'), distinct from tokonomix_rate_consensus (which is the AGENT's own rating). Use this ONLY when a real human in the session actually told you what they thought of the council's answer — NEVER fabricate or guess a human answer on their behalf; if no human weighed in, do not call this tool. The request_id is returned by tokonomix_consensus_ask in the billing breakdown line ( · request_id: ...) and in the x_council.request_id metadata field. The choice legend (ask the human, then map their answer): 1 = caught a blind spot · 2 = an important improvement · 3 = confirmed my approach · 4 = added nothing · 5 = was wrong/misleading. Optional: free_text accepts up to 2000 chars of the human's own words (trimmed and capped server-side); same privacy handling as tokonomix_rate_consensus's note — stored admin-only, never returned verbatim to any caller. Human feedback earns the (higher) human reward rate, versus the agent-source rate on tokonomix_rate_consensus. If the platform has human-feedback relay disabled, the tool returns a clear "not enabled" message instead of an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
choiceYesThe human's verdict, 1-5: 1 = caught a blind spot · 2 = an important improvement · 3 = confirmed my approach · 4 = added nothing · 5 = was wrong/misleading.
free_textNoOptional free-text context in the human's own words (max 2000 chars).
request_idYesThe UUID of the consensus call the human is giving feedback on. Returned by tokonomix_consensus_ask.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses privacy handling ('stored admin-only, never returned verbatim'), the difference in reward rate versus agent-source rate, and the fallback behavior when disabled ('returns a clear "not enabled" message instead of an error'). It also explains where request_id comes from, adding meaningful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but efficiently packed; every sentence earns its place. It is front-loaded with the core purpose, then proceeds through usage constraints, parameter sources, legend, privacy, reward, and error behavior. Dense but structured, with separators that aid scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter tool with no output schema, the description is remarkably complete. It covers when to use (human feedback relay), how to get request_id, what each choice means, optional free_text constraints, privacy, reward implications, and disabled-platform handling. No important aspect appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema: it tells the caller exactly how to obtain request_id (from the billing breakdown line and x_council.request_id metadata), explains the choice legend in a human-mapping context, and provides extra detail about free_text trimming and privacy. This exceeds baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Relay the HUMAN end-user's verdict on a consensus call.' It explicitly distinguishes itself from sibling tokonomix_rate_consensus (the AGENT's own rating), and the verb 'Relay' with the resource 'human end-user's verdict' is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage conditions are explicit: 'Use this ONLY when a real human in the session actually told you what they thought' and 'NEVER fabricate or guess... if no human weighed in, do not call this tool.' It also contrasts with tokonomix_rate_consensus to clarify when each applies, providing clear decision guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tokonomix_single_askA

Single-model passthrough call. Cheaper than consensus — use for routine reasoning, tool-orchestration, classification. Returns the model's plain answer with markup billing on top. Tip: use tokonomix_consensus_ask instead when correctness matters.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoBare model slug (e.g. "claude-haiku-4-5-20251001", "gpt-5"), or "default" to use the key/account default. Provider-prefixed slugs ("anthropic/claude-...") also accepted. If omitted, uses "default". Must be a vision-capable model when images are provided.
imagesNoOptional images to include in the user message (vision input). Non-streaming only. Requires a vision-capable model (use tokonomix_list_models({"supports":["vision"]}) to find one). Constraints: ≤8 images, ≤5 MB decoded per image, ≤20 MB total across all images.
promptYesThe user prompt to send.
systemNoOptional system prompt prepended to the messages array.
max_tokensNoMax output tokens. Default: 1024; clamped to a 16384 ceiling.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the passthrough nature, billing model, and the trade-off with consensus. It does not mention authentication or rate limits, but for a simple call tool these are less critical. The description adds value beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences plus a tip) and front-loaded with the core purpose. Every sentence contributes to understanding the tool's role, usage, and trade-offs without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage context, and return type. It does not detail error scenarios or authentication, but these are not typically required for a simple single-model call. The lack of an output schema is partially offset by the explicit mention of the plain answer return. Overall, complete enough for effective selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already well-documented. The description focuses on tool usage rather than parameter details, which is acceptable since the schema handles that. No additional parameter semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a 'Single-model passthrough call', which is a specific verb+resource. It distinguishes itself from the sibling consensus tool by mentioning cost and use cases, and it states the return value (plain answer with markup billing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is given: 'Cheaper than consensus — use for routine reasoning, tool-orchestration, classification.' It also names the alternative tool directly: 'use `tokonomix_consensus_ask` instead when correctness matters.' This fully addresses when and when not to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tokonomix_skill_versionA

Return a cheap version fingerprint of the canonical Tokonomix SKILL.md (the doc that tells you when to use the other tokonomix_* tools). No network call. Returns {version, sha256, last_changed, bytes}. Use this to detect that your local cached SKILL.md is stale — if your cached version differs from the returned one, call tokonomix_get_skill to refresh.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It states 'No network call' (indicating a cheap, local operation) and lists the exact return fields ({version, sha256, last_changed, bytes}), providing useful context. It does not explicitly state there are no side effects, but the nature of a fingerprint check implies a safe read-only operation. The absence of any warning about permissions or failure modes is acceptable for this simple tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and includes just enough detail (return fields and usage trigger) without redundancy. Every sentence adds value, making it both concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description provides a complete picture: what it returns (the hash and metadata), why it exists (detect stale cache), and how to act on the result (call tokonomix_get_skill). The tie-in to sibling tools ensures the agent understands where this fits in the broader workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to clarify about inputs. Baseline for 0 params is 4, which is appropriate since the description does not need to compensate for any undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a 'cheap version fingerprint' of the canonical SKILL.md, specifying the verb ('Return'), the resource ('version fingerprint of the canonical Tokonomix SKILL.md'), and its role in detecting stale caches. It distinguishes itself from siblings by explicitly framing itself as the lightweight version check, with tokonomix_get_skill as the refresh mechanism.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit when-to-use guidance: 'Use this to detect that your local cached SKILL.md is stale' and includes a conditional action: 'if your cached version differs from the returned one, call tokonomix_get_skill to refresh.' This names the alternative tool and gives a clear decision procedure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tokonomix_uploadA

Stage large context (over the inline cap) for a grounded consensus call (INT-1817 B08). Returns an ephemeral, region-pinned upload session: a session id + opaque handles. Pass context:{session, handles} to tokonomix_consensus_ask so all proposers + judges read the ONE shared context-pack (build-once, in-region digest). The staged content is ephemeral (auto-purged after a short retention) and region-pinned (EU by default). NEVER pass a URL — only file contents; the server never fetches a caller URL (no SSRF). Feature-gated on the account's context-upload capability: when it is not enabled the tool returns a clear "not enabled" message rather than an error. Use inline context.inline for small payloads either way.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesThe files/snippets to stage. Each is staged verbatim or digested server-side (the verbatim budget is server-bounded).

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility. It discloses key behaviors: ephemeral storage (auto-purged), region-pinned (EU default), SSRF safety (never fetches caller URL), and feature-gating (returns 'not enabled' instead of error). This is exceptional transparency beyond basic parameter descriptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence adds value: purpose, workflow, ephemeral/security properties, feature-gate, and alternative usage. It is structured with a clear logical flow and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This tool has a simple schema but significant behavioral complexity. The description covers return value semantics, the expected follow-up call, security constraints, and error handling. Since there is no output schema, the description adequately fills that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with per-field descriptions. The description adds context about how files are processed (verbatim vs digested, server-bounded budget) and how the result is used, which goes beyond the schema. It does not restate parameter names, but its extra semantic layer about staging behavior earns a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: "Stage large context (over the inline cap) for a grounded consensus call." It clearly differentiates from siblings by referencing tokonomix_consensus_ask and inline context, and it states the return type (session + handles). This is a model of purpose clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides usage guidance: use this tool for large context (over the inline cap) and use inline context.inline for small payloads. It also explains the workflow (pass the returned session to tokonomix_consensus_ask) and the feature gate behavior, which helps the agent decide when to invoke this tool.

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. 11 tool updatesv1.12.0
    • First observedtokonomix_consensus_ask
    • First observedtokonomix_get_balance
    • First observedtokonomix_get_skill
    • First observedtokonomix_list_models
    • First observedtokonomix_onboard
    • First observedtokonomix_onboard_verify
    • First observedtokonomix_rate_consensus
    • First observedtokonomix_relay_human_feedback
    • First observedtokonomix_single_ask
    • First observedtokonomix_skill_version
    • First observedtokonomix_upload

TDQS

A4.4/5.0

Scored across 11 tools

Disambiguation5/5

Each tool has a uniquely defined purpose: balance check, single vs consensus asks, model listing, skill version/content, onboarding steps, rating, human feedback, and context upload. The two ask tools are clearly differentiated by consensus vs single-model mode, and the two feedback tools separate agent rating from human relay. No overlap or ambiguity exists.

Naming Consistency4/5

All tools share the tokonomix_ prefix and snake_case, with most following a verb_noun pattern (get_balance, list_models, rate_consensus, relay_human_feedback). Minor deviations include skill_version (noun_verb) and onboard_verify (compound verb), but the overall pattern remains predictable and readable.

Tool Count5/5

At 11 tools, the set is well-scoped for its purpose: onboarding, billing, model discovery, request execution, context staging, feedback, and self-documentation. Each tool earns its place without redundancy or bloat, and the count aligns with typical MCP servers.

Completeness5/5

The toolset covers the full user lifecycle: onboarding (onboard/verify), account status (get_balance), model discovery (list_models), calling (single/consensus ask), large-context upload, and both human and agent feedback loops. It also includes a self-updating skill doc, and no obvious operational gaps exist for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers