Council of AI GSPC
Server Details
Independent AI-governance measurement MCP. Free reads + x402 evidence. Measurement not cert.
- Status
- Healthy
- Uptime
- 99.4% over 43 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- CSOAI-ORG/councilof-ai
- GitHub Stars
- 3
- Server Listing
- Council of AI GSPC
TDQS
Scored across 19 tools
Most tools target clearly distinct artifacts (board, cards, capsules, roots, receipts, routing), and the descriptions carefully spell out boundaries (e.g. evidence_bundle vs evidence_bundle_preview, get_root vs measurement_index, get_card vs verify_card). The remaining soft spots are mcp_trust vs server_evidence (aggregate MCP handshake counts vs per-endpoint capsules) and the cluster of trust-snapshot tools (mcp_trust/x402_trust), which could be confused at a glance.
All names are snake_case, with an identifiable verb family for the action tools (get_axis, get_card, get_root, list_cards, verify_card, verify_capsule, verify_inclusion). The rest are noun-phrase artifact names (board_totals, measurement_index, commission_card) and one bare verb ('route'), which is a minor deviation but still readable and predictable.
19 tools is on the heavy side but the surface spans several genuinely distinct subsystems (board, signed cards, measurement capsules, trust snapshots, x402-paid evidence packs, routing), so most tools earn their place. A few could arguably be consolidated, keeping it just below the top score.
Coverage is strong: reads for board/axis/root/card/index/capsule, verification for cards, capsules and Merkle inclusion, free previews alongside every paid evidence tool, and a routing tool. Minor gaps exist (no search/listing across capsules by criterion, no batch axis enumeration beyond get_axis), but no obvious dead ends for the measurement domain.
Available Tools
19 toolsart50_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: which machine-readable marks the named methods DETECT in these bytes right now. Scope: C2PA and IPTC metadata only (C2PA manifest store, assertion hashes, hard binding, claim signature; IPTC digitalSourceType); no watermark, fingerprint or other kind of mark is read. NOT_DETECTED is not unmarked: Article 50(2) is technology-neutral, so a mark this pack cannot read may be present, and metadata is often stripped on re-save. Disclosure: CSOAI is a member of the C2PA, whose specification is one of the two methods read. The pack carries the verbatim Art 50(2) text hash and the dates it turns on. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public HTTP(S) URL of the generative output to measure (≤20 MiB). The server fetches only this declared measurement subject. | |
| preview | No | true = free unsigned measurement (no card sha, no signature). | |
| bytes_b64 | No | Alternatively the output bytes, base64 (≤20 MiB decoded). | |
| x_payment | No | The X-PAYMENT header value signed against accepts[] from the previous 402. Omit to receive the challenge. | |
| manifest_b64 | No | Alternatively a detached C2PA manifest store, base64 (manifest-only mode). |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | |
| route | No | |
| status | Yes | PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code> |
| accepts | No | |
| resource | No | |
| deliverable | No | |
| http_status | No | |
| x402Version | No | |
| delivery_state | No | |
| settlement_state | No | |
| payment_presented | No | |
| not_a_certification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations present (readOnlyHint=false, openWorldHint=true), the description goes well beyond them: it discloses the paid x402 flow, the 402 challenge behavior, the point-in-time/caveat semantics (NOT_DETECTED != unmarked, metadata often stripped), the C2PA membership disclosure, and the explicit refusal to render conformity/compliance opinions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded, leading with PAID and the core detection claim before scope, caveats and payment mechanics. Most sentences carry distinct weight, though the run-on structure and repetition of the payment/preview point cost it a top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explained. The description covers the remaining burden for a paid, network-fetching, point-in-time measurement tool: scope limits, failure modes, payment handshake and evidentiary caveats are all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with zero required parameters, so the schema already documents url, preview, bytes_b64, x_payment and manifest_b64. The description reinforces the payment semantics (x_payment omission yields the challenge; preview is free/unsigned) but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (measure/detect) and resource (Article 50 marking-evidence pack) and immediately bounds the scope: 'which machine-readable marks the named methods DETECT in these bytes right now. Scope: C2PA and IPTC metadata only.' It explicitly excludes watermark/fingerprint marks, so an agent can tell it apart from other evidence tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating conditions: preview=true is free and unsigned, omitting x_payment returns the 402 challenge, and an undeployed route returns NOT_DEPLOYED. It does not, however, explicitly route the agent among siblings such as evidence_bundle, rwa_evidence, or server_evidence.
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 totalsARead-onlyIdempotentInspect
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 the board's separation line, and as_of dates for the board and for this fetch. Compact by default; pass detail "full" for the long-form count grammar, the per-family counts and the board's full measured_on block. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | summary (default): counts, public_count, the separation line, dates and source. full: also count_grammar, by_family and the board's measured_on block. | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | No | |
| state | Yes | LIVE or UNREACHABLE |
| counts | No | |
| detail | No | summary or full |
| source | No | |
| by_family | No | |
| separation | No | |
| public_count | No | |
| count_grammar | No | |
| not_a_certification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld), so the bar is lower, and the description adds genuinely new behavioral context: slots and measurements are never summed or swapped, and an unfetchable board yields a distinct UNREACHABLE state with no cached number ever shown as live. That failure-mode disclosure is the kind of detail annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads purpose and source well, but the body is a long chain of em-dash-appended clauses that mixes return-value definition, parameter selection, and a mission statement ('We measure, never certify'), which borders on redundant given the output schema exists. It is readable but heavier than the single-parameter, output-schema-backed tool needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be spelled out, yet the description covers the semantic pitfalls (slot vs. measurement, never summed) and the error state, which are the pieces structured fields cannot carry. Only the routing among sibling evidence tools is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single enum parameter is fully documented in the schema, so baseline 3 applies. The description's detail="full" clause largely restates the schema ('count_grammar, per-family counts, measured_on block') rather than adding format or cost semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (live GSPC board totals) with a concrete verb-equivalent (fetch/return) and enumerates exactly what comes back: slot count, measured count, separation line, and as_of dates. It does not, however, differentiate itself from the many sibling evidence/trust tools (measurement_index, get_axis, get_card), leaving the agent to infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the tool is the way to read board totals, and the description tells the agent to pass detail="full" for the long-form grammar and per-family counts, which is a useful selection cue. But there is no explicit when-to-use vs. siblings or when-not to use it, so guidance stays at the implied level.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | No | Optional axis slug; omit for the subject-level commission. | |
| subject | Yes | Subject to commission: a model id, instrument id or card sha (1-120 chars of [A-Za-z0-9._:/@+-]). | |
| x_payment | No | The X-PAYMENT header value (base64 x402 payload) signed by your wallet against accepts[] from the previous 402. Omit to receive the challenge. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | |
| route | No | |
| status | Yes | PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code> |
| accepts | No | |
| resource | No | |
| deliverable | No | |
| http_status | No | |
| x402Version | No | |
| delivery_state | No | |
| settlement_state | No | |
| payment_presented | No | |
| not_a_certification | No |
TDQS
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.
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.
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.
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.
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.
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.
evidence_bundleEvidence bundle for one obligation (paid, x402; preview free)Inspect
PAID (x402). For ONE obligation (article-50, article-53 GPAI transparency, dora or cra) and an optional subject via https://councilof.ai/api/evidence-bundle: selected existing card objects with signature fields and any retained inclusion proofs, an OSCAL assessment-results wrapper and an assembly manifest. Assembly does not verify input-card signatures. A returned unsigned manifest reports its signing status and unsigned reason. If signing throws after settlement, the route returns PAID_NOT_DELIVERED without a delivered bundle or manifest; preserve the settlement receipt and reconcile before reissue, without automatically retrying or paying again. Zero selected cards stays an empty bundle; preview=true here, or the free evidence_bundle_preview tool, shows the count first. No new measurement, full OSCAL conformance or conformity determination is established. Article 53 output is evidence for review, not a legal determination; grants no status. Without x_payment the tool returns the actual 402 challenge; read its terms for each request. Supported-card verification is free at https://councilof.ai/gspc-verify. Measurement, not certification.
| Name | Required | Description | Default |
|---|---|---|---|
| preview | No | true = the free preview (relevant-card count and first cards); nothing is charged. | |
| subject | No | Optional: a model id, vendor or instrument the cards must name. | |
| x_payment | No | The X-PAYMENT header value signed against accepts[] from the previous 402. Omit to receive the challenge. | |
| obligation | Yes | article-50, article-53, dora or cra. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | |
| route | No | |
| status | Yes | PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code> |
| accepts | No | |
| resource | No | |
| deliverable | No | |
| http_status | No | |
| x402Version | No | |
| delivery_state | No | |
| settlement_state | No | |
| payment_presented | No | |
| not_a_certification | No |
evidence_bundle_previewSigned cards relevant to one obligation (free)ARead-onlyIdempotentInspect
For ONE obligation (article-50, article-53 GPAI transparency, dora or cra) and an optional subject: the obligation record, its counsel-gate status and the already-signed measurement cards that are relevant to it (count plus the first cards, each with its verify link), read live from https://councilof.ai/api/evidence-bundle. Relevant-to is never a determination: no answer says satisfied or not satisfied, and zero relevant cards is answered EMPTY, never as an error and never as a clean bill. Article 53 output is evidence for review, not a legal determination. Evidence for obligation work — not a conformity assessment, certification, audit opinion or compliance determination; grants no status. Measurement, not certification. Verification of any card is free at https://councilof.ai/gspc-verify.
| Name | Required | Description | Default |
|---|---|---|---|
| subject | No | Optional: a model id, vendor or instrument the cards must name. Omit for the obligation-wide selection. | |
| obligation | Yes | article-50 (AI-generated content marking), article-53 (GPAI provider documentation), dora (ICT third-party oversight) or cra (Cyber Resilience Act). |
Output Schema
| Name | Required | Description |
|---|---|---|
| cards | No | |
| state | Yes | |
| corpus | No | |
| reason | No | |
| source | No | |
| subject | No | |
| relation | No | |
| obligation | No | |
| review_note | No | |
| determination | No | |
| counsel_confirmed | No | |
| not_a_certification | No | |
| relevant_signed_cards | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, and the description still adds real behavioral context: the source is fetched live, results are never a satisfied/not-satisfied determination, zero relevant cards returns EMPTY rather than an error, and article-53 output is evidence for review only. These edge-case and non-determinism semantics are exactly what annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is dense and front-loads the resource and scope, and each disclaimer (EMPTY semantics, no determination, grants no status) carries load. The third and fourth sentences overlap somewhat in re-stating the non-certification boundary, which is minor redundancy rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be described, yet the description still covers the two cases an agent must handle correctly — zero relevant cards (EMPTY, not an error) and the non-determinative nature of relevance. Combined with the documented enum and subject semantics, nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the enum values for obligation are fully documented in the schema, so the baseline is 3. The description restates the subject concept ('a model id, vendor or instrument the cards must name') and confirms the obligation-wide selection when omitted, but adds little beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource and scope: the obligation record, its counsel-gate status, and the already-signed measurement cards relevant to exactly ONE obligation, read live from a named endpoint. It also constrains the selection to one of four obligations, which separates it from card-level siblings like get_card or list_cards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use (obligation-level evidence for a single obligation, optionally narrowed by subject) and explicitly rules out use as a conformity assessment, certification, audit opinion or compliance determination. It does not, however, name a sibling tool or state when to prefer this over measurement_index or list_cards, so routing guidance is partial.
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 axisARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | Yes | The 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
| Name | Required | Description |
|---|---|---|
| n | No | |
| axis | No | |
| state | Yes | LIVE, NOT_ON_BOARD, BAD_INPUT or UNREACHABLE |
| family | No | |
| leader | No | |
| source | No | |
| status | No | |
| dataset | No | |
| accuracy | No | |
| interval | No | |
| measured | No | |
| board_carries | No | |
| resolved_from | No | present when the caller named an alias (e.g. gov) that resolved to this board axis |
| not_a_certification | No |
TDQS
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.
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.
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.
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.
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.
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 leafARead-onlyIdempotentInspect
GET one public-root card-v0 leaf by sha256 (64 hex) from https://councilof.ai/cards/{sha16}.json. UNMEASURED cells stay visible. States: VALID (fetched); NOT_IN_THIS_CORPUS (the id is in the signed card index, not the public root, so use verify_card on it); INVALID (in neither the live root nor the signed card index); UNCHECKABLE (a source could not be read). Not a GSPC measurement-card.
| Name | Required | Description | Default |
|---|---|---|---|
| sha256 | Yes | 64-char hex payload SHA-256 of the card-v0 leaf. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | With NOT_IN_THIS_CORPUS: the tool call that checks this id. |
| state | Yes | VALID, NOT_IN_THIS_CORPUS, INVALID or UNCHECKABLE |
| corpus | No | With NOT_IN_THIS_CORPUS: the set the id belongs to (signed_card_index). |
| reason | No | |
| sha256 | No | |
| source | No | |
| surface | No | |
| card_url | No | With NOT_IN_THIS_CORPUS: the signed card body to pass to verify_card. |
| not_gspc | No | |
| unmeasured | No | |
| sig_ed25519 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds genuinely new behavioral context: the four outcome states (VALID, NOT_IN_THIS_CORPUS, INVALID, UNCHECKABLE) and that UNMEASURED cells remain visible. This goes well beyond the annotations, though the states partly overlap with the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and key format, followed by state semantics and the sibling routing. Dense and telegraphic but nearly every clause earns its place; the state enumeration is the only portion that could be considered verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 re-explained, and the single parameter is fully covered by the schema. The description still supplies state meanings, an alternative-tool route, and a scope exclusion, leaving nothing an agent needs in order to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the param already documents the 64-char hex requirement, so the baseline is 3. The description adds the URL construction detail, showing the payload id maps to {sha16}.json, which is extra meaning beyond the schema, though the sha16 truncation is only implied and slightly ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (GET), resource (one public-root card-v0 leaf), and lookup key (sha256, 64 hex) plus the exact endpoint pattern. It is clearly distinguishable from siblings like get_root, list_cards, and verify_card.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing for one state: when the id is NOT_IN_THIS_CORPUS, the agent is told to use verify_card instead. It also excludes GSPC measurement-cards. However, it gives no general when-to-use guidance versus verify_card or list_cards for the common case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rootPublic Merkle rootARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | No | |
| as_of | No | |
| state | Yes | VALID, UNREACHABLE or UNCHECKABLE |
| source | No | |
| not_gspc | No | |
| card_count | No | |
| merkle_root | No |
TDQS
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.
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.
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.
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.
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.
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 rowsARead-onlyIdempotentInspect
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. Each row carries card_url, the signed body; pass it, or the row's 64-hex card id, to verify_card.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | No | Only list rows whose axis matches this name (case-insensitive). | |
| limit | No | How 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
| Name | Required | Description |
|---|---|---|
| rows | No | |
| index | No | |
| state | No | Read state of the signed card index on this call: LIVE (read now) or UNREACHABLE. Listing is not verification; verify_card checks a row. |
| doctrine | No | |
| axis_query | No | |
| state_basis | No | |
| not_a_certification | No | |
| card_store_count_endpoint | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety bar is met. The description adds genuinely useful behavior: the two counts are reported next to each other and deliberately never reconciled, and rows are returned newest-first with the full counts reported regardless of the limit. That is meaningful context beyond the annotations, though it does not mention rate limits or the size of the index.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences that are information-dense to the point of being hard to parse, with em-dash-heavy asides. The purpose is front-loaded, but the reconciliation caveat and the counts-regardless-of-limit note are repeated from the schema, so not every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value shape need not be spelled out, yet the description still explains the index's declared-vs-actual count semantics and how to chain into verify_card. For a two-optional-param read tool this is close to complete; only the index's scale and pagination beyond 'newest first' are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description names axis and limit and notes they return 'recent rows' newest-first, but this largely restates what the schema already documents, including the schema's own note that the two counts are always reported in full regardless of the limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: list the rows of the published signed-card index, and report the declared count (n_cards) alongside the actual row count. It distinguishes itself from the card store endpoint and names verify_card as the follow-on tool, so an agent can place it. The dense, clause-heavy opening sentence slightly muddies the core action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says optional filters (axis, limit) return recent rows and that card_url or the row's card id should be passed to verify_card for verification, which gives implied routing context. However, it never states when to reach for this tool versus siblings like get_card, board_totals, or measurement_index, so usage is only inferable.
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 snapshotARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | No | |
| kind | No | |
| as_of | No | |
| state | Yes | VALID or UNREACHABLE |
| counts | No | |
| source | No | |
| partial | No | true whenever the enumeration did not complete — a cap-limited read is partial |
| headline | No | |
| enumeration | No | |
| partial_reason | No |
TDQS
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.
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.
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.
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.
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.
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 indexARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | |
| reason | No | |
| anchors | No | |
| batches | No | |
| version | No | |
| doctrine | No | |
| n_batches | No | |
| signature | No | |
| index_root | No | |
| n_capsules_total | No |
TDQS
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.
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.
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.
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.
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.
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)Inspect
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 manifest card citing the batch sha256. Manifest signing is conditional: a returned unsigned manifest declares manifest_card.sig_ed25519:null and unsigned_reason, with signature unmeasured. Manifest root inclusion remains unmeasured. If signing throws after settlement, the route returns PAID_NOT_DELIVERED with no batch or manifest delivered; preserve the settlement receipt and reconcile before reissue, without automatically retrying or paying again. 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. This tool returns historical measurement leaves, not payment receipts. /api/receipts/latest reports aggregate receipt-store state when available; its counts do not verify a particular payment, delivery or buyer acceptance. Without x_payment the tool returns the 402 challenge.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Window end, ISO-8601. Defaults to now. | |
| from | Yes | Window start, ISO-8601. Required. | |
| preview | No | true = free: count, span, roots and batch sha256 without the leaves. | |
| x_payment | No | The X-PAYMENT header value signed against accepts[] from the previous 402. Omit to receive the challenge. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | |
| route | No | |
| status | Yes | PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code> |
| accepts | No | |
| resource | No | |
| deliverable | No | |
| http_status | No | |
| x402Version | No | |
| delivery_state | No | |
| settlement_state | No | |
| payment_presented | No | |
| not_a_certification | No |
routeGSPC Route: decide a path under your policy (free, decide-only)ARead-onlyIdempotentInspect
GSPC Route (free, decide-only). Applies YOUR policy and the fixed GSPC floor to a candidate set and returns the chosen candidate, the basis of the choice and an unsigned route record (csoai.evidence-event/0.1, profile csoai.route-evidence/0.1). Candidates are the GSPC MCP tools by default, or ones you declare: your models, your local GPU, MCP tools, A2A agents, x402 resources. Policy is Cedar: presets read-only, local-only, eu-only, no-unmeasured, plus forbid_providers and allow_kinds; anything the router does not understand grants nothing. For the quality axis you name it reads the live board (https://councilof.ai/api/gspc). With no candidates declared, the GSPC tool whose purpose matches the task is chosen (basis task_match); when no tool's purpose matches, the answer is UNTESTED and nothing is chosen, never a pick by name. For candidates you declare, routing is not ranking: a choice is called a separated leader only when the board separated that comparison; otherwise it is TIE or UNTESTED and your tie_break decides. A candidate the board holds no number for is UNTESTED, never 0. Sponsor, bid and placement fields are ignored. The task text is hashed, never stored. Nothing is executed, called or charged; mode execute answers NOT_ENABLED. Measurement, not certification.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | decide (default). execute is not enabled and answers NOT_ENABLED. | |
| task | No | The task. Hashed (sha256) and never stored or echoed. | |
| policy | No | presets [read-only, local-only, eu-only, no-unmeasured], forbid_providers [..], allow_kinds [..], confirm_destructive, caller_wallet. Unknown keys grant nothing. | |
| objective | No | ||
| candidates | No | Omit to route among the GSPC MCP tools. A candidate field the router does not know makes that candidate UNCHECKABLE (never permitted); sponsor/bid/placement fields are ignored. | |
| data_class | No | Default public. A non-public class is routed only to candidates that declare it in data_class_allowed. | |
| needs_write | No | ||
| task_sha256 | No | Alternative to task: its sha256. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| note | No | |
| label | No | |
| state | Yes | |
| chosen | No | |
| errors | No | |
| record | No | |
| signed | No | |
| preview | No | |
| forbidden | No | |
| permitted | No | |
| considered | No | |
| separation | No | |
| http_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true/idempotent=true/destructive=false, and the description reinforces rather than contradicts these. It adds substantial beyond-annotation context: task text is hashed and never stored, nothing is executed/called/charged, unknown policy keys grant nothing, unmeasured candidates are UNTESTED (never 0), sponsor/bid/placement are ignored, and separation-of-leader semantics for declared candidates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a dense block but front-loads the core purpose and each sentence carries operational meaning (UNTESTED rules, tie_break, hashing, NOT_ENABLED). Some mild repetition of 'free, decide-only' from the title, and the run-on paragraph could be broken up, but waste is low for a tool of this complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no prose. For an 8-parameter tool with nested policy/objective/candidate objects and an open-world routing decision, the description covers the decision rules, failure/degenerate outcomes, and privacy behavior an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With ~75% schema coverage the baseline is 3, but the description adds real meaning: it enumerates policy presets, explains tie_break ordering, notes the quality axis reads the live board, describes data_class routing, and warns that an unknown candidate field makes it UNCHECKABLE while sponsor fields are ignored. Only the objective weights values (cost/latency/quality) go unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (applies YOUR policy + the fixed GSPC floor to a candidate set) and a specific return (the chosen candidate, the basis, and an unsigned route record). This is clearly distinguishable from read-only siblings like board_totals, get_axis, and the verify_* tools. An agent can tell what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when it applies: candidates default to GSPC MCP tools or ones you declare; with none declared the tool matching the task purpose is chosen; when nothing matches the answer is UNTESTED. It also flags that mode=execute answers NOT_ENABLED, steering callers to decide. It never names a sibling as an alternative, but the usage conditions are concrete and unambiguous.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | Yes | Symbol (as listed by https://councilof.ai/api/xrpl) or issuer r-address. | |
| preview | No | true = free unsigned state. | |
| x_payment | No | The X-PAYMENT header value signed against accepts[] from the previous 402. Omit to receive the challenge. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | |
| route | No | |
| status | Yes | PAYMENT_REQUIRED, DELIVERED, NOT_DEPLOYED, UNREACHABLE, UNREADABLE_RESPONSE, BAD_ARGUMENTS or HTTP_<code> |
| accepts | No | |
| resource | No | |
| deliverable | No | |
| http_status | No | |
| x402Version | No | |
| delivery_state | No | |
| settlement_state | No | |
| payment_presented | No | |
| not_a_certification | No |
TDQS
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.
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.
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.
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.
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.
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 endpointARead-onlyIdempotentInspect
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 for independent verification. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| endpoint_url | Yes | Public HTTP(S) endpoint URL whose already-published measurement capsules should be read, e.g. https://example.com/mcp. |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | |
| reason | No | |
| capsules | No | |
| doctrine | No | |
| endpoint | No | |
| n_capsules | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, open-world), and the description adds substantial behavior beyond them: the static shard keyed by sha256 of the normalised URL, the NOT_MEASURED-with-empty-list contract ('never an error and never a clean bill'), the explicit absence of verdicts/scores/rankings, and the inclusion of Merkle root and inclusion pointer for independent verification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operative framing ('Trust per server, not totals') and every sentence carries information rather than filler. The first sentence is very long and packs a parenthetical enumeration of dimensions, which costs some readability but does not waste space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values need no prose, yet the description still covers the empty/absent case, the state taxonomy fields, and verification affordances. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 semantics by explaining the URL is normalised and hashed to select the shard, implying case/trailing-slash variants resolve to the same capsule set. That goes beyond the schema's format/pattern constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('every published measurement capsule about ONE endpoint URL across all batches') and enumerates the capsule families returned, which clearly separates it from aggregate siblings like board_totals and from verify_* tools that validate a single capsule. An agent can tell it apart from the other evidence tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Trust per server, not totals' implies it is the per-endpoint counterpart to the totals tools, which gives useful framing. But no alternative tool is named and no explicit when/when-not condition is stated, so routing versus mcp_trust, measurement_index or verify_capsule is left to inference.
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 capsuleARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| capsule_json | Yes | The capsule: its JSON text (preferred, byte-exact) or the parsed object. |
Output Schema
| Name | Required | Description |
|---|---|---|
| batch | No | |
| state | Yes | |
| reason | No | |
| doctrine | No | |
| inclusion | No | |
| capsule_id | No | |
| index_signature | No |
TDQS
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.
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.
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.
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.
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.
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)ARead-onlyIdempotentInspect
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 a key PINNED in this verifier and published in the did:web:csoai.org DID document: #card-attestation-1 (the card key of the signed card index) or #card-attestation-2 (the card key added on rotation, 27 Sep 2026; a card names the key it was signed under), plus the board key for the cards it signed. pinned_key in the result names the key that matched. 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 an inline key outside the pinned set is reported INVALID, and a DID key reference outside it UNCHECKABLE. 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, a councilof.ai / csoai.org URL, or a 64-hex card id (the record id shown on the site and the card field of list_cards), which resolves to https://councilof.ai/signed/cards/{id}.json. Never a certification.
| Name | Required | Description | Default |
|---|---|---|---|
| card | Yes | The signed card: an object, a JSON string, a councilof.ai / csoai.org URL to one, or a 64-hex card id (resolved to https://councilof.ai/signed/cards/{id}.json). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| note | No | |
| rule | No | |
| state | Yes | VALID, INVALID or UNCHECKABLE |
| checks | No | |
| family | No | |
| reason | No | |
| reasons | No | |
| pinned_key | No | |
| resolved_from | No | Present when a 64-hex card id was passed: the id asked about and the URL fetched for it. |
| not_a_certification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/openWorld annotations by disclosing the pinned-key model, the trust distinction between inline keys and DID references, and the three-verdict outcome model (VALID/INVALID/UNCHECKABLE). This is exactly the kind of behavioral detail an agent needs to interpret results and avoid treating 'could not check' as forgery.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the rule link, and every clause conveys substantive information. It is a dense single block rather than cleanly segmented, which slightly hurts readability but not content economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need not be explained, and the description still covers verification mechanics, key trust boundaries, verdict semantics, and input resolution. Nothing an agent needs to invoke or interpret the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single param's anyOf forms are already documented, so the baseline is 3. The description adds meaning by tying the id form to its origin ('the record id shown on the site and the card field of list_cards') and to the resolution URL, giving context the schema alone does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (verify) plus the exact resource (a signed gspc.measurement-card) and names the governing rule document. It is clearly distinguishable from siblings like verify_capsule and verify_inclusion by naming the artifact it checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when the tool applies (checking a signed card against a pinned key set) and enumerates the accepted input forms and the resolution behavior for a 64-hex id. It does not, however, explicitly contrast itself with the sibling verifiers or say when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_inclusionMerkle inclusion checkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sha256 | Yes | 64-char hex digest to test for inclusion. |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | VALID, INVALID or UNCHECKABLE |
| reason | No | |
| sha256 | No | |
| merkle_root | No |
TDQS
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.
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.
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.
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.
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.
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 snapshotARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | No | |
| as_of | No | |
| state | Yes | VALID or UNREACHABLE |
| counts | No | |
| source | No | |
| headline | No |
TDQS
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.
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.
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.
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.
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.
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 tool update
- Changed
route1 field changed- changed
Output schema / properties / state / enumPrevious value: -[ - "ROUTED", - "NO_PERMITTED_CANDIDATE", - "BAD_ARGUMENTS", - "NOT_ENABLED" -]New value: +[ + "ROUTED", + "NO_PERMITTED_CANDIDATE", + "UNTESTED", + "BAD_ARGUMENTS", + "NOT_ENABLED" +]
2 tool updates
- Changed
art50_marking_evidence4 fields changed- changed
Input schema / properties / url / descriptionPrevious value: -"Public http(s) URL of the generative output to measure (≤20 MiB)."New value: +"Public HTTP(S) URL of the generative output to measure (≤20 MiB). The server fetches only this declared measurement subject." - added
Input schema / properties / url / formatAdded value: +"uri" - added
Input schema / properties / url / maxLengthAdded value: +2048 - added
Input schema / properties / url / patternAdded value: +"^https?://"
- Changed
server_evidence4 fields changed- changed
Input schema / properties / endpoint_url / descriptionPrevious value: -"The endpoint URL, e.g. https://example.com/mcp or an agent-card URL."New value: +"Public HTTP(S) endpoint URL whose already-published measurement capsules should be read, e.g. https://example.com/mcp." - added
Input schema / properties / endpoint_url / formatAdded value: +"uri" - added
Input schema / properties / endpoint_url / maxLengthAdded value: +2048 - added
Input schema / properties / endpoint_url / patternAdded value: +"^https?://"
2 tool updates
- Changed
art50_marking_evidence4 fields changed- changed
Input schema / properties / url / descriptionPrevious value: -"Public HTTP(S) URL of the generative output to measure (≤20 MiB). The server fetches only this declared measurement subject."New value: +"Public http(s) URL of the generative output to measure (≤20 MiB)." - removed
Input schema / properties / url / formatRemoved value: -"uri" - removed
Input schema / properties / url / maxLengthRemoved value: -2048 - removed
Input schema / properties / url / patternRemoved value: -"^https?://"
- Changed
server_evidence4 fields changed- changed
Input schema / properties / endpoint_url / descriptionPrevious value: -"Public HTTP(S) endpoint URL whose already-published measurement capsules should be read, e.g. https://example.com/mcp."New value: +"The endpoint URL, e.g. https://example.com/mcp or an agent-card URL." - removed
Input schema / properties / endpoint_url / formatRemoved value: -"uri" - removed
Input schema / properties / endpoint_url / maxLengthRemoved value: -2048 - removed
Input schema / properties / endpoint_url / patternRemoved value: -"^https?://"
2 tool updates
- Changed
art50_marking_evidence4 fields changed- changed
Input schema / properties / url / descriptionPrevious value: -"Public http(s) URL of the generative output to measure (≤20 MiB)."New value: +"Public HTTP(S) URL of the generative output to measure (≤20 MiB). The server fetches only this declared measurement subject." - added
Input schema / properties / url / formatAdded value: +"uri" - added
Input schema / properties / url / maxLengthAdded value: +2048 - added
Input schema / properties / url / patternAdded value: +"^https?://"
- Changed
server_evidence4 fields changed- changed
Input schema / properties / endpoint_url / descriptionPrevious value: -"The endpoint URL, e.g. https://example.com/mcp or an agent-card URL."New value: +"Public HTTP(S) endpoint URL whose already-published measurement capsules should be read, e.g. https://example.com/mcp." - added
Input schema / properties / endpoint_url / formatAdded value: +"uri" - added
Input schema / properties / endpoint_url / maxLengthAdded value: +2048 - added
Input schema / properties / endpoint_url / patternAdded value: +"^https?://"
1 tool update
- Added
route
2 tool updates
- Added
evidence_bundle - Added
evidence_bundle_preview
1 tool update
- Changed
list_cards2 fields changed- added
Output schema / properties / stateAdded value: +{ + "description": "Read state of the signed card index on this call: LIVE (read now) or UNREACHABLE. Listing is not verification; verify_card checks a row.", + "enum": [ + "LIVE", + "UNREACHABLE" + ], + "type": "string" +} - added
Output schema / properties / state_basisAdded value: +{ + "type": "string" +}
3 tool updates
- Changed
get_card4 fields changed- added
Output schema / properties / card_urlAdded value: +{ + "description": "With NOT_IN_THIS_CORPUS: the signed card body to pass to verify_card.", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / corpusAdded value: +{ + "description": "With NOT_IN_THIS_CORPUS: the set the id belongs to (signed_card_index).", + "type": "string" +} - added
Output schema / properties / nextAdded value: +{ + "description": "With NOT_IN_THIS_CORPUS: the tool call that checks this id.", + "type": "object" +} - changed
Output schema / properties / state / descriptionPrevious value: -"VALID, INVALID or UNCHECKABLE"New value: +"VALID, NOT_IN_THIS_CORPUS, INVALID or UNCHECKABLE"
- Changed
list_cards1 field changed- added
Output schema / properties / rows / items / properties / card_urlAdded value: +{ + "description": "The signed card body, https://councilof.ai/signed/cards/{id}.json. verify_card takes this URL or the bare card id.", + "type": [ + "string", + "null" + ] +}
- Changed
verify_card2 fields changed- changed
Input schema / properties / card / descriptionPrevious value: -"The signed card: an object, a JSON string, or a councilof.ai / csoai.org URL to one."New value: +"The signed card: an object, a JSON string, a councilof.ai / csoai.org URL to one, or a 64-hex card id (resolved to https://councilof.ai/signed/cards/{id}.json)." - added
Output schema / properties / resolved_fromAdded value: +{ + "description": "Present when a 64-hex card id was passed: the id asked about and the URL fetched for it.", + "properties": { + "id": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" +}
16 tool updates
- Changed
art50_marking_evidence1 field changed- changed
Output 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" +}
- Changed
board_totals2 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "summary", + "description": "summary (default): counts, public_count, the separation line, dates and source. full: also count_grammar, by_family and the board's measured_on block.", + "enum": [ + "summary", + "full" + ], + "type": "string" +} - changed
Output 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" + }, + "detail": { + "description": "summary or full", + "type": "string" + }, + "not_a_certification": { + "type": "boolean" + }, + "public_count": { + "type": [ + "string", + "null" + ] + }, + "separation": {}, + "source": { + "type": "string" + }, + "state": { + "description": "LIVE or UNREACHABLE", + "type": "string" + } + }, + "required": [ + "state" + ], + "type": "object" +}
- Changed
commission_card1 field changed- changed
Output 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" +}
- Changed
get_axis1 field changed- changed
Output 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" +}
- Changed
get_card1 field changed- changed
Output 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" +}
- Changed
get_root1 field changed- changed
Output 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" +}
- Changed
list_cards1 field changed- changed
Output 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" +}
- Changed
mcp_trust11 fields changed- changed
Output schema / properties / as_of / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / counts / typePrevious value: -"object"New value: +[ + "object", + "null" +] - added
Output schema / properties / diffAdded value: +{} - changed
Output schema / properties / enumeration / typePrevious value: -"object"New value: +[ + "object", + "null" +] - added
Output schema / properties / headlineAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / kindAdded value: +{} - added
Output schema / properties / partial / descriptionAdded value: +"true whenever the enumeration did not complete — a cap-limited read is partial" - added
Output schema / properties / partial_reasonAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / sourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / stateAdded value: +{ + "description": "VALID or UNREACHABLE", + "type": "string" +} - added
Output schema / requiredAdded value: +[ + "state" +]
- Added
measurement_index - Changed
receipts_batch1 field changed- changed
Output 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" +}
- Changed
rwa_evidence1 field changed- changed
Output 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" +}
- Added
server_evidence - Added
verify_capsule - Changed
verify_card1 field changed- changed
Output 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" +}
- Changed
verify_inclusion1 field changed- changed
Output 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" +}
- Changed
x402_trust7 fields changed- changed
Output schema / properties / as_of / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / counts / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / headline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / kindAdded value: +{} - added
Output schema / properties / sourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / stateAdded value: +{ + "description": "VALID or UNREACHABLE", + "type": "string" +} - added
Output schema / requiredAdded value: +[ + "state" +]
16 tool updates
- Changed
art50_marking_evidence1 field changed- changed
Output 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
- Changed
board_totals2 fields changed- removed
Input schema / properties / detailRemoved value: -{ - "default": "summary", - "description": "summary (default): counts, public_count, the separation line, dates and source. full: also count_grammar, by_family and the board's measured_on block.", - "enum": [ - "summary", - "full" - ], - "type": "string" -} - changed
Output schema / (root)Previous value: -{ - "properties": { - "as_of": {}, - "by_family": {}, - "count_grammar": {}, - "counts": { - "items": { - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "detail": { - "description": "summary or full", - "type": "string" - }, - "not_a_certification": { - "type": "boolean" - }, - "public_count": { - "type": [ - "string", - "null" - ] - }, - "separation": {}, - "source": { - "type": "string" - }, - "state": { - "description": "LIVE or UNREACHABLE", - "type": "string" - } - }, - "required": [ - "state" - ], - "type": "object" -}New value: +null
- Changed
commission_card1 field changed- changed
Output 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
- Changed
get_axis1 field changed- changed
Output 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
- Changed
get_card1 field changed- changed
Output 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
- Changed
get_root1 field changed- changed
Output 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
- Changed
list_cards1 field changed- changed
Output 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
- Changed
mcp_trust11 fields changed- changed
Output schema / properties / as_of / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / counts / typePrevious value: -[ - "object", - "null" -]New value: +"object" - removed
Output schema / properties / diffRemoved value: -{} - changed
Output schema / properties / enumeration / typePrevious value: -[ - "object", - "null" -]New value: +"object" - removed
Output schema / properties / headlineRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / kindRemoved value: -{} - removed
Output schema / properties / partial / descriptionRemoved value: -"true whenever the enumeration did not complete — a cap-limited read is partial" - removed
Output schema / properties / partial_reasonRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / sourceRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / stateRemoved value: -{ - "description": "VALID or UNREACHABLE", - "type": "string" -} - removed
Output schema / requiredRemoved value: -[ - "state" -]
- Removed
measurement_index - Changed
receipts_batch1 field changed- changed
Output 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
- Changed
rwa_evidence1 field changed- changed
Output 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
- Removed
server_evidence - Removed
verify_capsule - Changed
verify_card1 field changed- changed
Output 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
- Changed
verify_inclusion1 field changed- changed
Output 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
- Changed
x402_trust7 fields changed- changed
Output schema / properties / as_of / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / counts / typePrevious value: -[ - "object", - "null" -]New value: +"object" - changed
Output schema / properties / headline / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / kindRemoved value: -{} - removed
Output schema / properties / sourceRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / stateRemoved value: -{ - "description": "VALID or UNREACHABLE", - "type": "string" -} - removed
Output schema / requiredRemoved value: -[ - "state" -]
1 tool update
- Changed
board_totals3 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "summary", + "description": "summary (default): counts, public_count, the separation line, dates and source. full: also count_grammar, by_family and the board's measured_on block.", + "enum": [ + "summary", + "full" + ], + "type": "string" +} - added
Output schema / properties / detailAdded value: +{ + "description": "summary or full", + "type": "string" +} - added
Output schema / properties / separationAdded value: +{}
1 tool update
- Changed
board_totals3 fields changed- removed
Input schema / properties / detailRemoved value: -{ - "default": "summary", - "description": "summary (default): counts, public_count, the separation line, dates and source. full: also count_grammar, by_family and the board's measured_on block.", - "enum": [ - "summary", - "full" - ], - "type": "string" -} - removed
Output schema / properties / detailRemoved value: -{ - "description": "summary or full", - "type": "string" -} - removed
Output schema / properties / separationRemoved value: -{}
1 tool update
- Changed
board_totals3 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "summary", + "description": "summary (default): counts, public_count, the separation line, dates and source. full: also count_grammar, by_family and the board's measured_on block.", + "enum": [ + "summary", + "full" + ], + "type": "string" +} - added
Output schema / properties / detailAdded value: +{ + "description": "summary or full", + "type": "string" +} - added
Output schema / properties / separationAdded value: +{}
16 tool updates
- Changed
art50_marking_evidence1 field changed- changed
Output 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" +}
- Changed
board_totals1 field changed- changed
Output 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" +}
- Changed
commission_card1 field changed- changed
Output 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" +}
- Changed
get_axis1 field changed- changed
Output 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" +}
- Changed
get_card1 field changed- changed
Output 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" +}
- Changed
get_root1 field changed- changed
Output 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" +}
- Changed
list_cards1 field changed- changed
Output 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" +}
- Changed
mcp_trust11 fields changed- changed
Output schema / properties / as_of / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / counts / typePrevious value: -"object"New value: +[ + "object", + "null" +] - added
Output schema / properties / diffAdded value: +{} - changed
Output schema / properties / enumeration / typePrevious value: -"object"New value: +[ + "object", + "null" +] - added
Output schema / properties / headlineAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / kindAdded value: +{} - added
Output schema / properties / partial / descriptionAdded value: +"true whenever the enumeration did not complete — a cap-limited read is partial" - added
Output schema / properties / partial_reasonAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / sourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / stateAdded value: +{ + "description": "VALID or UNREACHABLE", + "type": "string" +} - added
Output schema / requiredAdded value: +[ + "state" +]
- Added
measurement_index - Changed
receipts_batch1 field changed- changed
Output 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" +}
- Changed
rwa_evidence1 field changed- changed
Output 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" +}
- Added
server_evidence - Added
verify_capsule - Changed
verify_card1 field changed- changed
Output 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" +}
- Changed
verify_inclusion1 field changed- changed
Output 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" +}
- Changed
x402_trust7 fields changed- changed
Output schema / properties / as_of / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / counts / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / headline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / kindAdded value: +{} - added
Output schema / properties / sourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / stateAdded value: +{ + "description": "VALID or UNREACHABLE", + "type": "string" +} - added
Output schema / requiredAdded value: +[ + "state" +]
13 tool updates
- Changed
art50_marking_evidence1 field changed- changed
Output 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
- Changed
board_totals1 field changed- changed
Output 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
- Changed
commission_card1 field changed- changed
Output 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
- Changed
get_axis1 field changed- changed
Output 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
- Changed
get_card1 field changed- changed
Output 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
- Changed
get_root1 field changed- changed
Output 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
- Changed
list_cards1 field changed- changed
Output 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
- Changed
mcp_trust11 fields changed- changed
Output schema / properties / as_of / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / counts / typePrevious value: -[ - "object", - "null" -]New value: +"object" - removed
Output schema / properties / diffRemoved value: -{} - changed
Output schema / properties / enumeration / typePrevious value: -[ - "object", - "null" -]New value: +"object" - removed
Output schema / properties / headlineRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / kindRemoved value: -{} - removed
Output schema / properties / partial / descriptionRemoved value: -"true whenever the enumeration did not complete — a cap-limited read is partial" - removed
Output schema / properties / partial_reasonRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / sourceRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / stateRemoved value: -{ - "description": "VALID or UNREACHABLE", - "type": "string" -} - removed
Output schema / requiredRemoved value: -[ - "state" -]
- Changed
receipts_batch1 field changed- changed
Output 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
- Changed
rwa_evidence1 field changed- changed
Output 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
- Changed
verify_card1 field changed- changed
Output 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
- Changed
verify_inclusion1 field changed- changed
Output 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
- Changed
x402_trust7 fields changed- changed
Output schema / properties / as_of / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / counts / typePrevious value: -[ - "object", - "null" -]New value: +"object" - changed
Output schema / properties / headline / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / kindRemoved value: -{} - removed
Output schema / properties / sourceRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / stateRemoved value: -{ - "description": "VALID or UNREACHABLE", - "type": "string" -} - removed
Output schema / requiredRemoved value: -[ - "state" -]
Related MCP Connectors
10,065 source-verified compliance nodes, 39 pillars, 25 MCP tools (EU AI Act, GDPR, NIST, MITRE).
AI governance MCP server for EU AI Act compliance and jurisdiction verification
MCP-native AI evaluation: rubric audits, eval suites, and proof reports for AI/LLM output.
EU compliance corpus across 8 frameworks (NIS2, DORA, AI Act, ISO 27001 + more) via MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for UK AI Bill 2026 compliance, implementing a 5-principles framework (Safety, Transparency, Fairness, Accountability, Contestability) to help audit and classify AI systems.33 PyPIMIT
- AlicenseAqualityDmaintenanceEU AI Act · APRA · NIST AI RMF · ISO 42001 · AU AI Safety — grounded compliance citations for any MCP client.648 npm1Apache 2.0
- AlicenseNot gradedqualityBmaintenanceQuantitative governance gate for AI agents. Six gates (risk, profit, novelty, complexity, quality, utility) return PROCEED/PAUSE/HALT/ESCALATE with confidence scores and hash-chained, tamper-evident audit trails. Generates NIST AI RMF and EU AI Act Annex IV artifacts. 10 MCP tools; local stdio and hosted Streamable HTTP with a free tier.MIT
- FlicenseNot gradedqualityNot gradedmaintenanceOpen-source AI governance toolkit. MCP servers & CLIs for scanning, auditing, and managing your AI environment-
Glama MCP Gateway
Add one secure layer between your agents and this server.