{
  "spec": "rs-tool-call/1",
  "page": "https://www.rightshold.com/mcp-notary",
  "sdk": "https://www.rightshold.com/sdks/rightshold-mcp-notary.cjs",
  "meta_key": "com.rightshold/tool-call",
  "summary": "Notarized tool calls for MCP servers: each tool result carries a receipt its caller can check without trusting the server or Rightshold.",
  "call_record": {
    "canonical_json": "Keys sorted at every level, no whitespace, JSON string escaping; the record is JSON-round-tripped first so undefined fields are dropped.",
    "fields": {
      "spec": "rs-tool-call/1",
      "server": "the server name the receipt carries",
      "tool": "the tool name",
      "arguments": "the arguments object exactly as received ({} when none)",
      "result": "{content, structuredContent?, isError?} exactly as returned, before _meta is added (resultType and _meta are not hashed)",
      "salt": "16+ random bytes as hex, fresh per call"
    },
    "notarized": "Final results only: resultType absent or \"complete\". An input_required result asks the client for more and is not notarized.",
    "call_sha256": "lowercase hex SHA-256 of the canonical call record"
  },
  "issue": {
    "method": "POST",
    "path": "/v1/tool-calls",
    "auth": "api_key",
    "body": {
      "server": "string",
      "tool": "string",
      "call_sha256": "64 hex"
    },
    "sends": "Only the digest, server and tool names. Arguments and results stay on your server."
  },
  "in_the_result": {
    "_meta": {
      "com.rightshold/tool-call": {
        "spec": "rs-tool-call/1",
        "id": "tc_…",
        "call_sha256": "64 hex",
        "salt": "hex",
        "receipt_url": "https://www.rightshold.com/v1/tool-calls/tc_…",
        "verify_url": "https://www.rightshold.com/v1/tool-calls/verify"
      }
    }
  },
  "verify": {
    "offline": "Recompute call_sha256 from the call; check the Ed25519 signature over the canonical receipt with the key from /.well-known/jwks.json; check the commitment at ledger.entry_url.",
    "online": {
      "method": "POST",
      "path": "/v1/tool-calls/verify",
      "auth": "none",
      "body": {
        "id": "tc_…",
        "record": {
          "tool": "…",
          "arguments": {},
          "result": {
            "content": []
          },
          "salt": "…"
        }
      },
      "mcp_tool": "verify_tool_call"
    }
  },
  "proves": "The server presented this exact call record (tool, arguments and result, bound by SHA-256) for notarization at issued_at, and the record has not changed since.",
  "does_not_prove": "That the tool's work was correct, that the server's own systems changed as the result says, or who operates the server.",
  "privacy": "Rightshold receives the digest, the server and tool names. A verify call's record is hashed in memory and never stored.",
  "pricing": "Verifying is free. Each notarized call counts as one write against the account's monthly allowance; Rightshold credits have no cash value during the preview."
}