Skip to main content
Glama

Council of AI GSPC

Server Details

13 tools (9 free, 4 x402-metered): GSPC board, evidence, Ed25519 card verify. Measurement only.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.1/5.0

Scored across 16 tools

Disambiguation4/5

Each tool targets a distinct artifact or action: board, axis, card, capsule, root, server, RWA/art50 evidence, and the detailed descriptions make boundaries reasonably clear. The verify_capsule/verify_card/verify_inclusion cluster and the multiple evidence/trust snapshot tools could still cause a mispick when an agent only skims names.

Naming Consistency3/5

The set mixes verb-prefixed tools like get_axis, list_cards, and verify_capsule with noun-phrase tools like board_totals, mcp_trust, measurement_index, and rwa_evidence. All names are readable snake_case, but the lack of a single predictable action pattern makes the naming convention inconsistent.

Tool Count4/5

Sixteen tools sits just above the typical well-scoped range, but the domain genuinely spans board data, card and capsule verification, paid evidence routes, and trust snapshots. Each tool has a non-trivial distinct purpose, though a few of the trust/evidence tools could plausibly be consolidated.

Completeness4/5

The surface covers the core read-and-verify workflow: retrieving board/axis/card data, verifying card signatures and Merkle inclusion, verifying capsules, and commissioning paid evidence or receipt batches. Minor gaps exist, such as no direct get-capsule-by-id tool, but create/update operations for board state appear out of scope for this measurement/evidence service.

Available Tools

16 tools
art50_marking_evidenceArticle 50 marking evidence (paid, x402; preview free)AInspect

PAID (x402 or CSOAI LTD invoice). Article 50 marking-evidence pack via https://councilof.ai/api/art50/marking-evidence: is a machine-readable mark DETECTABLE in these bytes right now (C2PA manifest store, assertion hashes, hard binding, claim signature; IPTC digitalSourceType), beside the verbatim Art 50(2) excerpt hash and the Art 99(4) ceiling. Watermarks are UNCHECKABLE where no public detector exists and the pack says so. Point-in-time detection — never a conformity opinion, never a compliance word of any kind. preview=true is free and returns the same measurement unsigned. Without x_payment the tool returns the 402 challenge. If the route is not deployed on this origin the tool says NOT_DEPLOYED rather than inventing a result.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPublic http(s) URL of the generative output to measure (≤20 MiB).
previewNotrue = free unsigned measurement (no card sha, no signature).
bytes_b64NoAlternatively the output bytes, base64 (≤20 MiB decoded).
x_paymentNoThe X-PAYMENT header value signed against accepts[] from the previous 402. Omit to receive the challenge.
manifest_b64NoAlternatively a detached C2PA manifest store, base64 (manifest-only mode).

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolNo
routeNo
statusYesPAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>
acceptsNo
resourceNo
deliverableNo
http_statusNo
x402VersionNo
delivery_stateNo
settlement_stateNo
payment_presentedNo
not_a_certificationNo

TDQS

A4.2/5.0
Behavior5/5

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

The description discloses far beyond the annotations: payment requirements, the 402 challenge flow, the free unsigned preview behavior, the NOT_DEPLOYED fallback, and the limitation that watermarks are UNCHECKABLE when no public detector exists. This gives an agent realistic expectations for success and failure modes, with no contradiction against the annotations.

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 dense and jargon-heavy, but each sentence carries a distinct operational fact: payment, detection scope, preview behavior, 402 handling, and deployment fallback. It is front-loaded with the PAID gate and avoids filler, though the opening endpoint URL could arguably be omitted without losing value.

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 complex paid tool with a 402 flow, the description covers the essential invocation behaviors: payment, free preview, unsigned output, and honest failure modes. An output schema exists, so return-value documentation is not required. The only notable gap is explicitly guiding which of url, bytes_b64, or manifest_b64 to provide, but the schema's 'Alternatively' labels already cover that distinction.

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 meaningful semantics for x_payment (it is the signed challenge response required to proceed) and preview (free and returns the same measurement unsigned), which are not fully captured by the schema field descriptions alone. Other parameters remain schema-level but are already well described there.

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

Purpose4/5

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

The description clearly identifies the resource (Article 50 marking-evidence pack) and the core operation: detecting whether a machine-readable mark is present in given bytes, along with Art 50(2) and Art 99(4) hashes. It is distinguishable by its explicit point-in-time detection scope, though it does not explicitly contrast itself with sibling tools like rwa_evidence or verify_inclusion.

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 strong usage context: the tool is paid, requires x402 or an invoice, preview=true provides a free unsigned path, and omitting x_payment triggers a 402 challenge. It also states what the tool will never do (conformity opinion/compliance word), but stops short of naming alternatives or saying 'use this when you need X instead of Y'.

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

board_totalsLive GSPC board totalsA
Read-onlyIdempotent
Inspect

Live GSPC board totals from https://councilof.ai/api/gspc. Returns the slot count and the measured count as two labelled numbers WITH their kind — a slot is a declared position on the board, a measurement is a real run behind it; the two are never summed and never swapped — plus as_of dates for the board and for this fetch. We measure, never certify. If the board cannot be fetched the answer is a distinct UNREACHABLE state: no cached number is ever presented as live.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNo
stateYesLIVE or UNREACHABLE
countsNo
sourceNo
by_familyNo
public_countNo
count_grammarNo
not_a_certificationNo

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses critical behaviors beyond the annotations: the two numbers are never summed or swapped, a distinct UNREACHABLE state is returned on fetch failure, and no cached number is presented as live. These details significantly inform an agent's expectations, complementing the readOnlyHint and openWorldHint annotations.

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 meaningful context. It front-loads the core purpose and then elaborates on the distinct numbers and failure behavior. It could be tightened slightly but remains efficient and well-organized.

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?

Despite not showing the output schema, the description fully specifies what is returned (slot count, measured count, as_of dates) and covers edge cases (unreachable state, no caching). This is comprehensive for a zero-parameter tool with a simple response.

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 no parameters, so the baseline of 4 applies. The description adds no parameter-specific details because none exist, and it properly focuses on the output semantics instead.

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's purpose: returning live GSPC board totals from a specific URL, with explicit distinction between slot count and measured count. It also sets it apart from siblings by emphasizing the 'live' nature and the unreachable state, making its function unmistakable.

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 does not explicitly name alternatives or provide when-not-to-use guidance, but its specificity makes the intended use obvious: for retrieving current board totals. The absence of exclusions is acceptable given the tool's narrow, well-defined scope.

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

commission_cardCommission a measurement card (paid, x402)AInspect

PAID (x402). Commission one signed card-v0 receipt (surface ras.commission) for a named subject on the frozen bank via https://councilof.ai/api/request-attestation. Re-serves every signed measurement card already on file for the subject; a payment never mints a MEASURED cell (fresh_run stays UNMEASURED until a published run exists). Without x_payment the tool returns the 402 challenge (accepts[] with asset, amount, payTo) plus a free preview of the cards already on file. Measurement, not certification — never a rank, a grade or a certificate. Verification stays free.

ParametersJSON Schema
NameRequiredDescriptionDefault
axisNoOptional axis slug; omit for the subject-level commission.
subjectYesSubject to commission: a model id, instrument id or card sha (1-120 chars of [A-Za-z0-9._:/@+-]).
x_paymentNoThe X-PAYMENT header value (base64 x402 payload) signed by your wallet against accepts[] from the previous 402. Omit to receive the challenge.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolNo
routeNo
statusYesPAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>
acceptsNo
resourceNo
deliverableNo
http_statusNo
x402VersionNo
delivery_stateNo
settlement_stateNo
payment_presentedNo
not_a_certificationNo

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond annotations by disclosing the paid x402 nature, the re-serving behavior, and that 'a payment never mints a MEASURED cell (fresh_run stays UNMEASURED until a published run exists).' Also describes the no-payment fallback response and the semantic boundary against certification.

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?

