Show JSON
{
"protocolVersion": "0.3.0",
"name": "Screwtape.ai",
"description": "Verify before the agent pays. Screwtape is a separate check on agent work before a payment goes out: invoices, duplicate invoices and reconciliation, with a signed receipt for your auditor. It also judges any agent output (pass, fail or retry) and flags false consensus across agents. A second check, outside your agent. Screwtape runs as a separate service from your agent, with its own prompt and checks, and it is not paid more when your agent passes. Every verdict comes with a signed receipt you can verify yourself. The receipt proves what was checked, when, and the verdict that was returned. Skills: check_duplicate_invoice (duplicate invoice check before an agent pays; needs a Bearer key), judge (pass/fail/retry verdict on one agent output against your evidence), consensus (false-consensus check across 2 to 16 answers), get_api_key (free key, 10 calls per UTC day, proof of work), buy_pack, publish_receipt. A2A JSON-RPC message/send at https://screwtape.ai/a2a maps to judge (send a duplicate object in the data part to check an invoice). The same skills are on MCP (https://screwtape.ai/mcp) and REST (https://screwtape.ai/openapi.json). Unpaid calls return x402 payment requirements ($0.005 USDC per call on Base or Solana).\n\nPayment required: every skill call, including A2A message/send, needs either a Bearer API key (free: POST https://screwtape.ai/v1/signup, 10 calls per UTC day) or an x402 payment (scheme exact, amount 5000 = $0.005 USDC on Base eip155:8453 or Solana). A call with neither returns HTTP 402 with the x402 requirements.",
"author": "Screwtape.ai",
"wellKnownURI": "https://screwtape.ai/.well-known/agent-card.json",
"url": "https://screwtape.ai/a2a",
"version": "1.2.0",
"provider": {
"organization": "Screwtape.ai",
"url": "https://screwtape.ai/"
},
"documentationUrl": "https://screwtape.ai/docs/",
"iconUrl": "https://screwtape.ai/icon-512.png",
"supportsAuthenticatedExtendedCard": false,
"security": [
{
"bearer": []
},
{
"x402": []
}
],
"securitySchemes": {
"x402": {
"apiKeySecurityScheme": {
"name": "PAYMENT-SIGNATURE",
"location": "header",
"description": "Pay per call instead of using a key: send an x402 v2 PAYMENT-SIGNATURE header (scheme exact, 5000 = $0.005 USDC). A call with no key and no payment returns HTTP 402 with the requirements in the PAYMENT-REQUIRED header."
}
},
"bearer": {
"httpAuthSecurityScheme": {
"scheme": "Bearer",
"description": "Authorization: Bearer with an API key from POST /v1/signup or POST /v1/keys. Email and name are optional. A free key includes 10 calls per UTC day. A single call can instead send an x402 PAYMENT-SIGNATURE of $0.005 USDC on Base or Solana. GET /v1/health, MCP tools/list, and the MCP tool get_api_key do not require a key.",
"bearerFormat": "API key"
}
}
},
"capabilities": {
"streaming": false,
"pushNotifications": false,
"stateTransitionHistory": false,
"extensions": [
{
"uri": "https://screwtape.ai/ext/x402/v1",
"params": {
"asset": "USDC",
"amount": "5000",
"scheme": "exact",
"freeKey": {
"signup": "POST https://screwtape.ai/v1/signup",
"callsPerDay": 10
},
"version": 2,
"networks": [
{
"id": "eip155:8453",
"payTo": "0x028Bb9A57B8C27c22f6B39dd00e7eFF1FB60344B"
},
{
"id": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"payTo": "56cBfPbDrz3DGnGD8xUfkuffYS6qMXqXFfQY3KnE1YpL",
"offered": true,
"payToRole": "owner"
}
],
"protocol": "x402",
"discovery": "https://screwtape.ai/.well-known/x402",
"perCallUsd": "0.005",
"paymentHeader": "PAYMENT-SIGNATURE"
},
"required": false,
"description": "Per-call x402 payment. Details in params."
},
{
"uri": "https://a2a-registry.org/extensions/registry/v1",
"params": {
"payment": {
"model": "freemium",
"rails": [
{
"type": "stablecoin",
"caip2": "eip155:8453",
"token": "USDC",
"scheme": "exact",
"network": "base",
"protocol": "x402",
"contractAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
},
{
"type": "stablecoin",
"caip2": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"token": "USDC",
"scheme": "exact",
"network": "solana",
"protocol": "x402",
"contractAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
}
],
"direction": "inbound",
"protocols": [
"x402"
]
}
},
"required": false,
"description": "Payment discovery: free key tier plus x402 per-call payments."
}
]
},
"defaultInputModes": [
"application/json",
"text/plain"
],
"defaultOutputModes": [
"application/json"
],
"skills": [
{
"id": "check_duplicate_invoice",
"name": "Check an invoice for duplicates before the agent pays",
"description": "Duplicate invoice check before an agent pays, with a signed receipt. Compares the invoice with the ones this API key recorded earlier and judges it like judge. Input: POST /v1/duplicate, the MCP tool check_duplicate_invoice, or A2A message/send with a data part, sending task, agent_output (the invoice JSON) and duplicate {vendor_path, invoice_id_path, amount_path, currency_path?, date_path?, window_days?, store?}. Output: the judge result plus duplicate.status (unique, duplicate, possible_duplicate, replay or not_checked). Needs Authorization: Bearer, because fingerprints are kept per key; only keyed HMAC fingerprints are stored, and only when store is true. Cost: same as judge.",
"tags": [
"invoices",
"duplicates",
"payments",
"validation"
],
"examples": [
"Has this invoice already been paid?",
"Check this vendor invoice for duplicates before I pay it."
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "judge",
"name": "Judge one agent output (pass, fail or retry)",
"description": "Independent pass/fail/retry verdict on one agent output, checked against the evidence and criteria you send. Use it before returning or acting on a draft. Not for web lookup or for comparing several answers (use consensus). Input: POST /v1/judge, the MCP tool judge, or A2A message/send, with task and agent_output plus optional evidence[], criteria[] and retain. Output: verdict, score 0 to 1, reasons, engine, request_id, retention. Cost: free key (10 calls per UTC day) or $0.005 USDC per call via x402 on Base or Solana.",
"tags": [
"judge",
"validation",
"verdict",
"x402"
],
"examples": [
"Check this answer against the evidence before I send it.",
"Is this agent output supported by these sources?"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "consensus",
"name": "False-consensus check across 2 to 16 agent answers",
"description": "False-consensus check: scores agreement across 2 to 16 answers to one task and flags agreement that looks copied or thin. Use it before accepting a majority vote. Not for a single answer, and not proof of correctness: verify consensus_answer with judge. Input: POST /v1/consensus, or MCP tool consensus, with task and answers[{agent_id?, output}]. Output: consensus_answer, agreement_score, false_consensus_risk (low, medium or high), reasons, clusters, engine, request_id. Cost: same as judge, on Base or Solana.",
"tags": [
"consensus",
"false-consensus",
"x402"
],
"examples": [
"Five agents agreed. Is that agreement trustworthy?",
"Score these three answers for false consensus."
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "get_api_key",
"name": "Get a free API key (proof of work, no human approval)",
"description": "Creates a free key (10 calls per UTC day). Use it only when no key exists and you can compute SHA-256 in code. Input: POST /v1/signup, or MCP tool get_api_key, with pow_nonce (SHA-256 of screwtape-signup-v1:<UTC YYYY-MM-DD>:<nonce> must start with 12 zero bits; nonce matches ^[A-Za-z0-9_-]{8,64}$), plus optional email and name (at most 80 characters). Output: api_key (shown once), key metadata, request_id. Limits: 5 keys per IP per hour and per UTC day. Free.",
"tags": [
"signup",
"api-key"
],
"examples": [
"Create a free Screwtape key for this agent."
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "publish_receipt",
"name": "Publish one signed receipt as a Screwtape Verified badge",
"description": "Publish a receipt you own so a public page and badge link to that one verdict. It states that this output got this verdict at this time; it is not a general certification of the agent. Input: receipt_id, optional include_content, label, unpublish. Output: public_url, badge_svg_url, embed_html, embed_markdown. Needs the Bearer key that owns the receipt; no x402. Free. Available on MCP and REST.",
"tags": [
"receipt",
"badge",
"verification"
],
"examples": [
"Publish the receipt for this verdict so I can link to it."
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
}
],
"conformance": true,
"conformance_errors": null,
"homepage": null,
"repository": null,
"license": null,
"pricing": null,
"contact": null,
"id": "591df9dc-b945-46e4-b8b6-e5082873a2e1",
"category": "payments",
"category_secondary": "trust-safety"
}