Skip to main content
Glama

False-consensus check across 2 to 16 agent answers

consensus
Read-onlyIdempotent

False-consensus check for 2 to 16 answers to the same task, so a group of agents does not approve a spend just because they copied each other. It scores how the answers agree and flags agreement that looks copied or too thin to trust. Screwtape is not tied to the agent framework or the model that wrote the answers. Call it when several agents, samples or tools answered the same question and you are about to accept the majority. Do NOT call it with a single answer (use judge), with answers to different tasks, or as proof that an answer is correct: high agreement is not evidence. Inputs: task, answers (2 to 16 objects {agent_id?: string, output: string}), optional evidence (a string or an array of strings, used when scoring), retain, and optional call-level agent_id and version tags. The call-level agent_id is not the per-answer agent_id. Returns: consensus_answer, agreement_score, false_consensus_risk (low, medium or high), reasons, clusters, engine, request_id, retention, the tags when sent, and receipt when signing is configured. In that receipt, verdict is false_consensus_risk and score is agreement_score. If the risk is medium or high, verify consensus_answer with judge before using it. next_step.action is pass for low risk and escalate otherwise. Cost: 1 call. First 3 calls per UTC day need no key; then use Authorization: Bearer or pay per call. A free key covers 10 calls per UTC day (get_api_key or https://screwtape.ai/signup/). After the shared 3/day anonymous allowance (3/minute, global 2000/day), tools/call without a key or payment is HTTP 200 with isError true and the payment requirements in structuredContent.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "task": "<task>",
      "answers": "<answers>"
    },
    "name": "consensus"
  }
}

Input Schema

NameRequiredDescriptionDefault
modeNoOptional. blocking (the default) is today's behaviour. advisory computes the same verdict, checks, next_step and receipt, then adds mode, decision_owner human, recommended_action (approve, review or return) and a notice. The receipt signs mode advisory as schema_version 5. Same price.
taskYesThe question all answers respond to.
shareNoOptional. false keeps this call out of opt-in data sharing even when the key has sharing on. It cannot turn sharing on.
retainNoOptional. true stores this call for 24 hours; requires an API key. Default false.
answersYes2 to 16 answers. Each is {agent_id (optional, string), output (string)}. Use one entry per agent or sample.
versionNoOptional version tag for that agent. At most 64 characters.
agent_idNoOptional tag for the agent making this call. 1 to 64 characters: letters, digits, and . _ : -. This is not the per-answer agent_id on a consensus answer.
evidenceNoOptional passages the agreed answer should be grounded in. A string is one passage. An array holds up to 20 passages of 4000 characters. Used when scoring false-consensus risk.

Output Schema

