{"protocol_version":"2024-11-05","server":{"name":"spoc","title":"SPOC — Witnessed AI harness passports","version":"1.27.0"},"transport":{"kind":"http+sse","rpc_endpoint":"/mcp/rpc","events_endpoint":"/mcp/events"},"capabilities":{"tools":{"list_changed":false},"resources":null,"prompts":null,"logging":null},"tools":[{"name":"spoc.harness.issue","title":"Issue a harness passport","description":"Mint a signed harness passport SPOC will witness. Bearer auth (spk_live_...) upgrades the tier to principal-linked; otherwise anonymous. Returns the envelope, envelope signature, signing key version, expiry, and a one-time reporting_key for HMAC-authenticating reported events.","inputSchema":{"type":"object","required":["scopes"],"additionalProperties":false,"properties":{"scopes":{"type":"array","items":{"type":"string","minLength":1,"maxLength":120},"minItems":1,"maxItems":64,"description":"Scopes the harness may exercise (e.g. tools:web-search)."},"ttl_seconds":{"type":"integer","minimum":1,"maximum":2592000,"description":"Requested TTL in seconds. Capped by trust tier."},"task_id":{"type":["string","null"],"description":"Optional task id to bind the passport to.","maxLength":120},"trust_tier":{"type":"string","enum":["anonymous","attested","principal-linked"],"description":"Requested tier. Ignored if it conflicts with the presented auth (bearer → principal-linked, X-Attested-Publisher → attested, otherwise anonymous)."}}}},{"name":"spoc.harness.test","title":"Issue an anonymous test harness","description":"Anonymous test harness with the fixed scope test:echo and a 300s TTL. No auth required, tight rate limit (1 per 10 seconds per IP). Ideal for a hello-world before wiring up the full flow.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}}},{"name":"spoc.harness.report","title":"Report a witnessed event on a harness","description":"Report a single event on an issued harness. Authenticated with an HMAC-SHA256 over harness_id || '\\n' || offset || '\\n' || event_type || '\\n' || canonical_json(payload), keyed by the reporting_key returned at issuance. Offsets must be strictly monotonic starting at 0.","inputSchema":{"type":"object","required":["harness_id","offset","event_type","payload","hmac_signature"],"additionalProperties":false,"properties":{"harness_id":{"type":"string","minLength":1,"maxLength":120},"offset":{"type":"integer","minimum":0},"event_type":{"type":"string","minLength":1,"maxLength":64},"payload":{},"hmac_signature":{"type":"string","description":"64 hex chars (HMAC-SHA256 output).","pattern":"^[0-9a-fA-F]{64}$"}}}},{"name":"spoc.harness.complete","title":"Complete an issued harness","description":"Mark a harness as completed. Same HMAC scheme as spoc.harness.report but with offset = -1 and event_type = 'complete'. Payload must be {final_status: 'success' | 'failed'}.","inputSchema":{"type":"object","required":["harness_id","final_status","hmac_signature"],"additionalProperties":false,"properties":{"harness_id":{"type":"string","minLength":1,"maxLength":120},"final_status":{"type":"string","enum":["success","failed"]},"hmac_signature":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}}},{"name":"spoc.harness.get","title":"Fetch public harness metadata","description":"Return the public metadata for a harness by id. Principal-linked passports have their handle redacted for non-owning callers.","inputSchema":{"type":"object","required":["harness_id"],"additionalProperties":false,"properties":{"harness_id":{"type":"string","minLength":1,"maxLength":120}}}},{"name":"spoc.harness.verify","title":"Verify an envelope + signature against SPOC's signing key","description":"Server-side verify. Takes a passport envelope (object or its canonical JSON string), the hex signature, and the signing_key_version, and returns whether the signature is valid under that key version.","inputSchema":{"type":"object","required":["envelope","signature","signing_key_version"],"additionalProperties":false,"properties":{"envelope":{"description":"Envelope object or canonical JSON string."},"signature":{"type":"string","description":"Hex-encoded Ed25519 signature.","pattern":"^[0-9a-fA-F]+$"},"signing_key_version":{"type":"integer","minimum":1}}}},{"name":"spoc.task.get","title":"Fetch public task metadata","description":"Return public task metadata by id. Non-public tasks return only the id, shape, execution_mode and status; prompt and result are redacted. Every task has a browsable record at /task/<id>.","inputSchema":{"type":"object","required":["task_id"],"additionalProperties":false,"properties":{"task_id":{"type":"string","minLength":1,"maxLength":120}}}}],"documentation":{"docs":"/docs/api","openapi":"/openapi.json","llms_txt":"/llms.txt","ai_plugin_manifest":"/.well-known/ai-plugin.json","root_key":"/.well-known/spoc-harness-key.json"}}