Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "art50_marking_evidence" and "route"
⟨7 unchanged words⟩ Article 50 marking-evidence pack via https://councilof.ai/api/art50/marking-evidence:is awhich machine-readablemarkmarksDETECTABLEthe named methods DETECT in these bytes rightnownow. Scope: C2PA and IPTC metadata only (C2PA manifest store, assertion hashes, hard binding, claim signature; IPTC digitalSourceType); no watermark,besidefingerprinttheorverbatimotherArtkind of mark is read. NOT_DETECTED is not unmarked: Article 50(2)excerptishashtechnology-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 theArtC2PA,99(4)whoseceiling.specificationWatermarksisareoneUNCHECKABLEofwherethenotwopublicmethodsdetectorread.existsThe pack carries the verbatim Art 50(2) text hash and thepackdatessaysitso.turns on. Point-in-time detection — never a conformity opinion, ⟨42 unchanged words⟩
⟨86 unchanged words⟩ reads the live board (https://councilof.ai/api/gspc).RoutingWith 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 ⟨59 unchanged words⟩
⟨43 unchanged words⟩ :{"enum":["ROUTED","NO_PERMITTED_CANDIDATE","UNTESTED","BAD_ARGUMENTS","NOT_ENABLED"],"type":"string"} ⟨4 unchanged words⟩
Changed the definition of "art50_marking_evidence" and "server_evidence"
⟨44 unchanged words⟩ boolean"},"url":{"description":"PublichttpHTTP(sS) URL of the generative output to measure (≤20 MiB). The server fetches only this declared measurement subject.","format":"uri","maxLength":2048,"pattern":"^https?://","type":"string"},"x_payment":{ ⟨21 unchanged words⟩
⟨49 unchanged words⟩ , batch Merkle root and an inclusion pointer(verify_capsule
Changed the definition of "art50_marking_evidence" and "server_evidence"
⟨44 unchanged words⟩ boolean"},"url":{"description":"PublicHTTPhttp(Ss) URL of the generative output to measure (≤20 MiB).The server fetches only this declared measurement subject.","format":"uri","maxLength":2048,"pattern":"^https?://","type":"string"},"x_payment":{ ⟨21 unchanged words⟩
⟨49 unchanged words⟩ , batch Merkle root and an inclusion pointerfor
Changed the definition of "art50_marking_evidence" and "server_evidence"
⟨44 unchanged words⟩ boolean"},"url":{"description":"PublichttpHTTP(sS) URL of the generative output to measure (≤20 MiB). The server fetches only this declared measurement subject.","format":"uri","maxLength":2048,"pattern":"^https?://","type":"string"},"x_payment":{ ⟨21 unchanged words⟩
⟨49 unchanged words⟩ , batch Merkle root and an inclusion pointer(verify_capsule
Added "evidence_bundle", "evidence_bundle_preview" and "route" (16 tools before, 19 now)
Evidence bundle for one obligation (paid, x402; preview free) — PAID (x402). An evidence bundle for ONE obligation (article-50, article-53 GPAI transparency, dora or cra) and an optional subject via https://councilof.ai/api/evidence-bundle: OSCAL 1.1.0 assessment-results assembled only from already-signed measurement cards (each with its card bytes and Merkle inclusion proof), plus one manifest card-v0, signed when the signing key is present. Observations are relevant-to the obligation, never satisfied or not satisfied; zero relevant cards ships as an empty bundle, and the free preview says so first (preview=true here, or the free tool evidence_bundle_pre…
Signed cards relevant to one obligation (free) — 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 …
GSPC Route: decide a path under your policy (free, decide-only) — 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 boar…
Certificate changed, valid to 2026-12-27
Changed the definition of "list_cards"
⟨72 unchanged words⟩ },"type":["array","null"]},"state":{"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"},"state_basis":{"type":"string"}},"type":"object"}
Changed the definition of "get_card", "list_cards" and "verify_card"
⟨10 unchanged words⟩ https://councilof.ai/cards/{sha16}.json. UNMEASURED cells stay visible.Three statesStates: VALID (fetched),;INVALIDNOT_IN_THIS_CORPUS (the id is in the signed card index, notatheleafpublicofroot, so use verify_card on it); INVALID (in neither the live root nor the signed card index),;
Added "measurement_index", "server_evidence" and "verify_capsule"; changed the definition of "art50_marking_evidence", "board_totals", "commission_card" and 10 more (13 tools before, 16 now)
before
—after
Article 50 marking evidence (paid, x402; preview free)before
—after
{"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"}Removed "measurement_index", "server_evidence" and "verify_capsule"; changed the definition of "art50_marking_evidence", "board_totals", "commission_card" and 10 more (16 tools before, 13 now)
before
Article 50 marking evidence (paid, x402; preview free)after
—before
{"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"}after
—Changed the definition of "board_totals"
⟨42 unchanged words⟩ 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 ⟨18 unchanged words⟩
{"additionalProperties":false,"properties":{"detail":{"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"}},"type":"object"}
Added "measurement_index", "server_evidence" and "verify_capsule"; changed the definition of "art50_marking_evidence", "board_totals", "commission_card" and 10 more (13 tools before, 16 now)
before
—after
Article 50 marking evidence (paid, x402; preview free)before
—after
{"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"}Unknown → Live
Listed separately from csoai. Checks before this date are on that record.
Showing the latest 14 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"additionalProperties":false,"properties":{"endpoint_url":{"description":"ThePublic HTTP(S) endpoint URL,e.g.whosehttps://example.com/mcpalready-publishedormeasurementancapsulesagent-cardshouldURL.be read, e.g. https://example.com/mcp.","format":"uri","maxLength":2048,"pattern":"^https?://","type":"string"}},"required": ⟨3 unchanged words⟩
{"additionalProperties":false,"properties":{"endpoint_url":{"description":"Public HTTP(S)The endpoint URLwhose already-published measurement capsules should be read, e.g. https://example.com/mcp.","format":"uri","maxLength":2048,"pattern":"^https?:////example.com/mcp or an agent-card URL.","type":"string"}},"required": ⟨3 unchanged words⟩
{"additionalProperties":false,"properties":{"endpoint_url":{"description":"ThePublic HTTP(S) endpoint URL,e.g.whosehttps://example.com/mcpalready-publishedormeasurementancapsulesagent-cardshouldURL.be read, e.g. https://example.com/mcp.","format":"uri","maxLength":2048,"pattern":"^https?://","type":"string"}},"required": ⟨3 unchanged words⟩
{"properties":{"card_url":{"description":"With NOT_IN_THIS_CORPUS: the signed card body to pass to verify_card.","type":["string","null"]},"corpus":{"description":"With NOT_IN_THIS_CORPUS: the set the id belongs to (signed_card_index).","type":"string"},"next":{"description":"With NOT_IN_THIS_CORPUS: the tool call that checks this id.","type":"object"},"not_gspc":{"type":"boolean"},"reason" ⟨8 unchanged words⟩ "string"},"state":{"description":"VALID, NOT_IN_THIS_CORPUS, INVALID or UNCHECKABLE","type":"string" ⟨6 unchanged words⟩
⟨55 unchanged words⟩ 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.
⟨43 unchanged words⟩ ,"card":{"type":"string"},"card_url":{"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"]},"signed":{},"ts":{}},"type ⟨6 unchanged words⟩
⟨166 unchanged words⟩ as a JSON object, a JSON string,ora councilof.ai / csoai.orgURL.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.
⟨12 unchanged words⟩ card: an object, a JSON string,ora councilof.ai / csoai.org URL toone.one, or a 64-hex card id (resolved to https://councilof.ai/signed/cards/{id}.json)."}},"required":["card"],"type":"object"}
⟨79 unchanged words⟩ :"string"},"type":"array"},"resolved_from":{"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"},"rule":{"type":"string"},"state" ⟨11 unchanged words⟩
before
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Article 50 marking evidence (paid, x402; preview free)"}before
—after
Live GSPC board totals⟨42 unchanged words⟩ 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 ⟨18 unchanged words⟩
{"additionalProperties":false,"properties":{"detail":{"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"}},"type":"object"}
before
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Live GSPC board totals"}before
—after
Commission a measurement card (paid, x402)before
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Commission a measurement card (paid, x402)"}before
—after
One GSPC board axisbefore
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"One GSPC board axis"}before
—after
One public-root card-v0 leafbefore
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"One public-root card-v0 leaf"}before
—after
Public Merkle rootbefore
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Public Merkle root"}before
—after
List signed card index rowsbefore
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"List signed card index rows"}before
—after
MCP handshake census snapshot{"properties":{"as_of":{"type":["string","null"]},"counts":{"type":["object","null"]},"diff":{},"enumeration":{"type":["object","null"]},"headline":{"type":["string","null"]},"kind":{},"partial":{"description":"true whenever the enumeration did not complete — a cap-limited read is partial","type":"boolean"},"partial_reason":{"type":["string","null"]},"source":{"type":"string"},"state":{"description":"VALID or UNREACHABLE","type":"string"}},"required":["state"],"type":"object"}
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"MCP handshake census snapshot"}before
—after
Receipts batch (paid, x402; preview free)before
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Receipts batch (paid, x402; preview free)"}before
—after
RWA asset evidence (paid, x402; preview free)before
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"RWA asset evidence (paid, x402; preview free)"}before
—after
Verify a signed measurement card (free)⟨17 unchanged words⟩ bytes, then check the Ed25519 signature underthea key PINNEDkeyin this verifier and publishedatin the did:web:csoai.org#card-attestation-1.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 ⟨15 unchanged words⟩ with a key they just generated — soaansignerinlineotherkeythanoutside thepublishedpinnedkeyset is reportedINVALID.INVALID, and a DID key reference outside it UNCHECKABLE. Three verdicts, never two: VALID, INVALID ⟨41 unchanged words⟩
before
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Verify a signed measurement card (free)"}before
—after
Merkle inclusion checkbefore
—after
{"properties":{"merkle_root":{"type":["string","null"]},"reason":{},"sha256":{"type":"string"},"state":{"description":"VALID, INVALID or UNCHECKABLE","type":"string"}},"required":["state"],"type":"object"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Merkle inclusion check"}before
—after
x402 catalog trust snapshot{"properties":{"as_of":{"type":["string","null"]},"counts":{"type":["object","null"]},"headline":{"type":["string","null"]},"kind":{},"source":{"type":"string"},"state":{"description":"VALID or UNREACHABLE","type":"string"}},"required":["state"],"type":"object"}
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"x402 catalog trust snapshot"}Measurement-capsule index — 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 w…
Every published capsule about one endpoint — Trust per server, not totals: every published measurement capsule about ONE endpoint URL across all batches — MCP contract-parity dimensions (AUTH, PAYMENT, PROTOCOL, TOOLS, VERSION), A2A card-signature state, self-parity cells for CSOAI's own doors, and any later adapter (e.g. tool drift) — each with its measurement_state, observed_at, correction_pointer, limitations, batch Merkle root and an inclusion pointer (verify_capsule re-derives inclusion). Read from a static per-endpoint shard keyed by sha256 of the normalised URL. An endpoint with no capsule answers NOT_MEASURED with an empty list …
Verify one measurement capsule — 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_MISM…
before
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Article 50 marking evidence (paid, x402; preview free)"}after
—before
Live GSPC board totalsafter
—⟨42 unchanged words⟩ are never summed and never swapped — plusthe board's separation line, andas_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 ⟨18 unchanged words⟩
{"additionalProperties":false,"properties":{"detail":{"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"}},"type":"object"}
before
{"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"}after
—before
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Live GSPC board totals"}after
—before
Commission a measurement card (paid, x402)after
—before
{"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"}after
—before
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Commission a measurement card (paid, x402)"}after
—before
One GSPC board axisafter
—before
{"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"}after
—before
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"One GSPC board axis"}after
—before
One public-root card-v0 leafafter
—before
{"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"}after
—before
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"One public-root card-v0 leaf"}after
—before
Public Merkle rootafter
—before
{"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"}after
—before
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Public Merkle root"}after
—before
List signed card index rowsafter
—before
{"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"}after
—before
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"List signed card index rows"}after
—before
MCP handshake census snapshotafter
—{"properties":{"as_of":{"type":["string","null"]},"counts":{"type":["object","null"]},"diff":{},"enumeration":{"type":["object","null"]},"headline":{"type":["string","null"]},"kind":{},"partial":{"description":"true whenever the enumeration did not complete — a cap-limited read is partial","type":"boolean"},"partial_reason":{"type":["string","null"]},"source":{"type":"string"},"state":{"description":"VALID or UNREACHABLE","type":"string"}},"required":["state"],"type":"object"}
before
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"MCP handshake census snapshot"}after
—before
Receipts batch (paid, x402; preview free)after
—before
{"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"}after
—before
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Receipts batch (paid, x402; preview free)"}after
—before
RWA asset evidence (paid, x402; preview free)after
—before
{"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"}after
—before
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"RWA asset evidence (paid, x402; preview free)"}after
—before
Verify a signed measurement card (free)after
—before
{"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"}after
—before
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Verify a signed measurement card (free)"}after
—before
Merkle inclusion checkafter
—before
{"properties":{"merkle_root":{"type":["string","null"]},"reason":{},"sha256":{"type":"string"},"state":{"description":"VALID, INVALID or UNCHECKABLE","type":"string"}},"required":["state"],"type":"object"}after
—before
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Merkle inclusion check"}after
—before
x402 catalog trust snapshotafter
—{"properties":{"as_of":{"type":["string","null"]},"counts":{"type":["object","null"]},"headline":{"type":["string","null"]},"kind":{},"source":{"type":"string"},"state":{"description":"VALID or UNREACHABLE","type":"string"}},"required":["state"],"type":"object"}
before
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"x402 catalog trust snapshot"}after
—Measurement-capsule index — 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 w…
Every published capsule about one endpoint — Trust per server, not totals: every published measurement capsule about ONE endpoint URL across all batches — MCP contract-parity dimensions (AUTH, PAYMENT, PROTOCOL, TOOLS, VERSION), A2A card-signature state, self-parity cells for CSOAI's own doors, and any later adapter (e.g. tool drift) — each with its measurement_state, observed_at, correction_pointer, limitations, batch Merkle root and an inclusion pointer (verify_capsule re-derives inclusion). Read from a static per-endpoint shard keyed by sha256 of the normalised URL. An endpoint with no capsule answers NOT_MEASURED with an empty list …
Verify one measurement capsule — 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_MISM…
before
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Article 50 marking evidence (paid, x402; preview free)"}before
—after
Live GSPC board totalsbefore
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Live GSPC board totals"}before
—after
Commission a measurement card (paid, x402)before
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Commission a measurement card (paid, x402)"}before
—after
One GSPC board axisbefore
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"One GSPC board axis"}before
—after
One public-root card-v0 leafbefore
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"One public-root card-v0 leaf"}before
—after
Public Merkle rootbefore
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Public Merkle root"}before
—after
List signed card index rowsbefore
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"List signed card index rows"}before
—after
MCP handshake census snapshot{"properties":{"as_of":{"type":["string","null"]},"counts":{"type":["object","null"]},"diff":{},"enumeration":{"type":["object","null"]},"headline":{"type":["string","null"]},"kind":{},"partial":{"description":"true whenever the enumeration did not complete — a cap-limited read is partial","type":"boolean"},"partial_reason":{"type":["string","null"]},"source":{"type":"string"},"state":{"description":"VALID or UNREACHABLE","type":"string"}},"required":["state"],"type":"object"}
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"MCP handshake census snapshot"}before
—after
Receipts batch (paid, x402; preview free)before
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Receipts batch (paid, x402; preview free)"}before
—after
RWA asset evidence (paid, x402; preview free)before
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"RWA asset evidence (paid, x402; preview free)"}before
—after
Verify a signed measurement card (free)before
—after
{"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"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Verify a signed measurement card (free)"}before
—after
Merkle inclusion checkbefore
—after
{"properties":{"merkle_root":{"type":["string","null"]},"reason":{},"sha256":{"type":"string"},"state":{"description":"VALID, INVALID or UNCHECKABLE","type":"string"}},"required":["state"],"type":"object"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Merkle inclusion check"}before
—after
x402 catalog trust snapshot{"properties":{"as_of":{"type":["string","null"]},"counts":{"type":["object","null"]},"headline":{"type":["string","null"]},"kind":{},"source":{"type":"string"},"state":{"description":"VALID or UNREACHABLE","type":"string"}},"required":["state"],"type":"object"}
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"x402 catalog trust snapshot"}Measurement-capsule index — 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 w…
Every published capsule about one endpoint — Trust per server, not totals: every published measurement capsule about ONE endpoint URL across all batches — MCP contract-parity dimensions (AUTH, PAYMENT, PROTOCOL, TOOLS, VERSION), A2A card-signature state, self-parity cells for CSOAI's own doors, and any later adapter (e.g. tool drift) — each with its measurement_state, observed_at, correction_pointer, limitations, batch Merkle root and an inclusion pointer (verify_capsule re-derives inclusion). Read from a static per-endpoint shard keyed by sha256 of the normalised URL. An endpoint with no capsule answers NOT_MEASURED with an empty list …
Verify one measurement capsule — 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_MISM…