Dense but every sentence earns its place: main action, payment semantics, challenge mode, and scope boundaries. Front-loaded with 'PAID (x402)' and the core action before caveats.

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 paid x402 tool with three parameters and an output schema, the description covers the full call flow: challenge without payment, completion with payment, effects on existing cards and fresh_run, and the boundary against certification. Nothing needed to invoke 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 adds behavioral meaning to the parameters: the x_payment challenge/response flow, what 'subject' can be (model id, instrument id, card sha), and the effect on fresh_run state. This goes beyond the schema's property descriptions.

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?

States the specific action 'Commission one signed card-v0 receipt' for a named subject on the frozen bank, via a concrete endpoint. It also draws clear boundaries: 'Measurement, not certification — never a rank, a grade or a certificate,' distinguishing it from verification and certification tools in the sibling list.

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?

Explains the two-step usage: omit x_payment to get the 402 challenge and free preview, then supply x_payment to complete. It excludes certification and notes 'Verification stays free,' steering agents toward free verification alternatives, though it does not name the specific sibling tool.

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

get_axisOne GSPC board axisA
Read-onlyIdempotent
Inspect

One axis row from the live GSPC board at https://councilof.ai/api/gspc — every axis the board carries, behavioural and financial families alike, addressed by the axis id exactly as the board spells it: n, accuracy, interval, MEASURED or UNMEASURED status, family, kind, the bank or run-artifact URL behind the row, and dates. An unmeasured axis is a first-class answer — a declared slot with no run behind it, published so the gap is visible — never an error and never a zero. Never a certification.

ParametersJSON Schema
NameRequiredDescriptionDefault
axisYesThe axis name as it appears on the board, e.g. governance, safety, jail, provenance-controls. Case-insensitive. An unknown name returns the list of names the board actually carries.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nNo
axisNo
stateYesLIVE, NOT_ON_BOARD, BAD_INPUT or UNREACHABLE
familyNo
leaderNo
sourceNo
statusNo
datasetNo
accuracyNo
intervalNo
measuredNo
board_carriesNo
resolved_fromNopresent when the caller named an alias (e.g. gov) that resolved to this board axis
not_a_certificationNo

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already mark the tool read-only and idempotent, and the description adds rich behavioral context: unmeasured axes are valid first-class responses, not errors or zeros; unknown names return a list of board names; and responses come from a live board URL. There is no contradiction with the annotations.

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 operation and packs useful detail into three sentences. It is slightly dense in the middle, where the row fields follow the axis-id clause, but every part earns its place.

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 one-parameter read-only tool with an output schema and strong annotations, the description covers lookup behavior, edge cases such as unmeasured axes and unknown names, and the data source. Nothing an agent needs to correctly invoke it is missing.

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 has 100% coverage for the sole parameter, including case-insensitivity and the unknown-name fallback. The description reinforces exact board spelling and the fields returned, but it does not materially change the parameter's meaning beyond what the schema already 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 opens with a concrete action and resource: returns one axis row from the live GSPC board. It lists the row's fields and clarifies that it is a single-axis lookup, not a board-level or card-level operation. The 'Never a certification' line further sharpens the tool's purpose.

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?

The description clearly establishes that this is a single-axis lookup by exact board id, but it does not name sibling alternatives or explicitly state when to choose this over board_totals, list_cards, or get_card. The 'Never a certification' line gives one negative boundary, so usage guidance is implied rather than explicit.

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

get_cardOne public-root card-v0 leafA
Read-onlyIdempotent
Inspect

GET one public-root card-v0 leaf by sha256 (64 hex) from https://councilof.ai/cards/{sha16}.json. UNMEASURED cells stay visible. Three states: VALID (fetched), INVALID (not a leaf of the live root), UNCHECKABLE (fetch failed). Not a GSPC measurement-card.

ParametersJSON Schema
NameRequiredDescriptionDefault
sha256Yes64-char hex payload SHA-256 of the card-v0 leaf.

Output Schema

ParametersJSON Schema
NameRequiredDescription
stateYesVALID, INVALID or UNCHECKABLE
reasonNo
sha256No
sourceNo
surfaceNo
not_gspcNo
unmeasuredNo
sig_ed25519No

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds valuable behavioral context: the three states (VALID, INVALID, UNCHECKABLE), the visible UNMEASURED cells, and the source URL. This goes beyond the annotations without contradicting them.

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 compact, front-loaded with the action and resource, and every sentence contributes: the URL, the states, and the exclusion of GSPC measurement cards. 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?

An output schema exists, so return values need not be described. The description covers the states, the URL, and the card type, and the annotations handle safety. It is sufficiently complete for a single-card fetch, though it could briefly mention alternatives (addressed in usage guidelines).

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 already documents the parameter (64-char hex SHA-256) with 100% coverage, so the description repeats that. It adds the URL pattern and confirms the purpose, but no new semantic meaning beyond the schema. Baseline 3 is appropriate given high schema coverage.

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 (GET), a precise resource (card-v0 leaf), and the exact identifier (sha256 hex). It also distinguishes itself from a sibling class ('Not a GSPC measurement-card'), making its purpose unambiguous.

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?

The description implies usage for fetching a specific public-root card by hash and clarifies it is not a GSPC measurement-card, but it does not explicitly contrast with other siblings like verify_card or get_root. There is no 'use this when' or 'instead of' guidance, leaving some ambiguity for an agent choosing among related tools.

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

get_rootPublic Merkle rootA
Read-onlyIdempotent
Inspect

GET the permissionless public-root at https://councilof.ai/root.json. Returns merkle_root, card_count, as_of, and UNMEASURED notes. Separate from GSPC. Three states: VALID (fetched), UNREACHABLE (could not fetch), UNCHECKABLE (body unreadable). Never a certificate.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNo
as_ofNo
stateYesVALID, UNREACHABLE or UNCHECKABLE
sourceNo
not_gspcNo
card_countNo
merkle_rootNo

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description discloses operational states (VALID, UNREACHABLE, UNCHECKABLE), clarifies that it never returns a certificate, and notes the permissionless nature. This adds meaningful behavioral context about failure modes and output guarantees.

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 three sentences with no filler. The main action and URL are front-loaded, followed by return fields and states. Every sentence earns its place and the text is highly efficient.

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 zero-parameter GET tool with an output schema (as indicated), the description covers the endpoint, return fields, and state behavior. The term 'UNMEASURED notes' is cryptic and could be clarified, and usage guidance is minimal, but overall the tool is simple enough that this is sufficient.

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 zero parameters, so the description need not elaborate on parameter semantics. The baseline for no-parameter tools is 4, and the description correctly omits any irrelevant parameter detail.

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 fetches the permissionless public Merkle root from a specific URL, lists the exact return fields (merkle_root, card_count, as_of, UNMEASURED notes), and distinguishes it from GSPC and from being a certificate. The verb 'GET' plus resource and expected output make the purpose unambiguous.

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?

The description notes 'Separate from GSPC' which hints at a distinction, but it does not explicitly state when to use this tool over its siblings (e.g., get_axis, verify_inclusion). No alternative tools are named and no conditions for selection are given, leaving usage inference largely to the agent.

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

list_cardsList signed card index rowsA
Read-onlyIdempotent
Inspect

The published signed-card index (https://councilof.ai/signed/card_index.json): what the index declares (n_cards) and how many rows it actually carries, reported next to — never reconciled with — the count the card store endpoint (https://councilof.ai/api/cards) reports for itself. Two labelled numbers from two surfaces; if they disagree, this tool shows the disagreement rather than picking one. Optional filters return recent rows: axis, limit.

ParametersJSON Schema
NameRequiredDescriptionDefault
axisNoOnly list rows whose axis matches this name (case-insensitive).
limitNoHow many rows to include in the listing (newest first). Default 10. The two counts are always reported in full regardless of this limit.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
indexNo
doctrineNo
axis_queryNo
not_a_certificationNo
card_store_count_endpointNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior, so the description's added value is the countable behavioral nuance: it shows disagreement rather than picking one, and the counts are 'reported next to' each other rather than merged. It also discloses that filters only affect rows, not the two full counts, which is useful 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.

Conciseness4/5

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

The description is front-loaded with the resource URL and the core comparison behavior, and every sentence contributes meaning. The first sentence is somewhat dense with nested clauses, but that density is justified by the nuanced behavior it must convey.

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?

With an output schema present and full parameter schema coverage, the description needn't explain return values or parameter syntax. It adequately covers the tool's distinguishing behavior, the never-reconcile boundary, and the filter behavior, leaving no major gap for invocation decisions.

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%, so the input schema already documents both axis and limit. The description merely restates them as 'Optional filters return recent rows: axis, limit' and adds no new parameter-level detail beyond the schema.

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 names the resource ('published signed-card index'), the verb ('list'), and a highly specific behavior: reporting the declared n_cards, the actual row count, and the card-store endpoint count side by side without reconciling them. This is far more than a restatement of the title and clearly separates it from generic card-listing 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?

It gives a clear context for use by explaining that the tool intentionally reports two counts from two surfaces and 'never reconciles' them, so an agent knows it should not be used when a single reconciled answer is needed. However, it does not explicitly name sibling alternatives or say 'use X when Y', so it stops short of full routing guidance.

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

mcp_trustMCP handshake census snapshotA
Read-onlyIdempotent
Inspect

GET the latest MCP handshake trust snapshot (https://councilof.ai/interop/mcp-trust/latest.json): counts of how many internet-facing MCP servers answer a correct initialize handshake, how many respond with an auth challenge, and how many are unreachable. Counts only by doctrine — host details withheld by design. A partial round or a cap change is disclosed in the snapshot. Measurement, never certification. Three states: VALID (fetched), UNREACHABLE (could not fetch), UNCHECKABLE (body unreadable).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
diffNo
kindNo
as_ofNo
stateYesVALID or UNREACHABLE
countsNo
sourceNo
partialNotrue whenever the enumeration did not complete — a cap-limited read is partial
headlineNo
enumerationNo
partial_reasonNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark the tool read-only, open-world, idempotent, and non-destructive. The description adds substantial behavioral context beyond that: host details are withheld by design, partial rounds or cap changes are disclosed, it is measurement rather than certification, and the three possible states are defined. This is exactly the kind of transparency that helps an agent set expectations.

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 compact and front-loaded, leading with method, resource, and URL before moving to the counts. Every sentence earns its place: scope, privacy caveat, disclosure caveat, epistemic caveat, and state definitions are all conveyed without redundancy.

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 read-only tool with rich annotations and an output schema, the description covers all essential context: what is counted, how states are classified, what caveats exist, and what limits apply. Nothing needed to call it correctly or interpret its result 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?

The tool has zero parameters, so there is nothing for the description to explain beyond the baseline. Schema coverage is effectively 100% and the empty parameter object is self-explanatory.

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 names a specific verb ('GET'), a specific resource (the latest MCP handshake trust snapshot), and gives the exact URL. It then enumerates what the snapshot contains, so an agent knows unambiguously what this tool does and can tell it apart from related census-style siblings.

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?

The description makes the tool's context clear: use it when you need internet-facing MCP handshake trust counts by doctrineches. However, it never explicitly says when to use this tool versus alternatives like x402_trust, nor does it state any exclusions or fallback conditions.

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

measurement_indexMeasurement-capsule indexA
Read-onlyIdempotent
Inspect

Read the latest signed measurement-capsule index published at https://councilof.ai/measurement-capsules/latest.json: the index root over every capsule, each batch (adapter, kind, capsule count, measurement states, batch Merkle root, record sha256, record signature and OpenTimestamps state), the index's own board signature re-verified here against the pinned did:web:csoai.org#board-attestation-1 key, and the anchor states published beside it (OpenTimestamps, Rekor, XRPL) — PENDING is never called attested. States only: measurement, not endorsement; no verdict, score or ranking. NOT_PUBLISHED when no index is served; UNREACHABLE when the source could not be fetched.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
stateYes
reasonNo
anchorsNo
batchesNo
versionNo
doctrineNo
n_batchesNo
signatureNo
index_rootNo
n_capsules_totalNo

TDQS

A4.3/5.0
Behavior5/5

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

The description goes well beyond the readOnly/idempotent annotations by disclosing concrete behaviors: re-verifying the board signature against pinned did:web:csoai.org#board-attestation-1, never calling PENDING attested, and defining NOT_PUBLISHED and UNREACHABLE fallback states. This gives an agent accurate expectations for the operation's result semantics. No contradiction with the readOnlyHint=true annotation.

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

Conciseness3/5

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

The description is a single dense run-on sentence with a long colon-delimited enumeration, making it structurally unwieldy despite containing no wasted words. Front-loading the verb and resource is good, but the content would be more digestible as shorter sentences or bullet points.

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 presence of an output schema that presumably defines return fields, the description covers the source URL, the read scope, verification behavior, semantic limitations, and edge-case states. An agent has enough information to decide whether to call this tool and what to expect, with nothing substantial 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?

The tool has zero parameters and schema coverage is trivially 100%, so the baseline of 4 applies. The description adds context about the fixed source URL and the verification performed, which substitutes for parameter-level guidance since no parameters exist to document.

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: 'Read the latest signed measurement-capsule index published at https://councilof.ai/measurement-capsules/latest.json'. It enumerates the precise contents read (index root, batch fields, board signature re-verification, anchor states), which clearly distinguishes it from sibling verification tools that target individual capsules or cards.

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?

The description provides strong contextual scope, such as 'States only: measurement, not endorsement; no verdict, score or ranking' and the NOT_PUBLISHED/UNREACHABLE conditions, which help an agent infer when the tool is appropriate. However, it never names sibling tools or explicit when-to-use/when-not-to-use conditions like 'use verify_capsule instead for a single capsule'. Usage is implied by scope rather than stated directly.

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

receipts_batchReceipts batch (paid, x402; preview free)AInspect

PAID (x402 or CSOAI LTD invoice). A historical batch of the estate's measurement receipts via https://councilof.ai/api/receipts/batch: every signed card-v0 leaf whose as_of falls in [from,to] (≤200), each with its Merkle inclusion path and the public root(s) that carried it, plus the root index for the window and one signed manifest card citing the batch sha256. preview=true is free and returns count, span, root count and the sha256 of the exact bytes the paid call returns. Recent leaves are free at /root.json, /cards/ and /api/proof?sha= — the batch sells assembly across history, never a conclusion. No settlement-receipt stream exists (/api/receipts/latest is UNPUBLISHED) and this tool never claims one. Without x_payment the tool returns the 402 challenge.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoWindow end, ISO-8601. Defaults to now.
fromYesWindow start, ISO-8601. Required.
previewNotrue = free: count, span, roots and batch sha256 without the leaves.
x_paymentNoThe X-PAYMENT header value signed against accepts[] from the previous 402. Omit to receive the challenge.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolNo
routeNo
statusYesPAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>
acceptsNo
resourceNo
deliverableNo
http_statusNo
x402VersionNo
delivery_stateNo
settlement_stateNo
payment_presentedNo
not_a_certificationNo

TDQS

A4.8/5.0
Behavior5/5

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

Beyond annotations, the description reveals payment behavior, the 402 challenge, the preview mode, the exact sha256 preview, and the fact that the batch covers up to 200 leaves. It also discloses that the tool never claims a settlement-receipt stream, which is important context not available from annotations.

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 dense but information-rich, and it front-loads the payment requirement and historical nature. It is a single paragraph and includes a slightly metaphorical phrase, but every sentence contributes meaningful operational guidance.

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 tool's complexity—paid access, x402 flow, preview mode, output structure, and archival scope—the description covers all essential aspects. It explains preconditions, return contents, free alternatives, limitations, and explicitly warns against misinterpreting the batch as a settlement stream.

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 adds real meaning: from/to are window bounds against leaf as_of, preview=true returns count/span/root count/batch sha256, and x_payment is the signed header from the previous 402 challenge. This goes beyond the raw schema descriptions.

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 and resource: it returns a historical batch of estate measurement receipts for a given [from,to] window, with inclusion paths and root information. It distinguishes itself from siblings by explicitly saying recent leaves are free elsewhere and that the batch sells assembly across history, not a conclusion.

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 explicitly tells the agent when to use the paid batch versus free alternatives: preview=true is free and summarizes the call, while recent leaves are free via /root.json, /cards/, and /api/proof. It also states that without x_payment the tool returns the 402 challenge, and clarifies that no settlement-receipt stream exists.

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

rwa_evidenceRWA asset evidence (paid, x402; preview free)AInspect

PAID (x402). Per-request signed evidence card of ONE XRPL issued asset's deterministic on-ledger state via https://councilof.ai/api/rwa/evidence: AccountRoot lsf* flags, Domain, the two-way xrp-ledger.toml check (PASS / FAIL / UNCHECKABLE — unreachable is never FAIL), gateway_balances obligation, holders as the free reader has them, every raw fetch sha256'd. preview=true is free (unsigned state). Historical state at fetched_at — not a rating, not a guarantee, not a conformity mark; /api/xrpl and /root.json stay free. Without x_payment the tool returns the 402 challenge. If the route is not deployed on this origin the tool says NOT_DEPLOYED.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetYesSymbol (as listed by https://councilof.ai/api/xrpl) or issuer r-address.
previewNotrue = free unsigned state.
x_paymentNoThe X-PAYMENT header value signed against accepts[] from the previous 402. Omit to receive the challenge.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolNo
routeNo
statusYesPAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>
acceptsNo
resourceNo
deliverableNo
http_statusNo
x402VersionNo
delivery_stateNo
settlement_stateNo
payment_presentedNo
not_a_certificationNo

TDQS

A4.6/5.0
Behavior5/5

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

The description goes far beyond annotations, disclosing the x402 payment flow, the deterministic state contents, the 'unreachable is never FAIL' rule, the sha256 hashing of raw fetches, the historical fetched_at semantics, and the NOT_DEPLOYED behavior. This is rich behavioral context that annotations do not provide.

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 dense but front-loaded with the most important fact ('PAID (x402)') and each clause adds useful detail. It is somewhat long and run-on, but every sentence earns its place for a tool with a payment flow and multiple behavioral caveats.

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 x402 payment complexity, the output schema already exists, and the description covers payment, preview, failure modes, deployment status, and what the evidence is not, the definition is complete enough for an agent to invoke the tool correctly.

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 meaningful semantics beyond the schema by explaining that preview=true yields free unsigned state and that omitting x_payment returns the 402 challenge. This helps the agent understand the payment handshake.

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 'PAID (x402). Per-request signed evidence card of ONE XRPL issued asset's deterministic on-ledger state' and names the exact endpoint. It clearly identifies the resource and the operation, and the 'not a rating, not a guarantee, not a conformity mark' phrasing helps distinguish it from certification-style sibling 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 usage context: it is paid, preview=true is free, and omitting x_payment returns the 402 challenge. It does not explicitly name sibling alternatives or state when not to use it, so it stops short of full exclusion guidance.

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

server_evidenceEvery published capsule about one endpointA
Read-onlyIdempotent
Inspect

Trust per server, not totals: every published measurement capsule about ONE endpoint URL across all batches — MCP contract-parity dimensions (AUTH, PAYMENT, PROTOCOL, TOOLS, VERSION), A2A card-signature state, self-parity cells for CSOAI's own doors, and any later adapter (e.g. tool drift) — each with its measurement_state, observed_at, correction_pointer, limitations, batch Merkle root and an inclusion pointer (verify_capsule re-derives inclusion). Read from a static per-endpoint shard keyed by sha256 of the normalised URL. An endpoint with no capsule answers NOT_MEASURED with an empty list — never an error and never a clean bill. No verdict, score or ranking: measurement, not endorsement.

ParametersJSON Schema
NameRequiredDescriptionDefault
endpoint_urlYesThe endpoint URL, e.g. https://example.com/mcp or an agent-card URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
stateYes
reasonNo
capsulesNo
doctrineNo
endpointNo
n_capsulesNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description goes beyond these by specifying concrete behaviors: an unmeasured endpoint returns NOT_MEASURED with an empty list, never an error and never a clean bill; there is no verdict, score, or ranking; and the shard key is a sha256 of the normalized URL. This materially enriches the safety and expectation profile.

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 dense but logically organized: core purpose first, then capsule contents, retrieval mechanics, empty-result semantics, and a closing non-endorsement caveat. Every clause carries substantive value, though the length and technical density could be hard to parse at a glance for a simpler agent.

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?

With one simple parameter, a rich output schema, and annotations covering safety and world-openness, the description supplies all remaining decision-relevant context: empty-list vs NOT_MEASURED behavior, the inclusion verification pointer, and the per-batch origin of capsules. Nothing critical 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?

The schema documents endpoint_url with a clear example, and coverage is 100%. The description adds meaningful usage context—normalization via sha256 and single-endpoint scoping—which helps the agent understand how the parameter drives the lookup, even though the format is already well-specified.

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 reading operation: 'every published measurement capsule about ONE endpoint URL across all batches' and 'Read from a static per-endpoint shard'. It clearly differentiates this tool from aggregate-focused siblings like board_totals and from verification-only tools like verify_capsule, so an agent can tell what unique value this tool provides without opening schemas.

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 opening 'Trust per server, not totals' signals when to prefer this over aggregate views, and the mention of verify_capsule re-deriving inclusion points to the verification alternative. It does not explicitly list when-not-to-use or name an exclusion, but the context is clear enough for an agent to choose sensibly.

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

verify_capsuleVerify one measurement capsuleA
Read-onlyIdempotent
Inspect

Verify one measurement capsule. Pass capsule_json as the capsule's JSON TEXT (exact: number lexemes are kept) or as an object. Recomputes capsule_id (sha256 of the canonical JSON without capsule_id), picks the rule by the capsule's schema (csoai.measurement-capsule/0.2: RFC 6962 Merkle with 0x00/0x01 domain separation; the superseded v0.1 capsule schema: the v0.1 rule), finds the published batch of the same kind, recomputes that batch's root from its published leaves, and returns the audit path of this capsule against the root named by the signed index. States: INCLUDED, NOT_INCLUDED, ID_MISMATCH, UNCHECKABLE, NOT_PUBLISHED. Verifying is free forever. It proves the bytes were published and bound; what they measured is the capsule's own measurement_state and limitations — measurement, not endorsement.

ParametersJSON Schema
NameRequiredDescriptionDefault
capsule_jsonYesThe capsule: its JSON text (preferred, byte-exact) or the parsed object.

Output Schema

ParametersJSON Schema
NameRequiredDescription
batchNo
stateYes
reasonNo
doctrineNo
inclusionNo
capsule_idNo
index_signatureNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark this as read-only, idempotent, and non-destructive, and the description adds substantial detail beyond that: recomputing capsule_id, picking the schema rule, finding the published batch, recomputing the root, and returning an audit path. It also discloses all possible output states and the semantic limit that verification is proof of publication, not endorsement. No contradiction with annotations.

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 dense and information-rich rather than padded, front-loading the core action and input requirement. The caveat about measurement vs endorsement adds value; the enumerated output states are slightly redundant with the output schema but still useful in a single glance.

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 single-parameter, read-only tool with an output schema, the description is fully sufficient. It covers the input format, the verification algorithm, all result states, cost, and semantic limitations, leaving no critical operational knowledge 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?

The schema covers the single parameter 100%, providing a baseline of 3. The description adds meaningful nuance by explaining that JSON text is preferred for byte-exactness and that number lexemes are preserved, which helps the agent choose the correct input form.

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, 'Verify one measurement capsule', and then defines the exact domain and schema ('csoai.measurement-capsule/0.2'). This distinguishes it clearly from sibling tools like verify_card and verify_inclusion, and it does not merely restate the title.

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 input guidance: pass capsule_json as byte-exact JSON text or an object. It also explains what verification proves and what it does not prove. However, it does not explicitly contrast this tool with siblings such as verify_inclusion, so the when-to-use-vs-alternative guidance is implicit rather than explicit.

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

verify_cardVerify a signed measurement card (free)A
Read-onlyIdempotent
Inspect

Verify a signed gspc.measurement-card under the published rule (https://councilof.ai/signed/HOW-TO-VERIFY.md): recompute the id from the canonical body bytes, then check the Ed25519 signature under the PINNED key published at did:web:csoai.org#card-attestation-1. A card that carries its own key proves only that the file is self-consistent — anyone can alter a body and sign it with a key they just generated — so a signer other than the published key is reported INVALID. Three verdicts, never two: VALID, INVALID (with the reason), or UNCHECKABLE when the check could not be completed — 'could not check' is a different claim from 'forged'. Accepts the card as a JSON object, a JSON string, or a councilof.ai / csoai.org URL. Never a certification.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardYesThe signed card: an object, a JSON string, or a councilof.ai / csoai.org URL to one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
noteNo
ruleNo
stateYesVALID, INVALID or UNCHECKABLE
checksNo
familyNo
reasonNo
reasonsNo
pinned_keyNo
not_a_certificationNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, and the description adds substantial context beyond that: the exact verification algorithm, the security reasoning about self-signed keys, and the three-verdict semantics (VALID, INVALID, UNCHECKABLE). This goes beyond what annotations provide and fully discloses the tool's behavior.

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 slightly long but well-structured: it starts with the core action, then explains the verification process, the security nuance, and the verdict semantics. Each sentence earns its place, though it could be tightened by moving the URL reference to the end. It is not wasteful, and the critical information is front-loaded.

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 complexity of signature verification and the need to handle security pitfalls, the description covers all essential aspects: how the verification works, what makes a card INVALID, what UNCHECKABLE means, and acceptable input types. Since an output schema exists, return-value details are not required. An agent has sufficient information to call this tool correctly.

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 single parameter 'card' is fully described in the schema (100% coverage) as accepting an object, JSON string, or URL. The description adds the negative constraint 'Never a certification,' which clarifies what the tool does not accept, providing extra semantic value beyond the schema. This raises it above the baseline 3.

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 (verify), a specific resource (signed gspc.measurement-card), and a precise method (recompute id, check Ed25519 signature under pinned key). It distinguishes itself by explicitly stating it is not a certification and by defining three verdicts, which separates it from generic verification tools like verify_inclusion.

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 clearly explains when to use the tool (to verify a signed measurement card) and what it does not do ('Never a certification'). It also clarifies the nuance of UNCHECKABLE vs INVALID, which guides correct interpretation of results. However, it does not explicitly name alternative tools or specify when to choose this over verify_inclusion, though the focus on measurement cards is implicit.

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

verify_inclusionMerkle inclusion checkA
Read-onlyIdempotent
Inspect

Check a sha256 against the live public-root merkle via GET /api/proof?sha=. Three states only: VALID (included), INVALID (not a leaf), UNCHECKABLE (proof endpoint unreachable). Does not claim Ed25519 unless sig_ed25519 is present and checked separately. Never a grade.

ParametersJSON Schema
NameRequiredDescriptionDefault
sha256Yes64-char hex digest to test for inclusion.

Output Schema

ParametersJSON Schema
NameRequiredDescription
stateYesVALID, INVALID or UNCHECKABLE
reasonNo
sha256No
merkle_rootNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already provide readOnly, idempotent, and non-destructive hints, and the description adds substantial behavior beyond those: the exact HTTP GET mechanism, the three-state output contract (VALID, INVALID, UNCHECKABLE), the failure mode for an unreachable endpoint, and limitations around Ed25519. This is rich, non-redundant context.

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 carrying unique information: the action and endpoint, the allowed return states, and the explicit non-claims. The most important information is front-loaded, and there is 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?

With a single well-documented parameter, complete annotations, and an output schema, the description still covers the essential behavioral details an agent needs: the endpoint, the three possible outcomes, and the failure mode. Nothing required for correct invocation is missing.

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 already fully documents the only parameter as a '64-char hex digest', so schema-description coverage is 100%. The description does not add parameter-level meaning beyond the schema, so the baseline of 3 applies.

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 and resource: 'Check a sha256 against the live public-root merkle via GET /api/proof?sha='. It also distinguishes itself from sibling tools by explicitly excluding Ed25519 claims and grading, making its scope unmistakable.

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 exclusions: it does not claim Ed25519 and is never a grade, which tells an agent when not to use it. However, it does not name an alternative sibling tool or state a positive 'use this when...' condition, so it stops short of fully explicit routing.

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

x402_trustx402 catalog trust snapshotA
Read-onlyIdempotent
Inspect

GET the latest x402 catalog trust snapshot: counts of how many catalogued x402 resources open a correct 402 challenge vs how many are phantom on the wire. Counts only by doctrine — host details withheld; a 402 is NOT delivery; measurement, never certification.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNo
as_ofNo
stateYesVALID or UNREACHABLE
countsNo
sourceNo
headlineNo

TDQS

A4.5/5.0
Behavior5/5

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

The description adds meaningful behavioral context beyond the annotations: host details are withheld, counts are doctrine-only, and a 402 is explicitly not delivery. These caveats clarify both scope and limitations in a way the schema and annotations alone would not convey.

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 entire definition is a single dense sentence that front-loads the operation and resource, then packs essential caveats into semicolon-separated clauses. Every phrase earns its place; there is no redundant wording.

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 read-only snapshot with an output schema, the description is fully adequate. The annotations cover safety and idempotence, and the description covers semantic limitations. Nothing needed to call this tool 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?

The tool has zero parameters and 100% schema coverage, so the description has no parameter burden. The baseline of 4 applies; the description appropriately makes clear this is a no-input snapshot call.

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 a specific verb ('GET'), a specific resource ('x402 catalog trust snapshot'), and the exact data being returned (counts of correct 402 challenges vs phantom resources). It is distinct from sibling tools like mcp_trust by focusing on x402 catalog counts, not general trust or individual records.

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?

The description implies when to use this tool: when you need aggregate x402 catalog trust counts by doctrine. It also warns 'measurement, never certification,' suggesting it should not be used for certification decisions. However, it does not explicitly name alternatives or state exclusion conditions, leaving some inference required.

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. 16 tool updates
    • Changedart50_marking_evidence1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        +  "properties": {
        +    "accepts": {
        +      "type": "array"
        +    },
        +    "deliverable": {},
        +    "delivery_state": {
        +      "type": "string"
        +    },
        +    "http_status": {
        +      "type": "integer"
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "payment_presented": {
        +      "type": "boolean"
        +    },
        +    "resource": {
        +      "type": "object"
        +    },
        +    "route": {
        +      "type": "string"
        +    },
        +    "settlement_state": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        +      "type": "string"
        +    },
        +    "tool": {
        +      "type": "string"
        +    },
        +    "x402Version": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedboard_totals1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "as_of": {},
        +    "by_family": {},
        +    "count_grammar": {},
        +    "counts": {
        +      "items": {
        +        "properties": {
        +          "kind": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "public_count": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "LIVE or UNREACHABLE",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedcommission_card1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        +  "properties": {
        +    "accepts": {
        +      "type": "array"
        +    },
        +    "deliverable": {},
        +    "delivery_state": {
        +      "type": "string"
        +    },
        +    "http_status": {
        +      "type": "integer"
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "payment_presented": {
        +      "type": "boolean"
        +    },
        +    "resource": {
        +      "type": "object"
        +    },
        +    "route": {
        +      "type": "string"
        +    },
        +    "settlement_state": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        +      "type": "string"
        +    },
        +    "tool": {
        +      "type": "string"
        +    },
        +    "x402Version": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedget_axis1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "accuracy": {},
        +    "axis": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "board_carries": {
        +      "type": "array"
        +    },
        +    "dataset": {},
        +    "family": {},
        +    "interval": {},
        +    "leader": {},
        +    "measured": {
        +      "type": "boolean"
        +    },
        +    "n": {},
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "resolved_from": {
        +      "description": "present when the caller named an alias (e.g. gov) that resolved to this board axis",
        +      "type": "string"
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "LIVE, NOT_ON_BOARD, BAD_INPUT or UNREACHABLE",
        +      "type": "string"
        +    },
        +    "status": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedget_card1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "not_gspc": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "sha256": {
        +      "type": "string"
        +    },
        +    "sig_ed25519": {},
        +    "source": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "VALID, INVALID or UNCHECKABLE",
        +      "type": "string"
        +    },
        +    "surface": {},
        +    "unmeasured": {}
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedget_root1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "as_of": {},
        +    "card_count": {},
        +    "kind": {},
        +    "merkle_root": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "not_gspc": {
        +      "type": "boolean"
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "VALID, UNREACHABLE or UNCHECKABLE",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_cards1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "axis_query": {
        +      "properties": {
        +        "asked": {
        +          "type": "string"
        +        },
        +        "canonical": {
        +          "type": "string"
        +        },
        +        "index_names_matched": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "spellings": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "card_store_count_endpoint": {
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "doctrine": {
        +      "type": "string"
        +    },
        +    "index": {
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "rows": {
        +      "items": {
        +        "properties": {
        +          "axis": {
        +            "type": "string"
        +          },
        +          "card": {
        +            "type": "string"
        +          },
        +          "signed": {},
        +          "ts": {}
        +        },
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedmcp_trust11 fields changed
      • changedOutput schema / properties / as_of / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / counts / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • addedOutput schema / properties / diff
        Added value: +{}
      • changedOutput schema / properties / enumeration / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • addedOutput schema / properties / headline
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / kind
        Added value: +{}
      • addedOutput schema / properties / partial / description
        Added value: +"true whenever the enumeration did not complete — a cap-limited read is partial"
      • addedOutput schema / properties / partial_reason
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / source
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / state
        Added value: +{
        +  "description": "VALID or UNREACHABLE",
        +  "type": "string"
        +}
      • addedOutput schema / required
        Added value: +[
        +  "state"
        +]
    • Addedmeasurement_index
    • Changedreceipts_batch1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        +  "properties": {
        +    "accepts": {
        +      "type": "array"
        +    },
        +    "deliverable": {},
        +    "delivery_state": {
        +      "type": "string"
        +    },
        +    "http_status": {
        +      "type": "integer"
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "payment_presented": {
        +      "type": "boolean"
        +    },
        +    "resource": {
        +      "type": "object"
        +    },
        +    "route": {
        +      "type": "string"
        +    },
        +    "settlement_state": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        +      "type": "string"
        +    },
        +    "tool": {
        +      "type": "string"
        +    },
        +    "x402Version": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedrwa_evidence1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        +  "properties": {
        +    "accepts": {
        +      "type": "array"
        +    },
        +    "deliverable": {},
        +    "delivery_state": {
        +      "type": "string"
        +    },
        +    "http_status": {
        +      "type": "integer"
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "payment_presented": {
        +      "type": "boolean"
        +    },
        +    "resource": {
        +      "type": "object"
        +    },
        +    "route": {
        +      "type": "string"
        +    },
        +    "settlement_state": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        +      "type": "string"
        +    },
        +    "tool": {
        +      "type": "string"
        +    },
        +    "x402Version": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Addedserver_evidence
    • Addedverify_capsule
    • Changedverify_card1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "checks": {
        +      "items": {
        +        "properties": {
        +          "advisory": {
        +            "description": "true = reported but never decides the verdict (the live did.json cross-check)",
        +            "type": "boolean"
        +          },
        +          "check": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "detail": {
        +            "type": "string"
        +          },
        +          "ok": {
        +            "description": "true = passed, false = failed, null = not applicable or not run (detail says UNCHECKED)",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "family": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "id": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "note": {
        +      "type": "string"
        +    },
        +    "pinned_key": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "reason": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "rule": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "VALID, INVALID or UNCHECKABLE",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedverify_inclusion1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "merkle_root": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "reason": {},
        +    "sha256": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "VALID, INVALID or UNCHECKABLE",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedx402_trust7 fields changed
      • changedOutput schema / properties / as_of / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / counts / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / headline / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / kind
        Added value: +{}
      • addedOutput schema / properties / source
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / state
        Added value: +{
        +  "description": "VALID or UNREACHABLE",
        +  "type": "string"
        +}
      • addedOutput schema / required
        Added value: +[
        +  "state"
        +]
  2. 13 tool updates
    • Changedart50_marking_evidence1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        -  "properties": {
        -    "accepts": {
        -      "type": "array"
        -    },
        -    "deliverable": {},
        -    "delivery_state": {
        -      "type": "string"
        -    },
        -    "http_status": {
        -      "type": "integer"
        -    },
        -    "not_a_certification": {
        -      "type": "boolean"
        -    },
        -    "payment_presented": {
        -      "type": "boolean"
        -    },
        -    "resource": {
        -      "type": "object"
        -    },
        -    "route": {
        -      "type": "string"
        -    },
        -    "settlement_state": {
        -      "type": "string"
        -    },
        -    "status": {
        -      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        -      "type": "string"
        -    },
        -    "tool": {
        -      "type": "string"
        -    },
        -    "x402Version": {
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "status"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedboard_totals1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "as_of": {},
        -    "by_family": {},
        -    "count_grammar": {},
        -    "counts": {
        -      "items": {
        -        "properties": {
        -          "kind": {
        -            "type": "string"
        -          },
        -          "name": {
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "not_a_certification": {
        -      "type": "boolean"
        -    },
        -    "public_count": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "source": {
        -      "type": "string"
        -    },
        -    "state": {
        -      "description": "LIVE or UNREACHABLE",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "state"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedcommission_card1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        -  "properties": {
        -    "accepts": {
        -      "type": "array"
        -    },
        -    "deliverable": {},
        -    "delivery_state": {
        -      "type": "string"
        -    },
        -    "http_status": {
        -      "type": "integer"
        -    },
        -    "not_a_certification": {
        -      "type": "boolean"
        -    },
        -    "payment_presented": {
        -      "type": "boolean"
        -    },
        -    "resource": {
        -      "type": "object"
        -    },
        -    "route": {
        -      "type": "string"
        -    },
        -    "settlement_state": {
        -      "type": "string"
        -    },
        -    "status": {
        -      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        -      "type": "string"
        -    },
        -    "tool": {
        -      "type": "string"
        -    },
        -    "x402Version": {
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "status"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_axis1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "accuracy": {},
        -    "axis": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "board_carries": {
        -      "type": "array"
        -    },
        -    "dataset": {},
        -    "family": {},
        -    "interval": {},
        -    "leader": {},
        -    "measured": {
        -      "type": "boolean"
        -    },
        -    "n": {},
        -    "not_a_certification": {
        -      "type": "boolean"
        -    },
        -    "resolved_from": {
        -      "description": "present when the caller named an alias (e.g. gov) that resolved to this board axis",
        -      "type": "string"
        -    },
        -    "source": {
        -      "type": "string"
        -    },
        -    "state": {
        -      "description": "LIVE, NOT_ON_BOARD, BAD_INPUT or UNREACHABLE",
        -      "type": "string"
        -    },
        -    "status": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "state"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_card1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "not_gspc": {
        -      "type": "boolean"
        -    },
        -    "reason": {
        -      "type": "string"
        -    },
        -    "sha256": {
        -      "type": "string"
        -    },
        -    "sig_ed25519": {},
        -    "source": {
        -      "type": "string"
        -    },
        -    "state": {
        -      "description": "VALID, INVALID or UNCHECKABLE",
        -      "type": "string"
        -    },
        -    "surface": {},
        -    "unmeasured": {}
        -  },
        -  "required": [
        -    "state"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_root1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "as_of": {},
        -    "card_count": {},
        -    "kind": {},
        -    "merkle_root": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "not_gspc": {
        -      "type": "boolean"
        -    },
        -    "source": {
        -      "type": "string"
        -    },
        -    "state": {
        -      "description": "VALID, UNREACHABLE or UNCHECKABLE",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "state"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedlist_cards1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "axis_query": {
        -      "properties": {
        -        "asked": {
        -          "type": "string"
        -        },
        -        "canonical": {
        -          "type": "string"
        -        },
        -        "index_names_matched": {
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": "array"
        -        },
        -        "spellings": {
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": "array"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "card_store_count_endpoint": {
        -      "type": [
        -        "object",
        -        "null"
        -      ]
        -    },
        -    "doctrine": {
        -      "type": "string"
        -    },
        -    "index": {
        -      "type": [
        -        "object",
        -        "null"
        -      ]
        -    },
        -    "not_a_certification": {
        -      "type": "boolean"
        -    },
        -    "rows": {
        -      "items": {
        -        "properties": {
        -          "axis": {
        -            "type": "string"
        -          },
        -          "card": {
        -            "type": "string"
        -          },
        -          "signed": {},
        -          "ts": {}
        -        },
        -        "type": "object"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedmcp_trust11 fields changed
      • changedOutput schema / properties / as_of / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / counts / type
        Previous value: -[
        -  "object",
        -  "null"
        -]New value: +"object"
      • removedOutput schema / properties / diff
        Removed value: -{}
      • changedOutput schema / properties / enumeration / type
        Previous value: -[
        -  "object",
        -  "null"
        -]New value: +"object"
      • removedOutput schema / properties / headline
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / kind
        Removed value: -{}
      • removedOutput schema / properties / partial / description
        Removed value: -"true whenever the enumeration did not complete — a cap-limited read is partial"
      • removedOutput schema / properties / partial_reason
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / source
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / state
        Removed value: -{
        -  "description": "VALID or UNREACHABLE",
        -  "type": "string"
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "state"
        -]
    • Changedreceipts_batch1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        -  "properties": {
        -    "accepts": {
        -      "type": "array"
        -    },
        -    "deliverable": {},
        -    "delivery_state": {
        -      "type": "string"
        -    },
        -    "http_status": {
        -      "type": "integer"
        -    },
        -    "not_a_certification": {
        -      "type": "boolean"
        -    },
        -    "payment_presented": {
        -      "type": "boolean"
        -    },
        -    "resource": {
        -      "type": "object"
        -    },
        -    "route": {
        -      "type": "string"
        -    },
        -    "settlement_state": {
        -      "type": "string"
        -    },
        -    "status": {
        -      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        -      "type": "string"
        -    },
        -    "tool": {
        -      "type": "string"
        -    },
        -    "x402Version": {
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "status"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedrwa_evidence1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        -  "properties": {
        -    "accepts": {
        -      "type": "array"
        -    },
        -    "deliverable": {},
        -    "delivery_state": {
        -      "type": "string"
        -    },
        -    "http_status": {
        -      "type": "integer"
        -    },
        -    "not_a_certification": {
        -      "type": "boolean"
        -    },
        -    "payment_presented": {
        -      "type": "boolean"
        -    },
        -    "resource": {
        -      "type": "object"
        -    },
        -    "route": {
        -      "type": "string"
        -    },
        -    "settlement_state": {
        -      "type": "string"
        -    },
        -    "status": {
        -      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        -      "type": "string"
        -    },
        -    "tool": {
        -      "type": "string"
        -    },
        -    "x402Version": {
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "status"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedverify_card1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "checks": {
        -      "items": {
        -        "properties": {
        -          "advisory": {
        -            "description": "true = reported but never decides the verdict (the live did.json cross-check)",
        -            "type": "boolean"
        -          },
        -          "check": {
        -            "type": "string"
        -          },
        -          "code": {
        -            "type": "string"
        -          },
        -          "detail": {
        -            "type": "string"
        -          },
        -          "ok": {
        -            "description": "true = passed, false = failed, null = not applicable or not run (detail says UNCHECKED)",
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "family": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "id": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "not_a_certification": {
        -      "type": "boolean"
        -    },
        -    "note": {
        -      "type": "string"
        -    },
        -    "pinned_key": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "reason": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "reasons": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "rule": {
        -      "type": "string"
        -    },
        -    "state": {
        -      "description": "VALID, INVALID or UNCHECKABLE",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "state"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedverify_inclusion1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "merkle_root": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "reason": {},
        -    "sha256": {
        -      "type": "string"
        -    },
        -    "state": {
        -      "description": "VALID, INVALID or UNCHECKABLE",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "state"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedx402_trust7 fields changed
      • changedOutput schema / properties / as_of / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / counts / type
        Previous value: -[
        -  "object",
        -  "null"
        -]New value: +"object"
      • changedOutput schema / properties / headline / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • removedOutput schema / properties / kind
        Removed value: -{}
      • removedOutput schema / properties / source
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / state
        Removed value: -{
        -  "description": "VALID or UNREACHABLE",
        -  "type": "string"
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "state"
        -]
  3. 13 tool updates
    • Changedart50_marking_evidence1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        +  "properties": {
        +    "accepts": {
        +      "type": "array"
        +    },
        +    "deliverable": {},
        +    "delivery_state": {
        +      "type": "string"
        +    },
        +    "http_status": {
        +      "type": "integer"
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "payment_presented": {
        +      "type": "boolean"
        +    },
        +    "resource": {
        +      "type": "object"
        +    },
        +    "route": {
        +      "type": "string"
        +    },
        +    "settlement_state": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        +      "type": "string"
        +    },
        +    "tool": {
        +      "type": "string"
        +    },
        +    "x402Version": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedboard_totals1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "as_of": {},
        +    "by_family": {},
        +    "count_grammar": {},
        +    "counts": {
        +      "items": {
        +        "properties": {
        +          "kind": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "public_count": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "LIVE or UNREACHABLE",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedcommission_card1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        +  "properties": {
        +    "accepts": {
        +      "type": "array"
        +    },
        +    "deliverable": {},
        +    "delivery_state": {
        +      "type": "string"
        +    },
        +    "http_status": {
        +      "type": "integer"
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "payment_presented": {
        +      "type": "boolean"
        +    },
        +    "resource": {
        +      "type": "object"
        +    },
        +    "route": {
        +      "type": "string"
        +    },
        +    "settlement_state": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        +      "type": "string"
        +    },
        +    "tool": {
        +      "type": "string"
        +    },
        +    "x402Version": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedget_axis1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "accuracy": {},
        +    "axis": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "board_carries": {
        +      "type": "array"
        +    },
        +    "dataset": {},
        +    "family": {},
        +    "interval": {},
        +    "leader": {},
        +    "measured": {
        +      "type": "boolean"
        +    },
        +    "n": {},
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "resolved_from": {
        +      "description": "present when the caller named an alias (e.g. gov) that resolved to this board axis",
        +      "type": "string"
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "LIVE, NOT_ON_BOARD, BAD_INPUT or UNREACHABLE",
        +      "type": "string"
        +    },
        +    "status": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedget_card1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "not_gspc": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "sha256": {
        +      "type": "string"
        +    },
        +    "sig_ed25519": {},
        +    "source": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "VALID, INVALID or UNCHECKABLE",
        +      "type": "string"
        +    },
        +    "surface": {},
        +    "unmeasured": {}
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedget_root1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "as_of": {},
        +    "card_count": {},
        +    "kind": {},
        +    "merkle_root": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "not_gspc": {
        +      "type": "boolean"
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "VALID, UNREACHABLE or UNCHECKABLE",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_cards1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "axis_query": {
        +      "properties": {
        +        "asked": {
        +          "type": "string"
        +        },
        +        "canonical": {
        +          "type": "string"
        +        },
        +        "index_names_matched": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "spellings": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "card_store_count_endpoint": {
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "doctrine": {
        +      "type": "string"
        +    },
        +    "index": {
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "rows": {
        +      "items": {
        +        "properties": {
        +          "axis": {
        +            "type": "string"
        +          },
        +          "card": {
        +            "type": "string"
        +          },
        +          "signed": {},
        +          "ts": {}
        +        },
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedmcp_trust11 fields changed
      • changedOutput schema / properties / as_of / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / counts / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • addedOutput schema / properties / diff
        Added value: +{}
      • changedOutput schema / properties / enumeration / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • addedOutput schema / properties / headline
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / kind
        Added value: +{}
      • addedOutput schema / properties / partial / description
        Added value: +"true whenever the enumeration did not complete — a cap-limited read is partial"
      • addedOutput schema / properties / partial_reason
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / source
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / state
        Added value: +{
        +  "description": "VALID or UNREACHABLE",
        +  "type": "string"
        +}
      • addedOutput schema / required
        Added value: +[
        +  "state"
        +]
    • Changedreceipts_batch1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        +  "properties": {
        +    "accepts": {
        +      "type": "array"
        +    },
        +    "deliverable": {},
        +    "delivery_state": {
        +      "type": "string"
        +    },
        +    "http_status": {
        +      "type": "integer"
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "payment_presented": {
        +      "type": "boolean"
        +    },
        +    "resource": {
        +      "type": "object"
        +    },
        +    "route": {
        +      "type": "string"
        +    },
        +    "settlement_state": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        +      "type": "string"
        +    },
        +    "tool": {
        +      "type": "string"
        +    },
        +    "x402Version": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedrwa_evidence1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The wrapper's status fields. On PAYMENT_REQUIRED (isError:true) the route's x402 PaymentRequired object (x402Version, resource, accepts, extensions) is spread at the top level too, per the x402 MCP transport.",
        +  "properties": {
        +    "accepts": {
        +      "type": "array"
        +    },
        +    "deliverable": {},
        +    "delivery_state": {
        +      "type": "string"
        +    },
        +    "http_status": {
        +      "type": "integer"
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "payment_presented": {
        +      "type": "boolean"
        +    },
        +    "resource": {
        +      "type": "object"
        +    },
        +    "route": {
        +      "type": "string"
        +    },
        +    "settlement_state": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code>",
        +      "type": "string"
        +    },
        +    "tool": {
        +      "type": "string"
        +    },
        +    "x402Version": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedverify_card1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "checks": {
        +      "items": {
        +        "properties": {
        +          "advisory": {
        +            "description": "true = reported but never decides the verdict (the live did.json cross-check)",
        +            "type": "boolean"
        +          },
        +          "check": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "detail": {
        +            "type": "string"
        +          },
        +          "ok": {
        +            "description": "true = passed, false = failed, null = not applicable or not run (detail says UNCHECKED)",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "family": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "id": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "not_a_certification": {
        +      "type": "boolean"
        +    },
        +    "note": {
        +      "type": "string"
        +    },
        +    "pinned_key": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "reason": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "rule": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "VALID, INVALID or UNCHECKABLE",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedverify_inclusion1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "merkle_root": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "reason": {},
        +    "sha256": {
        +      "type": "string"
        +    },
        +    "state": {
        +      "description": "VALID, INVALID or UNCHECKABLE",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedx402_trust7 fields changed
      • changedOutput schema / properties / as_of / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / counts / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / headline / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / kind
        Added value: +{}
      • addedOutput schema / properties / source
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / state
        Added value: +{
        +  "description": "VALID or UNREACHABLE",
        +  "type": "string"
        +}
      • addedOutput schema / required
        Added value: +[
        +  "state"
        +]
  4. 13 tool updates
    • First observedart50_marking_evidence
    • First observedboard_totals
    • First observedcommission_card
    • First observedget_axis
    • First observedget_card
    • First observedget_root
    • First observedlist_cards
    • First observedmcp_trust
    • First observedreceipts_batch
    • First observedrwa_evidence
    • First observedverify_card
    • First observedverify_inclusion
    • First observedx402_trust

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Read-only ProofRelay MCP verifier for non-confidential evidence bundles. Exposes 22 public-safe tools, 11 resources, and 11 prompts for bundle integrity checks, receipt-chain review, checkpoint recommendations, MCP risk metadata review, and real-estate closing proof-pack readiness.
    5
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A governed MCP server exposing 37 risk-checked tools with signed Ed25519 receipts on a Bitcoin-anchored ledger, failing closed if governance or receipt writing fails.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Reference implementation of HiveAttest claims for autonomous agents, exposing 19 tools for attestation, custody, cargo, warranty, and gate evaluation with real Ed25519 signatures.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources