Council of AI GSPC
Query and verify the Council of AI GSPC measurement board — live totals, axis rows, signed-card verification, and card listings — without certification.
Fetch live board totals: slot count and measured count with as_of dates, or UNREACHABLE if the board cannot be fetched.
Get one axis row by name (case-insensitive): n, accuracy, interval, MEASURED/UNMEASURED status, family, and dates; unknown names return the list of available axes.
Verify a signed measurement card (object, JSON string, or URL) against the pinned Ed25519 key: VALID, INVALID (with reason), or UNCHECKABLE.
List signed-card index rows with declared vs actual counts, optional axis filter and limit, and show disagreements with the card store endpoint without reconciling them.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Council of AI GSPCRun an EU AI Act risk assessment for our AI system"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CSOAI — Council of AI
22 axes measured · 14 model fleets · 3 public leader scores · 8 fact runs · TIE is TIE · not a certificate.
Independent AI-governance measurement. This repository is the live site, API and signing pipeline behind councilof.ai: the 22-axis GSPC board, Ed25519-signed measurement cards, the signed Merkle public root and its transparency-log witness, the corrections ledger, the A2A agent card, the x402 manifest, and the PyPI / npm readers. Measurement, not certification.
derived 2026-09-09T15:55:49Z by scripts/github/org-readme.py — every number on this page is read live from the URLs in that script; if this page and the API disagree, the API is right.
The board today
GET https://councilof.ai/api/gspc — schema csoai.gspc-axes/0.5 · totals.public_count = 22 axis · 22 measured
# | axis | family | kind | n | status | separation | leader carried? |
1 |
| gspc | model-comparison | 237 | MEASURED | UNTESTED | no — own model led, excluded |
2 |
| gspc | model-comparison | 36 | MEASURED | TIE | yes — accuracy 0.944 |
3 |
| gspc | model-comparison | 32 | MEASURED | UNTESTED | no — own model led, excluded |
4 |
| gspc | model-comparison | 33 | MEASURED | UNTESTED | no — own model led, excluded |
5 |
| gspc | model-comparison | 35 | MEASURED | UNTESTED | no — own model led, excluded |
6 |
| gspc | model-comparison | 32 | MEASURED | UNTESTED | no — own model led, excluded |
7 |
| gspc | model-comparison | 33 | MEASURED | UNTESTED | no — no signed card |
8 |
| gspc | model-comparison | 199 | MEASURED | UNTESTED | no — own model led, excluded |
9 |
| gspc | model-comparison | 32 | MEASURED | UNTESTED | no — no signed card |
10 |
| gspc | model-comparison | 33 | MEASURED | UNTESTED | no — no signed card |
11 |
| gspc | model-comparison | 36 | MEASURED | UNTESTED | no — own model led, excluded |
12 |
| gspc | model-comparison | 37 | MEASURED | SEPARATED | yes — accuracy 0.384 |
13 |
| gspc | model-comparison | 41 | MEASURED | UNTESTED | no — own model led, excluded |
14 |
| gspc | model-comparison | 71 | MEASURED | TIE | yes — accuracy 0.5915 |
15 |
| financial | deterministic-facts | 6 | MEASURED | — | no leader by design (facts run) |
16 |
| financial | deterministic-facts | 16 | MEASURED | — | no leader by design (facts run) |
17 |
| financial | deterministic-facts | 16 | MEASURED | — | no leader by design (facts run) |
18 |
| financial | deterministic-facts | 16 | MEASURED | — | no leader by design (facts run) |
19 |
| financial | deterministic-facts | 16 | MEASURED | — | no leader by design (facts run) |
20 |
| financial | deterministic-facts | 2 | MEASURED | — | no leader by design (facts run) |
21 |
| financial | deterministic-facts | 2 | MEASURED | — | no leader by design (facts run) |
22 |
| financial | deterministic-facts | 8 | MEASURED | — | no leader by design (facts run) |
Counted from the axes array at derive time: 22 rows — MEASURED 22 — agrees with totals.axes. Separation over the 14 model-comparison axes: SEPARATED 1 · TIE 2 · UNTESTED 11. A TIE is not a win; UNTESTED is not a win; a facts run has no leader. Living stamp: SIGNED (did:web:csoai.org#board-attestation-1). Board data: CC-BY-4.0.
Related MCP server: Trust Chain MCP
What a stranger can verify in four curls
# 1. the lid — the one sentence the board is allowed to say about itself
curl -s https://councilof.ai/api/gspc | python3 -c 'import sys,json; print(json.load(sys.stdin)["totals"]["lid"])'
# 2. the signed public root — Merkle root, leaf count, timestamp (card_count MUST equal len(card_sha256))
curl -s https://councilof.ai/root.json | python3 -c 'import sys,json; r=json.load(sys.stdin); print(r["merkle_root"], r["card_count"], len(r["card_sha256"]), r["as_of"])'
# 3. pin the card key from the DID document — never trust the key a card ships with
curl -s https://csoai.org/.well-known/did.json | python3 -c 'import sys,json,base64; k=[v for v in json.load(sys.stdin)["verificationMethod"] if v["id"].endswith("#card-attestation-1")][0]["publicKeyJwk"]["x"]; print(base64.urlsafe_b64decode(k+"="*(-len(k)%4)).hex())'
# 4. verify any card against that pinned key — three states only: VALID · INVALID · UNCHECKABLE
pipx run --spec 'csoai-gspc[verify]' csoai-gspc verify "$(curl -s https://councilof.ai/signed/card_index.json | python3 -c 'import sys,json; print(json.load(sys.stdin)["cards"][0]["card"])')"The integrity stack
layer | live now | where |
1 · Ed25519-signed measurement cards | 335 cards ( | |
2 · Signed Merkle public root |
| |
3 · Transparency-log witness | Rekor WITNESSED · OpenTimestamps | |
4 · Corrections ledger | 47 entries · latest | |
Living board stamp | SIGNED under | |
Third-party Hub cells | 1119 cells: MEASURED 1119 · UNMEASURED 0 · complete read: True (as_of | |
Keys (DID) |
| |
A2A agent card · x402 manifest |
|
Four populations appear above on purpose and are never reconciled here: the signed-card index (335 via /signed/card_index.json), the living /api/cards registry (336), the public-root leaf count (168 via /root.json), and the Hub cells (live GET /api/hub-cards → .counts; currently 1119/1119/0). Quote each with its URL. Ceremony: card verify ≠ root inclusion — signed-index/root identifier overlap = 0; never sell “335 in the root.”
Buyers (the one number): distinct_nonself_payers = 1 all-time · 1 in 30 d · 1 settlements · status MEASURED — read from /api/revenue. Published because a measurement body that hides its own zero has no standing to publish anyone else's.
Install the readers
pip install csoai-gspc # 0.2.20260907 — board, axis, verify, root, snapshot
npx csoai-gspc-mcp # 0.2.1 — stdio MCP server over the same endpointsProducts
product | what you get | door (live status at derive time) |
| Commission a signed card (request-attestation) | |
| Evidence bundle mapped to an obligation |
|
| EU AI Act pack (Article 50 / 53 transparency) |
|
| SWIFT/bank census evidence pack |
|
| XRPL asset evidence card (per request) | |
| Signed data feed (assembly + cadence) |
|
| Provider document diff feed | |
| Receipts batch (historical measurement leaves) | |
| Article 50 transparency marking evidence (per asset) |
9 products read from docs/product/_INDEX.json (as_of 2026-09-06T06:00:18Z). A 402 means the door is metered by x402 and the amount appears only in that 402 challenge — never here, never on the board. Verification of every artefact is free.
Where the board is published
surface | what lands there | read back at derive time | carries the live root |
Hugging Face dataset |
| as_of | yes |
Hugging Face Space | the same | runtime | n/a |
Kaggle dataset | a new dataset version per changed fingerprint; the subtitle carries | HTTP 200 · latest ISO timestamp on the listing page | no — behind |
GitHub mirror | the snapshot files on | as_of | yes |
Zenodo | a new version under the concept DOI, | 1 versions · latest | yes |
PyPI |
| 0.2.20260907 · uploaded 2026-09-07T15:14:39 · Apache-2.0 | n/a |
npm | stdio MCP server over the same endpoints (published by hand — the account is WebAuthn, so the daily spray cannot push here) | 0.2.1 · published 2026-09-04T05:55:01.892Z · Apache-2.0 | n/a |
Pushed by scripts/spray/gspc-spray.py (daily, idempotent by as_of and fingerprint). The live root as_of at derive time was 2026-09-07T12:30:34Z; a surface that lags is shown lagging, not reconciled. Board data is CC-BY-4.0; the reader packages are Apache-2.0 / Apache-2.0.
Hosting and deploy
Host | Cloudflare Pages project | Deploy |
councilof.ai / www |
| GitHub Actions |
csoai.org |
| Wrangler ( |
Vercel is not the live host. The leftover Vercel Git links (csoai-v2-app, councilof-ai-src) were disconnected and those Vercel projects deleted on 31 Aug 2026.
Build (this repo):
npm run build:client
bash scripts/prerender-run.sh --dist dist/client --wait 900 --min 350
# GHA deploy.yml ships dist/client to Cloudflare PagesDo not run npx vite build from the repo root (it picks up a dead src/). Do not vercel deploy this site.
Agents — paid artefacts (x402)
The board and verification stay free. Metered artefacts (issuance, evidence assembly, signed feeds) are on the x402 rail. Amounts live only in the HTTP 402 challenge — this README does not invent a price. A grade is never sold.
Catalog: https://councilof.ai/api/x402
MCP: https://councilof.ai/mcp (
commission_cardand the other paid tools return a 402 asstructuredContentuntil paid)PayAPI Market (discovery only — buyers pay the estate wallet, not PayAPI): https://payapi.market/api/council-of-ai-gspc-eu-evidence-feed
{"mcpServers":{"payapi":{"url":"https://payapi.market/mcp"}}}Documentation
What we never do
Certify AI systems or issue compliance badges
Sell ratings, ranking position, or early sight of grades
Remediate or recommend fixes in exchange for fees
Take money in either direction from anything we rank
Surfaces
Surface | Purpose |
Measurement body — signed credentials, verify, scoreboard | |
Public site / DID apex | |
MEOK OS — yours, on your keys |
License
MIT © CSOAI-ORG
Available Tools
12 toolsart50_marking_evidenceAInspect
PAID (x402 or CSOAI LTD invoice). Article 50 marking-evidence pack via https://councilof.ai/api/art50/marking-evidence: is a machine-readable mark DETECTABLE in these bytes right now (C2PA manifest store, assertion hashes, hard binding, claim signature; IPTC digitalSourceType), beside the verbatim Art 50(2) excerpt hash and the Art 99(4) ceiling. Watermarks are UNCHECKABLE where no public detector exists and the pack says so. Point-in-time detection — never a conformity opinion, never a compliance word of any kind. preview=true is free and returns the same measurement unsigned. Without x_payment the tool returns the 402 challenge. If the route is not deployed on this origin the tool says NOT_DEPLOYED rather than inventing a result.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public http(s) URL of the generative output to measure (≤20 MiB). | |
| 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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does so thoroughly. It discloses the paid nature, the 402 challenge flow, preview behavior, NOT_DEPLOYED behavior, the uncheckability of watermarks without public detectors, and the point-in-time scope. This goes well beyond a generic call description.
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, with the critical PAID status and payment flow front-loaded. Every sentence contributes behavioral or semantic detail rather than padding. It loses a point for a slightly awkward run-on opening that mixes the endpoint, the pack definition, and evidence components into one long sentence.
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?
Despite having no output schema and no annotations, the description explains the return contents, the free preview return, the 402 failure mode, the NOT_DEPLOYED failure mode, and the boundaries of interpretation. For a complex paid measurement tool with five parameters, this is unusually complete and leaves little ambiguity about expected behavior.
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 already covers all five parameters with 100% description coverage, establishing a baseline of 3. The description adds meaningful context on top: x_payment comes from signing against accepts[] from the prior 402, preview=true returns the same measurement unsigned, and manifest_b64 relates to a detached C2PA manifest store. This enriched context helps an agent select and format parameters correctly.
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 the tool returns an 'Article 50 marking-evidence pack' that measures whether a machine-readable mark is detectable in supplied bytes, and lists the evidence components. It names the exact endpoint and distinguishes its scope from a conformity or compliance opinion. However, the phrasing is more noun-like than an explicit verb+resource statement, and it does not directly differentiate itself from sibling evidence tools like rwa_evidence.
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 explains the payment workflow: it is paid via x402 or invoice, preview=true is free, omitting x_payment yields the 402 challenge, and an undeployed route returns NOT_DEPLOYED. It also states strong when-not conditions: the result is point-in-time detection and 'never a conformity opinion' or compliance statement. It does not, however, name sibling tools or say when to prefer this over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
board_totalsAInspect
Live GSPC board totals from https://councilof.ai/api/gspc. Returns the slot count and the measured count as two labelled numbers WITH their kind — a slot is a declared position on the board, a measurement is a real run behind it; the two are never summed and never swapped — plus as_of dates for the board and for this fetch. We measure, never certify. If the board cannot be fetched the answer is a distinct UNREACHABLE state: no cached number is ever presented as live.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It explains that data is live from the API, never cached or presented as live, that the two counts are never summed or swapped, and that a fetch failure yields a distinct UNREACHABLE state. This is unusually rich and explicit.
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 core purpose, and each sentence conveys necessary semantic, failure, or freshness information. There is no filler; every clause supports correct invocation and interpretation.
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 no output schema or annotations, the description fully compensates by covering return values, label meanings, freshness dates, and error behavior. An agent has enough information to invoke this tool and interpret its result without ambiguity.
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 takes zero parameters, and the empty input schema with additionalProperties: false fully documents this. The description adds no parameter-level detail because none is needed; the 0-parameter baseline of 4 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?
Clearly identifies the resource ('Live GSPC board totals'), the source endpoint, and the exact return values (slot count, measured count, as_of dates). The detailed slot/measurement distinction and UNREACHABLE state make the tool's role unambiguous relative to 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?
The description implies this tool is for live measured board totals, but it never explicitly states when to prefer it over siblings or when not to use it. The only indirect exclusion is 'never certify,' leaving the agent to infer usage from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commission_cardAInspect
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly: it discloses the paid nature, conditional 402/challenge response, resurfacing of existing measurement cards, and the guarantee that payment never mints a MEASURED cell. This goes well beyond the basic mutating behavior implied by 'commission'.
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 efficient, leading with the most important fact (PAID x402) and then covering purpose, conditional behavior, exclusions, and verification in a few sentences. Every sentence carries information needed to invoke the tool correctly.
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, no-output-schema tool, the description supplies the full call pattern: omit x_payment to receive the 402 challenge, and include it to commission. It also clarifies edge-case semantics around fresh_run and measurement, leaving no critical gap for an agent to guess.
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 of 3 applies; the schema already documents subject, axis, and x_payment. The description adds behavioral context about challenge retrieval and preview, but does not add meaningful parameter-level semantics beyond what the input schema states.
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 and resource: commission one signed card-v0 receipt for a subject via a specific endpoint. It also explicitly distinguishes itself from certification and verification, so an agent can tell it apart from sibling tools like 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?
It clearly explains the x402 payment flow, including what happens when x_payment is omitted, and states exclusions ('never a rank, a grade or a certificate') and that verification stays free. It does not name a specific sibling tool to switch to, but the context is clear enough for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_axisAInspect
One axis row from the live GSPC board at https://councilof.ai/api/gspc: n, accuracy, interval, MEASURED or UNMEASURED status, family, 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does meaningful work: it explains that an unmeasured axis is a first-class answer, never an error and never a zero, and that an axis row is never a certification. This prevents likely misinterpretations. It does not discuss errors, auth, or rate limits, but the core behavioral quirks of this tool are disclosed.
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 dense sentences, each earning its place: the first defines the returned object and source URL, the second clarifies the unmeasured-axis semantic, and the third rules out certification. It is front-loaded with the most important information and contains 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?
For a simple single-parameter getter with no output schema, the description is largely complete: it names the source, lists the returned fields, and explains the key special case (unmeasured axes). The unknown-name behavior lives in the schema description, which is acceptable. Minor gaps include no explicit response envelope and no relationship to sibling tools, but these are not critical for correct invocation.
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 schema already fully documents the single required 'axis' parameter, including case-insensitivity and the unknown-name fallback. The main description adds nothing about the parameter itself, only about the shape and semantics of the returned row, so the baseline of 3 is appropriate.
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 the resource ('one axis row from the live GSPC board') and lists the fields returned, making the tool's purpose understandable. However, it is a noun phrase rather than an explicit verbed statement like 'Retrieves...', and it does not directly contrast with sibling tools such as get_card or board_totals.
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 no explicit guidance on when to use get_axis versus alternatives like get_card, board_totals, or verify_inclusion. It implies usage by describing the output, but it never states a selection condition, exclusions, or when another sibling would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cardAInspect
GET one public-root card-v0 leaf by sha256 (64 hex) from https://councilof.ai/cards/{sha16}.json. UNMEASURED cells stay visible. Three states: VALID (fetched), INVALID (not a leaf of the live root), UNCHECKABLE (fetch failed). Not a GSPC measurement-card.
| Name | Required | Description | Default |
|---|---|---|---|
| sha256 | Yes | 64-char hex payload SHA-256 of the card-v0 leaf. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the GET method, endpoint, the effect that UNMEASURED cells stay visible, and the three possible result states. It does not mention auth or rate limits, but for a public read operation the disclosed behavior is solid.
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 short dense sentences front-load the core operation and result states, with no filler. Every sentence contributes information needed to invoke or interpret the tool.
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 with no output schema, the description covers input format, endpoint, and return classification. The only notable gap is that '{sha16}' in the URL template is not explicitly defined as a truncation or prefix of the provided sha256 hash.
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 schema already documents the sha256 parameter. The description adds the 64-hex constraint and the URL template, but it does not significantly expand on 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 names the HTTP verb and resource precisely ('GET one public-root card-v0 leaf by sha256'), gives the exact endpoint template, and explicitly distinguishes itself from a GSPC measurement-card. This is enough for an agent to separate it from sibling tools like 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?
The intended use is implied: fetch a single card leaf and classify it as VALID, INVALID, or UNCHECKABLE. However, there is no explicit statement of when to choose this tool over alternatives such as verify_card, verify_inclusion, or list_cards, nor any when-not conditions beyond the brief 'Not a GSPC measurement-card' note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rootAInspect
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 | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well. It discloses permissionless access, enumerates the three possible result states (VALID, UNREACHABLE, UNCHECKABLE), and adds a meaningful non-obvious fact: the result is never a certificate.
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 with the core action and URL. Each sentence adds distinct value, though 'UNMEASURED notes' and 'GSPC' are used without explanation, slightly reducing accessibility.
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 parameterless GET tool with no output schema and no annotations, the description is remarkably complete: it gives the endpoint, returned fields, possible states, and a critical exclusion. An agent has enough information to invoke the tool and interpret its result without further documentation.
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 no parameter semantics to document. The description instead clarifies the fixed endpoint and return shape, which fully compensates for the empty schema. This matches the baseline for a parameterless tool.
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 (https://councilof.ai/root.json), and lists the exact returned fields (merkle_root, card_count, as_of, UNMEASURED notes). It also clarifies what this tool is not ('Separate from GSPC' and 'Never a certificate'), helping distinguish it from related concepts.
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 purpose clear—fetch the permissionless public-root—so when to use it is implied. However, it does not explicitly state when to prefer this tool over alternatives or mention any sibling tools by name; 'Separate from GSPC' hints at distinction but does not provide concrete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cardsAInspect
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.
| 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and handles it well: it explicitly says the two counts are 'never reconciled', that the tool 'shows the disagreement rather than picking one', and that the limit only affects listed rows. It does not discuss auth, rate limits, or errors, but those are not critical for a read-style listing tool and no contradiction exists.
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 every sentence earns its place, especially the crucial no-reconciliation detail and the filter behavior. The first sentence is dense and parenthetical-heavy, making it slightly harder to parse than a cleaner front-loaded statement, which prevents a 5.
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 two-parameter tool with no output schema, the description tells the agent what the output contains (two labelled counts, recent rows), how filters shape the listing, and what happens when counts diverge. It does not specify the exact response shape or error cases, but those are not necessary for the agent to invoke and interpret 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 description coverage is 100%, and the schema already documents axis case-insensitivity, limit bounds, the default, and the fact that counts are always reported in full. The description merely names the two filters, adding no new semantic 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 identifies a specific resource (the signed-card index and card store endpoint) and explains that the tool reports two labelled counts plus optional recent rows. It does not open with a verb and relies on the name for the listing action, and it does not explicitly differentiate from siblings like get_card or verify_card, so it is not a 5.
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 context: use this tool to see the index-declared count versus the store-reported count without reconciliation, and to list recent rows with optional filters. It even states what happens when the counts disagree, but it never names alternatives or says when not to use it, so it falls short of explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
receipts_batchAInspect
PAID (x402 or CSOAI LTD invoice). A historical batch of the estate's measurement receipts via https://councilof.ai/api/receipts/batch: every signed card-v0 leaf whose as_of falls in [from,to] (≤200), each with its Merkle inclusion path and the public root(s) that carried it, plus the root index for the window and one signed manifest card citing the batch sha256. preview=true is free and returns count, span, root count and the sha256 of the exact bytes the paid call returns. Recent leaves are free at /root.json, /cards/ and /api/proof?sha= — the batch sells assembly across history, never a conclusion. No settlement-receipt stream exists (/api/receipts/latest is UNPUBLISHED) and this tool never claims one. Without x_payment the tool returns the 402 challenge.
| 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the paid nature, the preview=true free behavior, the ≤200 leaf cap, the response contents, the signed manifest card, the 402 challenge semantics, and explicitly denies claiming a settlement-receipt stream. This is rich behavioral disclosure beyond parameter names.
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 front-loaded with the most important fact (paid/402). Every sentence adds information; however it is somewhat lengthy and could be trimmed, but it remains efficient given the complexity of the payment flow and disclaimer.
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 a financial/paid API with no output schema, the description is remarkably complete: it explains what is returned, the limit, the free alternatives, the payment handshake, and what the tool does not do. An agent can invoke this tool correctly without needing additional context.
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 schema already documents all four parameters. The description adds useful context by explaining preview=true's free return fields and how x_payment relates to the prior 402's accepts[], but it does not need to compensate for missing schema coverage. It earns a baseline 3 with slight added value.
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+resource: it retrieves a historical batch of measurement receipts from the councilof.ai API. It clearly differentiates from siblings by naming free alternatives (/root.json, /cards/, /api/proof?sha=) and the absence of a settlement-receipt stream, so an agent can tell it apart from the narrower verification/list 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?
It gives explicit when-to-use context: use for historical assembly across a date window, and explicitly says free recent leaves are available via listed endpoints. It also warns when not to use it: no settlement-receipt stream exists and /api/receipts/latest is unpublished, preventing misuse. It also explains the 402 payment challenge flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rwa_evidenceAInspect
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses the payment flow, signed/unsigned states, hashing of fetches, deterministic snapshots at fetched_at, the three-way toml check behavior, and the NOT_DEPLOYED edge case.
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?
Information is front-loaded with the PAID qualifier and core purpose, and every sentence contributes meaningful detail. However, the content is packed into dense run-on sentences that could be easier to scan with structured bullets.
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?
Adequately complete for a complex paid tool with no output schema: it names the endpoint, the returned state components, free alternatives, payment behavior, preview behavior, and edge-case outputs. An agent has what it 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?
Schema coverage is 100%, so the schema already documents asset, preview, and x_payment. The description mostly restates these semantics rather than adding new parameter-level detail, though it does reinforce the payment challenge flow.
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 exactly what the tool produces: a per-request signed evidence card of one XRPL asset's deterministic on-ledger state, and names the concrete endpoint. The emphasis on evidence of state versus verification/inclusion makes it distinguishable from sibling tools like verify_card and verify_inclusion.
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 clear operational guidance: preview=true is free, omitting x_payment triggers the 402 challenge, and the tool is explicitly not a rating, guarantee, or conformity mark. It does not name sibling alternatives explicitly, but the paid/evidence-card context strongly implies when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_cardAInspect
Verify a signed gspc.measurement-card under the published rule (https://councilof.ai/signed/HOW-TO-VERIFY.md): recompute the id from the canonical body bytes, then check the Ed25519 signature under the PINNED key published at did:web:csoai.org#card-attestation-1. A card that carries its own key proves only that the file is self-consistent — anyone can alter a body and sign it with a key they just generated — so a signer other than the published key is reported INVALID. Three verdicts, never two: VALID, INVALID (with the reason), or UNCHECKABLE when the check could not be completed — 'could not check' is a different claim from 'forged'. Accepts the card as a JSON object, a JSON string, or a councilof.ai / csoai.org URL. Never a certification.
| Name | Required | Description | Default |
|---|---|---|---|
| card | Yes | The signed card: an object, a JSON string, or a councilof.ai / csoai.org URL to one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it discloses the verification algorithm, the pinned key source, why self-carried keys are treated as INVALID, the exact three-verdict model, and the distinction between 'could not check' and 'forged'. This is far more transparent than a typical one-line tool description.
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 longer than average but every sentence earns its place: rule link, key ownership, signing caveat, verdict set, input formats, and certification exclusion. It is front-loaded with the core action and resource, and the additional detail is dense rather than padded.
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 no annotations and no output schema, the description is unusually complete: it defines the input forms, the acceptance rule, the exact verdicts, and the failure semantics. The only minor gap is that it does not specify the exact output envelope or field names for the verdict result, though the verdict vocabulary itself is clear.
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% for the single parameter, so the baseline is 3. The description adds meaningful semantics: the card must be signed, a self-provided key is not sufficient, and the input can be a JSON object, JSON string, or councilof.ai/csoai.org URL. It reinforces the schema without introducing conflicts.
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: 'Verify a signed gspc.measurement-card' under a published rule. It goes further by naming the exact mechanism (recompute id, check Ed25519 signature under the pinned key), which distinguishes it from siblings like verify_inclusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is appropriate: verifying a signed measurement-card under a specific published rule. It explicitly excludes certifications ('Never a certification'), but it does not name sibling alternatives or state when not to use it beyond that single exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_inclusionAInspect
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior, and it does so thoroughly. It names the HTTP endpoint, defines the three possible outcomes, flags the unreachable-endpoint case, and explicitly warns against overclaiming Ed25519 or grading, which are important behavioral caveats.
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 tightly packed sentences convey the endpoint, input, output states, and important exclusions with no filler. The most important action and endpoint are front-loaded, and every sentence adds distinct value.
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 a simple one-parameter schema, no output schema, and no annotations, the description is fully self-sufficient. It covers what the tool does, how it behaves on unreachable endpoints, what it does not verify, and what the possible return states are, which is all an agent needs to invoke 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 description coverage is 100%, and the single parameter sha256 is already documented as a 64-char hex digest. The description reinforces that this value is checked against the merkle proof endpoint, but it does not add substantial meaning beyond what the schema already states.
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 ('Check'), a specific resource (sha256 against the live public-root merkle), and the exact retrieval path (GET /api/proof?sha=). It also enumerates the three distinct result states, making the tool's function unmistakable and distinct from siblings like get_root or 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?
The description clearly indicates what this tool is for and what it is not for: it only checks merkle inclusion, never produces a grade, and does not assert Ed25519 validity unless separately checked. It provides useful when-not-to-use guidance, though it does not explicitly name alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x402_trustAInspect
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 |
|---|---|---|
| as_of | No | |
| counts | No | |
| headline | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently states what is returned (counts by doctrine) and what is not (host details), and clarifies it is not certification. It does not mention side effects, but as a GET it is read-only by implication.
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 but dense sentence that conveys the essential information without unnecessary words. It is well-structured with dashes separating key points, though it includes some domain-specific jargon that might require context.
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 description adequately explains the output (counts by doctrine) and provides context (measurement vs certification), but it does not specify the exact output format. Given the simplicity of the tool and the presence of an output schema (not shown), this is acceptable.
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 the schema is empty (100% coverage). No parameter explanations are needed, so the baseline score of 3 is appropriate; the description adds no extra parameter information because there are no parameters.
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 explicitly states it is a GET for the latest x402 catalog trust snapshot, with counts of correct 402 challenges vs phantom resources. It clearly distinguishes this from certification, making the tool's 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 implies when to use it (for measurement, never certification) and hints at constraints (host details withheld), but it does not explicitly name sibling tools or state scenarios where alternatives should be chosen. This is a minor gap.
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.
8 tool updates
v0.1.0-evidence- Added
art50_marking_evidence - Added
commission_card - Added
get_card - Added
get_root - Added
receipts_batch - Added
rwa_evidence - Added
verify_inclusion - Added
x402_trust
4 tool updates
v0.1.1- First observed
board_totals - First observed
get_axis - First observed
list_cards - First observed
verify_card
TDQS
Scored across 12 tools
Most tools target distinct resources/actions (root fetch, card fetch, inclusion proof, card signature verification, board totals, single axis, index listing), and descriptions explicitly distinguish states and boundaries. However the term 'card' is overloaded across card-v0 leaves, signed measurement-cards, and commissioned receipts, so get_card/verify_card/list_cards/commission_card can blur if read quickly. The paid evidence tools (art50, rwa, receipts_batch, commission_card) are differentiated by domain but share the x402 payment framing.
Roughly half the tools follow a clean verb_noun snake_case pattern (get_root, get_card, verify_inclusion, get_axis, list_cards, verify_card), but the rest are bare noun phrases (x402_trust, art50_marking_evidence, rwa_evidence, receipts_batch, board_totals). All snake_case and readable, yet two mixed conventions coexist. No truly chaotic naming, just an inconsistent verb-vs-noun approach.
12 tools sits comfortably in the well-scoped 3-15 band. The count is slightly pushed by the server bundling several sub-services (merkle/root infra, GSPC board, x402 trust, Art 50, XRPL RWA, receipts), so it feels broad rather than tight, but each tool maps to a real operation. No padding or extreme mismatch.
Core lifecycle is covered: read root, read a leaf, verify inclusion, list the index, verify signed cards, get board totals and a single axis, plus paid attestation/evidence generation with free previews and explicit NOT_DEPLOYED/UNCHECKABLE fallbacks. Minor gaps exist (no 'list_axes' to enumerate all axis rows, x402_trust yields counts only, no subject search), but these are workable around. Surface is substantially complete for a measurement/attestation service.
Maintenance
Related MCP Connectors
Register every AI agent, log every action, prove it. EU AI Act compliance built in.
Runtime AI governance: decision gates, human approval, hash-chained audit, compliance mapping.
AI governance MCP server for EU AI Act compliance and jurisdiction verification
Pre-execution governance for AI agents. Deterministic PASS/FAIL/REVIEW verdicts, replayable proof.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides automated EU AI Act compliance tools, including risk classification, role determination, transparency disclosures, content watermarking, deepfake labeling, and security threat detection.1633Apache 2.0
- AlicenseBqualityBmaintenanceManages trust chains and attestations with built-in EU AI Act compliance.57 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables EU AI Act compliance for AI agent systems by providing risk classification, audit trails, gap analysis, and evidence package generation.36 npmMIT
- AlicenseNot gradedqualityBmaintenanceProvides AI content watermarking and C2PA compliance for EU AI Act Article 50, enabling detection, verification, and batch processing of authenticated content.1 npmMIT