NameRequiredDescriptionDefault
modeNoPresent only when the call sent mode: advisory.
modelNo
engineNogroq, workers_ai, deterministic, or demo.
noticeNoAdvisory only. Fixed text: the call does not approve, hold or release any payment.
reasonsYes
receiptNo
versionNoEchoed when the call sent a version tag.
agent_idNoEchoed when the call sent an agent_id tag. Not the per-answer agent_id.
clustersNo
degradedNo
next_stepNo
retentionNo
request_idYes
verificationNo
decision_ownerNoAdvisory only. A person owns the decision.
receipt_reasonNo
agreement_scoreYesnull when no model scored agreement (degraded).
consensus_answerNo
recommended_actionNoAdvisory only, deterministic and not signed. Judge: next_step pass is approve, escalate is review, retry is return (send back to the agent). Consensus: risk low is approve, medium or high is review.
false_consensus_riskYes
unsupported_agreementNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / answers / description
      Previous value: -"2 to 16 answers. Each is {agent_id (optional, string), output (string)}. Use one entry per independent agent or sample."New value: +"2 to 16 answers. Each is {agent_id (optional, string), output (string)}. Use one entry per agent or sample."
    • changedOutput schema / properties / next_step / properties / error_type / enum
      Previous value: -[
      -  "none",
      -  "invalid_json",
      -  "not_an_object",
      -  "missing_required_field",
      -  "type_mismatch",
      -  "format_mismatch",
      -  "sum_mismatch",
      -  "check_failed",
      -  "external_check_failed",
      -  "duplicate_invoice",
      -  "possible_duplicate",
      -  "quality_issue",
      -  "contradicted_claims",
      -  "rejected",
      -  "low_confidence",
      -  "unverifiable",
      -  "false_consensus_risk",
      -  "primary_engine_unavailable"
      -]New value: +[
      +  "none",
      +  "invalid_json",
      +  "not_an_object",
      +  "missing_required_field",
      +  "type_mismatch",
      +  "format_mismatch",
      +  "sum_mismatch",
      +  "check_failed",
      +  "external_check_failed",
      +  "duplicate_invoice",
      +  "possible_duplicate",
      +  "payee_account_changed",
      +  "document_too_large",
      +  "quality_issue",
      +  "contradicted_claims",
      +  "rejected",
      +  "low_confidence",
      +  "unverifiable",
      +  "false_consensus_risk",
      +  "primary_engine_unavailable"
      +]
    • changedOutput schema / properties / receipt / properties / checks / description
      Previous value: -"Type, passed, and evidence_hash only. Fetched page text and chain responses are not stored."New value: +"Type, passed, and evidence_hash only. Fetched content is not stored."
    • changedOutput schema / properties / receipt / properties / model / description
      Previous value: -"Present only on schema 7 and 8: the model id the provider echoed back for this verdict, for example openai/gpt-oss-120b. Signed, so a changed model id fails verification."New value: +"Present only on schema 7 and 8: the model id the provider echoed back for this verdict. Signed, so a changed model id fails verification."
    • changedOutput schema / properties / receipt / properties / payment / description
      Previous value: -"x402 includes tx, network, and payer. Schema 4 free-key and prepaid payments are the label only, with no key_prefix. Schema 3 may include the key display prefix, not the secret. demo is the /try/ allowance."New value: +"How the call was paid. free-key and prepaid are the label only on schema 4; schema 3 may include the key display prefix, never the secret. demo is the /try/ allowance. Other paid calls may add tx, network and payer."
    • removedOutput schema / properties / receipt / properties / payment / properties / type / enum
      Removed value: -[
      -  "x402",
      -  "free-key",
      -  "prepaid",
      -  "demo"
      -]
  2. Changed10 schema fields changed
    • addedOutput schema / properties / agreement_score / description
      Added value: +"null when no model scored agreement (degraded)."
    • changedOutput schema / properties / agreement_score / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • addedOutput schema / properties / degraded
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / model
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / receipt / properties / mode / description
      Previous value: -"Present only on schema 5: the call was advisory, so a person, not the API, owned the decision. Blocking receipts omit it."New value: +"Present only on schema 5 and 8: the call was advisory, so a person, not the API, owned the decision. Blocking receipts omit it."
    • addedOutput schema / properties / receipt / properties / model
      Added value: +{
      +  "description": "Present only on schema 7 and 8: the model id the provider echoed back for this verdict, for example openai/gpt-oss-120b. Signed, so a changed model id fails verification.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / receipt / properties / schema_version / description
      Previous value: -"5 is schema 4 plus a signed mode advisory, minted only for mode: advisory calls. 4 omits key_prefix from payment so a published receipt verifies without key info. 3 adds verification, engine, checks (type, passed, and evidence_hash only), and a claims count, and may include key_prefix. 2 can carry agent_id and version. Older receipts omit this field and still verify."New value: +"7 is schema 4 plus a signed model id, and 8 is schema 5 plus a signed model id: minted when a model gave the verdict. 5 is schema 4 plus a signed mode advisory, minted only for mode: advisory calls. 4 omits key_prefix from payment so a published receipt verifies without key info. 3 adds verification, engine, checks (type, passed, and evidence_hash only), and a claims count, and may include key_prefix. 2 can carry agent_id and version. Older receipts omit this field and still verify."
    • changedOutput schema / properties / receipt / properties / schema_version / enum
      Previous value: -[
      -  2,
      -  3,
      -  4,
      -  5
      -]New value: +[
      +  2,
      +  3,
      +  4,
      +  5,
      +  7,
      +  8
      +]
    • changedOutput schema / properties / receipt / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
    • addedOutput schema / properties / receipt_reason
      Added value: +{
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / properties / next_step / properties / error_type / enum
      Previous value: -[
      -  "none",
      -  "invalid_json",
      -  "not_an_object",
      -  "missing_required_field",
      -  "type_mismatch",
      -  "format_mismatch",
      -  "sum_mismatch",
      -  "check_failed",
      -  "external_check_failed",
      -  "duplicate_invoice",
      -  "possible_duplicate",
      -  "quality_issue",
      -  "contradicted_claims",
      -  "rejected",
      -  "low_confidence",
      -  "unverifiable",
      -  "false_consensus_risk"
      -]New value: +[
      +  "none",
      +  "invalid_json",
      +  "not_an_object",
      +  "missing_required_field",
      +  "type_mismatch",
      +  "format_mismatch",
      +  "sum_mismatch",
      +  "check_failed",
      +  "external_check_failed",
      +  "duplicate_invoice",
      +  "possible_duplicate",
      +  "quality_issue",
      +  "contradicted_claims",
      +  "rejected",
      +  "low_confidence",
      +  "unverifiable",
      +  "false_consensus_risk",
      +  "primary_engine_unavailable"
      +]
  4. Changed8 schema fields changed
    • addedInput schema / properties / mode
      Added value: +{
      +  "description": "Optional. blocking (the default) is today's behaviour. advisory computes the same verdict, checks, next_step and receipt, then adds mode, decision_owner human, recommended_action (approve, review or return) and a notice. The receipt signs mode advisory as schema_version 5. Same price.",
      +  "enum": [
      +    "blocking",
      +    "advisory"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / decision_owner
      Added value: +{
      +  "description": "Advisory only. A person owns the decision.",
      +  "enum": [
      +    "human"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / mode
      Added value: +{
      +  "description": "Present only when the call sent mode: advisory.",
      +  "enum": [
      +    "advisory"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Advisory only. Fixed text: the call does not approve, hold or release any payment.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / receipt / properties / mode
      Added value: +{
      +  "description": "Present only on schema 5: the call was advisory, so a person, not the API, owned the decision. Blocking receipts omit it.",
      +  "enum": [
      +    "advisory"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / receipt / properties / schema_version / description
      Previous value: -"4 omits key_prefix from payment so a published receipt verifies without key info. 3 adds verification, engine, checks (type, passed, and evidence_hash only), and a claims count, and may include key_prefix. 2 can carry agent_id and version. Older receipts omit this field and still verify."New value: +"5 is schema 4 plus a signed mode advisory, minted only for mode: advisory calls. 4 omits key_prefix from payment so a published receipt verifies without key info. 3 adds verification, engine, checks (type, passed, and evidence_hash only), and a claims count, and may include key_prefix. 2 can carry agent_id and version. Older receipts omit this field and still verify."
    • changedOutput schema / properties / receipt / properties / schema_version / enum
      Previous value: -[
      -  2,
      -  3,
      -  4
      -]New value: +[
      +  2,
      +  3,
      +  4,
      +  5
      +]
    • addedOutput schema / properties / recommended_action
      Added value: +{
      +  "description": "Advisory only, deterministic and not signed. Judge: next_step pass is approve, escalate is review, retry is return (send back to the agent). Consensus: risk low is approve, medium or high is review.",
      +  "enum": [
      +    "approve",
      +    "review",
      +    "return"
      +  ],
      +  "type": "string"
      +}
  5. Changed1 schema field changed
    • changedOutput schema / properties / next_step / properties / error_type / enum
      Previous value: -[
      -  "none",
      -  "invalid_json",
      -  "not_an_object",
      -  "missing_required_field",
      -  "type_mismatch",
      -  "format_mismatch",
      -  "sum_mismatch",
      -  "check_failed",
      -  "external_check_failed",
      -  "quality_issue",
      -  "contradicted_claims",
      -  "rejected",
      -  "low_confidence",
      -  "unverifiable",
      -  "false_consensus_risk"
      -]New value: +[
      +  "none",
      +  "invalid_json",
      +  "not_an_object",
      +  "missing_required_field",
      +  "type_mismatch",
      +  "format_mismatch",
      +  "sum_mismatch",
      +  "check_failed",
      +  "external_check_failed",
      +  "duplicate_invoice",
      +  "possible_duplicate",
      +  "quality_issue",
      +  "contradicted_claims",
      +  "rejected",
      +  "low_confidence",
      +  "unverifiable",
      +  "false_consensus_risk"
      +]
  6. Changed1 schema field changed
    • addedInput schema / properties / share
      Added value: +{
      +  "description": "Optional. false keeps this call out of opt-in data sharing even when the key has sharing on. It cannot turn sharing on.",
      +  "type": "boolean"
      +}
  7. Changed2 schema fields changed
    • addedOutput schema / properties / next_step
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "action": {
      +      "description": "pass: use the output. retry: fix it using hint and call again. escalate: stop and hand to a person.",
      +      "enum": [
      +        "pass",
      +        "retry",
      +        "escalate"
      +      ],
      +      "type": "string"
      +    },
      +    "error_type": {
      +      "enum": [
      +        "none",
      +        "invalid_json",
      +        "not_an_object",
      +        "missing_required_field",
      +        "type_mismatch",
      +        "format_mismatch",
      +        "sum_mismatch",
      +        "check_failed",
      +        "external_check_failed",
      +        "quality_issue",
      +        "contradicted_claims",
      +        "rejected",
      +        "low_confidence",
      +        "unverifiable",
      +        "false_consensus_risk"
      +      ],
      +      "type": "string"
      +    },
      +    "hint": {
      +      "description": "Template text naming fields and types to fix. Never contains values from agent_output.",
      +      "maxLength": 300,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "action",
      +    "error_type",
      +    "hint"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / verification / enum
      Previous value: -[
      -  "verified",
      -  "judged",
      -  "heuristic"
      -]New value: +[
      +  "verified",
      +  "judged",
      +  "heuristic",
      +  "failed"
      +]
  8. Changed7 schema fields changed
    • changedOutput schema / properties / receipt / properties / engine / description
      Previous value: -"groq, workers_ai, deterministic, or demo. Present on schema 3."New value: +"groq, workers_ai, deterministic, or demo. Present on schema 3 and 4."
    • changedOutput schema / properties / receipt / properties / payment / description
      Previous value: -"x402 includes tx, network, and payer. free-key and prepaid include the key display prefix, not the secret. demo is the /try/ allowance."New value: +"x402 includes tx, network, and payer. Schema 4 free-key and prepaid payments are the label only, with no key_prefix. Schema 3 may include the key display prefix, not the secret. demo is the /try/ allowance."
    • addedOutput schema / properties / receipt / properties / payment / properties / key_prefix / description
      Added value: +"Present on schema 3 free-key and prepaid payments. Omitted on schema 4. Never the secret."
    • changedOutput schema / properties / receipt / properties / schema_version / description
      Previous value: -"3 adds verification, engine, checks (type, passed, and evidence_hash only), and a claims count. 2 can carry agent_id and version. Older receipts omit this field and still verify."New value: +"4 omits key_prefix from payment so a published receipt verifies without key info. 3 adds verification, engine, checks (type, passed, and evidence_hash only), and a claims count, and may include key_prefix. 2 can carry agent_id and version. Older receipts omit this field and still verify."
    • changedOutput schema / properties / receipt / properties / schema_version / enum
      Previous value: -[
      -  2,
      -  3
      -]New value: +[
      +  2,
      +  3,
      +  4
      +]
    • changedOutput schema / properties / receipt / properties / verification / description
      Previous value: -"verified when every supplied check passed. judged when only a model ran. heuristic when only string checks ran."New value: +"verified when a check of the answer passed. judged when a model checked it and did not contradict it. heuristic when only string checks ran. failed when the agreed answer failed verification."
    • changedOutput schema / properties / receipt / properties / verification / enum
      Previous value: -[
      -  "verified",
      -  "judged",
      -  "heuristic"
      -]New value: +[
      +  "verified",
      +  "judged",
      +  "heuristic",
      +  "failed"
      +]
  9. Changed9 schema fields changed
    • addedOutput schema / properties / engine / description
      Added value: +"groq, workers_ai, deterministic, or demo."
    • addedOutput schema / properties / receipt / properties / checks
      Added value: +{
      +  "description": "Type, passed, and evidence_hash only. Fetched page text and chain responses are not stored.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "evidence_hash": {
      +        "type": "string"
      +      },
      +      "passed": {
      +        "type": "boolean"
      +      },
      +      "type": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "passed",
      +      "evidence_hash"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / receipt / properties / claims
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "contradicted": {
      +      "type": "integer"
      +    },
      +    "supported": {
      +      "type": "integer"
      +    },
      +    "total": {
      +      "type": "integer"
      +    },
      +    "unsupported": {
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "total",
      +    "supported",
      +    "contradicted",
      +    "unsupported"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / receipt / properties / engine
      Added value: +{
      +  "description": "groq, workers_ai, deterministic, or demo. Present on schema 3.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / receipt / properties / schema_version / description
      Previous value: -"2 for receipts that can carry agent_id and version. Older receipts omit this field and still verify."New value: +"3 adds verification, engine, checks (type, passed, and evidence_hash only), and a claims count. 2 can carry agent_id and version. Older receipts omit this field and still verify."
    • changedOutput schema / properties / receipt / properties / schema_version / enum
      Previous value: -[
      -  2
      -]New value: +[
      +  2,
      +  3
      +]
    • addedOutput schema / properties / receipt / properties / verification
      Added value: +{
      +  "description": "verified when every supplied check passed. judged when only a model ran. heuristic when only string checks ran.",
      +  "enum": [
      +    "verified",
      +    "judged",
      +    "heuristic"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / unsupported_agreement
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / verification
      Added value: +{
      +  "enum": [
      +    "verified",
      +    "judged",
      +    "heuristic"
      +  ],
      +  "type": "string"
      +}
  10. Changed8 schema fields changed
    • addedInput schema / properties / agent_id
      Added value: +{
      +  "description": "Optional tag for the agent making this call. 1 to 64 characters: letters, digits, and . _ : -. This is not the per-answer agent_id on a consensus answer.",
      +  "maxLength": 64,
      +  "pattern": "^[A-Za-z0-9._:-]{1,64}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / version
      Added value: +{
      +  "description": "Optional version tag for that agent. At most 64 characters.",
      +  "maxLength": 64,
      +  "type": "string"
      +}
    • addedOutput schema / properties / agent_id
      Added value: +{
      +  "description": "Echoed when the call sent an agent_id tag. Not the per-answer agent_id.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / receipt / properties / agent_id
      Added value: +{
      +  "description": "Present when the call sent an agent_id tag. Omitted otherwise. Older receipts omit it.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / receipt / properties / request_sha256 / description
      Previous value: -"Lowercase hex SHA-256 of the canonical JSON of the normalized request. Judge requests include task, agent_output, evidence, and criteria. Consensus requests include task and answers, plus evidence when it was sent."New value: +"Lowercase hex SHA-256 of the canonical JSON of the normalized request. Judge requests include task, agent_output, evidence, and criteria. Consensus requests include task and answers, plus evidence when it was sent. agent_id and version tags are signed separately and are not part of this hash."
    • addedOutput schema / properties / receipt / properties / schema_version
      Added value: +{
      +  "description": "2 for receipts that can carry agent_id and version. Older receipts omit this field and still verify.",
      +  "enum": [
      +    2
      +  ],
      +  "type": "integer"
      +}
    • addedOutput schema / properties / receipt / properties / version
      Added value: +{
      +  "description": "Present when the call sent a version tag. Omitted otherwise. Older receipts omit it.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / version
      Added value: +{
      +  "description": "Echoed when the call sent a version tag.",
      +  "type": "string"
      +}
  11. Changed4 schema fields changed
    • addedInput schema / properties / evidence
      Added value: +{
      +  "description": "Optional passages the agreed answer should be grounded in. A string is one passage. An array holds up to 20 passages of 4000 characters. Used when scoring false-consensus risk.",
      +  "oneOf": [
      +    {
      +      "maxLength": 4000,
      +      "type": "string"
      +    },
      +    {
      +      "items": {
      +        "maxLength": 4000,
      +        "type": "string"
      +      },
      +      "maxItems": 20,
      +      "type": "array"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / receipt / additionalProperties
      Added value: +false
    • addedOutput schema / properties / receipt / properties / payment / additionalProperties
      Added value: +false
    • changedOutput schema / properties / receipt / properties / request_sha256 / description
      Previous value: -"Lowercase hex SHA-256 of the canonical JSON of the normalized request. Judge requests include task, agent_output, evidence, and criteria. Consensus requests include task and answers."New value: +"Lowercase hex SHA-256 of the canonical JSON of the normalized request. Judge requests include task, agent_output, evidence, and criteria. Consensus requests include task and answers, plus evidence when it was sent."
  12. Changed8 schema fields changed
    • changedInput schema / properties / answers / description
      Previous value: -"At least two answers, the same minimum as POST /v1/consensus."New value: +"2 to 16 answers. Each is {agent_id (optional, string), output (string)}. Use one entry per independent agent or sample."
    • addedInput schema / properties / answers / items / properties / agent_id / description
      Added value: +"Optional name of the agent or sample that produced this answer."
    • addedInput schema / properties / answers / items / properties / output / description
      Added value: +"That agent's answer."
    • addedInput schema / properties / retain / description
      Added value: +"Optional. true stores this call for 24 hours; requires an API key. Default false."
    • addedInput schema / properties / task / description
      Added value: +"The question all answers respond to."
    • addedOutput schema / properties / clusters
      Added value: +{
      +  "type": "array"
      +}
    • addedOutput schema / properties / reasons
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / required
      Added value: +[
      +  "agreement_score",
      +  "false_consensus_risk",
      +  "reasons",
      +  "request_id"
      +]
  13. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "agreement_score": {
      +      "type": "number"
      +    },
      +    "consensus_answer": {
      +      "type": "string"
      +    },
      +    "engine": {
      +      "type": "string"
      +    },
      +    "false_consensus_risk": {
      +      "enum": [
      +        "low",
      +        "medium",
      +        "high"
      +      ],
      +      "type": "string"
      +    },
      +    "receipt": {
      +      "properties": {
      +        "alg": {
      +          "enum": [
      +            "Ed25519"
      +          ],
      +          "type": "string"
      +        },
      +        "endpoint": {
      +          "enum": [
      +            "/v1/judge",
      +            "/v1/consensus"
      +          ],
      +          "type": "string"
      +        },
      +        "issued_at": {
      +          "description": "ISO-8601 UTC timestamp.",
      +          "type": "string"
      +        },
      +        "kid": {
      +          "type": "string"
      +        },
      +        "payment": {
      +          "description": "x402 includes tx, network, and payer. free-key and prepaid include the key display prefix, not the secret. demo is the /try/ allowance.",
      +          "properties": {
      +            "key_prefix": {
      +              "type": "string"
      +            },
      +            "network": {
      +              "type": "string"
      +            },
      +            "payer": {
      +              "type": "string"
      +            },
      +            "tx": {
      +              "description": "Settled transaction id, or the accepted payment nonce when nothing was settled.",
      +              "type": "string"
      +            },
      +            "type": {
      +              "enum": [
      +                "x402",
      +                "free-key",
      +                "prepaid",
      +                "demo"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "type"
      +          ],
      +          "type": "object"
      +        },
      +        "receipt_id": {
      +          "type": "string"
      +        },
      +        "request_sha256": {
      +          "description": "Lowercase hex SHA-256 of the canonical JSON of the normalized request. Judge requests include task, agent_output, evidence, and criteria. Consensus requests include task and answers.",
      +          "type": "string"
      +        },
      +        "score": {
      +          "description": "Judge score from 0 to 1. For consensus this is agreement_score.",
      +          "type": "number"
      +        },
      +        "signature": {
      +          "description": "Unpadded base64url Ed25519 signature over the canonical JSON of every field except signature.",
      +          "type": "string"
      +        },
      +        "verdict": {
      +          "description": "Judge verdict (pass, fail, or retry). For consensus this is false_consensus_risk (low, medium, or high).",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "receipt_id",
      +        "issued_at",
      +        "endpoint",
      +        "request_sha256",
      +        "verdict",
      +        "score",
      +        "payment",
      +        "alg",
      +        "kid",
      +        "signature"
      +      ],
      +      "type": "object"
      +    },
      +    "request_id": {
      +      "type": "string"
      +    },
      +    "retention": {
      +      "type": "object"
      +    }
      +  },
      +  "type": "object"
      +}
  14. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is low, yet the description adds a great deal: cost (1 call), the anonymous quota (3/day, 3/minute, 2000/day global), key requirements and how the failure surfaces (HTTP 200 with isError true and payment requirements in structuredContent), retention semantics for retain, and the verdict/score field aliasing inside the signed receipt. None of this is inferable from the 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.

Conciseness4/5

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

Front-loaded with purpose, then exclusions, then inputs and returns, then pricing — a sensible ordering with no filler sentences. The auth/rate-limit paragraph is long and the return-field enumeration partly duplicates the existing output schema, which keeps it from a 5.

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?

Covers purpose, exclusions, inputs, return fields, the receipt aliasing, the recommended follow-up action, and the full cost/auth model for a paywalled 8-parameter tool. Since an output schema exists, the added return summary is a bonus rather than a necessity, and nothing an agent needs to call it correctly is 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 the baseline is 3, but the description earns a point by disambiguating a genuine trap: 'The call-level agent_id is not the per-answer agent_id.' It also explains evidence is 'used when scoring' and that the answer objects are {agent_id?, output} with one entry per agent or sample.

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 first sentence gives a specific verb and resource — 'False-consensus check for 2 to 16 answers to the same task' — plus the exact failure mode it guards against (agents approving a spend because they copied each other). This is clearly separable from the sibling 'judge' (single-answer scoring) and from 'try_check' or 'check_duplicate_invoice'.

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 when-to-use ('several agents, samples or tools answered the same question and you are about to accept the majority') and explicit when-not ('Do NOT call it with a single answer (use judge), with answers to different tasks, or as proof that an answer is correct'), each with the alternative named. It even specifies the follow-up path: if risk is medium or high, verify consensus_answer with judge.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources