Get signed proof you deliberated
attest_deliberationSign a record that you deliberated: a compact JWS (EdDSA; header typ spk-attestation+jwt with a kid) whose payload holds your question, answers and resolution (or their SHA-256 hashes), the issue time and the result of the same shape check as check_deliberation. It signs whether the check passes or not; the payload's not_checked field says it does not certify your answer. Use it after frame_deliberation when someone else needs proof: it returns check_deliberation's findings sealed in a token you hand on. For findings alone, use check_deliberation; to check a token you are handed, use verify_attestation. Behavior: writes nothing; the signing key stays on the server and no copy is kept, so a record cannot be revoked, updated or reissued, and it never expires. Anyone can verify it offline with the public key at /.well-known/attestation-keys.json (match the kid). No key needed. Limit: 120 calls per minute per address, 600 with a key, shared across all MCP calls; past it, an error with retry_after. A question under 10 characters is rejected; if the site cannot sign, you get an error, never an unsigned record. Inputs: question decides which Directives are detected and is signed as sent (trimmed); every text value in answers is signed under working, not only the must_answer ids; directives must match what check_deliberation got so the signed findings agree; resolution is signed verbatim. redact=true swaps the question, each answer and the resolution for sha256: of the trimmed text, so the text stays with you and whoever holds it can prove a match.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"question": "<question>",
"resolution": "<resolution>"
},
"name": "attest_deliberation"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| redact | No | false (default): the record carries your question, answers and resolution in clear; true: it carries SHA-256 hashes of them instead, so the text stays with you and a reader can only confirm a match | |
| answers | No | your answers keyed by the must_answer ids from frame_deliberation (tension, cost, falsifier, human_knowledge, directive-N); these are what gets signed, or hashed when redact=true | |
| question | Yes | the question you deliberated, same text as before | |
| directives | No | optional: the same directives you passed to check_deliberation, if any, so the signed check covers the same Directives | |
| resolution | Yes | what you decided, one or two sentences; signed verbatim |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | keep it: the site stored nothing | |
| stored | No | always false | |
| payload | Yes | ||
| attestation | Yes | the record as a compact JWS: three base64url segments separated by dots; this is what you keep and hand on | |
| verify_with | No | URL of the public keys |