CALL SENTINEL
Three doors, one swarm. Any MCP client, any A2A agent, any script with an x402-aware fetch. Verdicts cost 1 CCD; discovery, badge checks, audit and track lookups are free.
01 · MCP
Streamable HTTP, stateless. Add the server to Claude Desktop, Claude Code or any MCP client; discovery is free, verdicts are paid when a paywall is configured.
{
"mcpServers": {
"sentinel": {
"type": "http",
"url": "https://<sentinel-host>/mcp"
}
}
}Before trading any Solana token, call sentinel_verdict with its mint. Treat DANGER or RUGGED as a hard stop. Quote the risk score, the confidence and the top reason to the user, and link the audit record. Check sentinel_track once per session to know how well the judge has been calibrated lately.
02 · Tools
Full swarm verdict: band, risk, confidence, headline, decisive fact, action, reasons, clean signals, what would change it, scorecard, advocate and rebuttal, vetoes, findings, consensus, flags, evidence incl. money flow, attestation (digest, Concordium tx, ML-DSA-65 signature). Paid over x402 when the server has a paywall. Streams progress notifications.
The nine agents: roles, registry token ids, badge addresses, badge-check URLs, Agent Card URLs.
Verify any Concordium agent badge or list an account's badges via the Agent Registry.
Past verdicts with their on-chain audit records and outcomes.
The track record: Brier, skill vs base rate, log score, reliability bins, per specialist; graded verdicts with their grade anchors.
03 · A2A
A2A v1.0 over JSON-RPC with SSE streaming. The Agent Card at /.well-known/agent-card.json is the one pinned in the Concordium Agent Registry and carries the badge extension.
POST /a2a
A2A-Version: 1.0
{"jsonrpc":"2.0","id":1,"method":"SendStreamingMessage","params":{"message":{"messageId":"m1","role":"ROLE_USER","parts":[{"data":{"mint":"Bo9jh3wsmcC2AjakLWzNmKJ3SgtZmXEcSaW7L2FAvUsU"}}]}}}
→ task · statusUpdate (one per specialist) · artifactUpdate { verdict } · statusUpdate COMPLETED04 · x402
Pay per verdict in CCD on Concordium testnet: 1 CCD, paid to <owner account>. The 402 response carries the requirements; the client signs a sponsored transfer, our facilitator pays the fee and submits, finality in about ten seconds, verdict in the 200. The paying agent never needs CCD for fees, only for the price.
POST /x402/verdict {"mint":"<mint>"}
→ 402 · PAYMENT-REQUIRED: base64({ "x402Version": 2, "accepts": [{ "scheme": "exact", "network": "ccd:testnet",
"amount": "1000000", "asset": "CCD", "payTo": "<owner accou…", "extra": { "feePayer": "<sponsor>" } }] })
POST /x402/verdict + PAYMENT-SIGNATURE: base64({ signedTransaction, sender })
→ 200 · PAYMENT-RESPONSE: base64({ success, transaction }) · verdict JSON05 · Audit trail
Each verdict is canonicalised and hashed (sha256 over chain, mint, snapshot time, evidence, verdict). The digest, the subject, the band, the score and the agents' registry ids are appended to the sentinel_audit contract on Concordium testnet. The contract has no update and no delete; outcomes are added beside a record with grade, once per horizon. EU AI Act Art. 12 record keeping, readable by anyone on CCDScan.
sentinel_audit.record { digest: [u8;32], chain, subject, verdict, risk_score: u8, agent_ids: [u64], observed_at: u64 } → seq
sentinel_audit.view(seq) → Record · count() · info()
sentinel_audit.grade { seq, horizon: u32, labels, rugged, liquidity_bps: u16, price_bps: u16, observed_at }
(once per horizon; the record itself is never edited)
sentinel_audit.grades(seq) → [Grade]06 · Track record
Every sealed verdict is scored against what the token did at 1h, 24h and 7d. riskScore/100 is read as the forecast P(rug); a rug is liquidity down more than 99%, no trades left, the labels of arXiv:2608.20271, or a pool under 1% of market cap. The report gives the Brier score, the skill against the base rate, the log score, a reliability diagram and the same per specialist, so a calling agent can weigh Sentinel the way Sentinel weighs its own agents. Live at /track, over MCP as sentinel_track, and as JSON at /track.
07 · Verify a verdict
Two independent proofs. On-chain: the stored verdict JSON must hash to the digest in the Concordium record. Offline: the ML-DSA-65 (FIPS 204) signature over sha256(digest ‖ mint ‖ verdict ‖ score ‖ at) with context sentinel.verdict/1, public key at /.well-known/sentinel-keys.json. Post-quantum by design: the chains sign with Ed25519, the proof that a verdict came from Sentinel does not depend on it. Every audit record has a button that runs this check in your browser.