{"openapi":"3.1.0","info":{"title":"Public record of Michael McArthur (gorfed.net and 4thcltr.com)","version":"1.0.0","description":"Read-only search over the public record of two sites. Everything returned is already public on those sites and carries its source url. No endpoint writes, sends or grants anything, and nothing here drafts, composes or sends an enquiry or any other message on behalf of anyone: to reach Michael, use the contact page that how_to_engage names. The same functions are available over MCP at POST /mcp."},"paths":{"/v1/search":{"get":{"operationId":"searchRecord","summary":"Search the public record (BM25, top 8).","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":300}},{"name":"site","in":"query","required":false,"schema":{"type":"string","enum":["gorfed.net","4thcltr.com"]}}],"responses":{"200":{"description":"Matching entries, best first.","content":{"application/json":{"schema":{"type":"object","required":["retrieved_from","results"],"properties":{"retrieved_from":{"const":"public record"},"results":{"type":"array","maxItems":8,"items":{"type":"object","required":["id","site","kind","title","text","citation","source","references"],"properties":{"id":{"type":"string","description":"Site-qualified chunk id, e.g. gorfed.net:identity:michael."},"site":{"type":"string","enum":["gorfed.net","4thcltr.com"]},"kind":{"type":"string"},"title":{"type":"string"},"text":{"type":"string"},"date":{"type":["string","null"]},"citation":{"type":"string"},"source":{"type":"string","format":"uri","description":"Public page the fact comes from."},"references":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"label":{"type":"string"},"url":{"type":"string","format":"uri","description":"Public page the fact comes from."}},"required":["type","label","url"]}}}}}}}}}},"400":{"description":"Missing or invalid parameter."},"403":{"description":"Origin not allowed."},"413":{"description":"Request larger than 2 KB."},"429":{"description":"Rate limit; see Retry-After."}}}},"/v1/fact/{id}":{"get":{"operationId":"getFact","summary":"One entry by its site-qualified id.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^(gorfed\\.net|4thcltr\\.com):[A-Za-z0-9._:-]{1,64}$"}}],"responses":{"200":{"description":"The entry.","content":{"application/json":{"schema":{"type":"object","required":["retrieved_from","fact"],"properties":{"retrieved_from":{"const":"public record"},"fact":{"type":"object","required":["id","site","kind","title","text","citation","source","references"],"properties":{"id":{"type":"string","description":"Site-qualified chunk id, e.g. gorfed.net:identity:michael."},"site":{"type":"string","enum":["gorfed.net","4thcltr.com"]},"kind":{"type":"string"},"title":{"type":"string"},"text":{"type":"string"},"date":{"type":["string","null"]},"citation":{"type":"string"},"source":{"type":"string","format":"uri","description":"Public page the fact comes from."},"references":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"label":{"type":"string"},"url":{"type":"string","format":"uri","description":"Public page the fact comes from."}},"required":["type","label","url"]}}}}}}}}},"400":{"description":"Malformed id."},"403":{"description":"Origin not allowed."},"404":{"description":"No such entry."},"429":{"description":"Rate limit; see Retry-After."}}}},"/mcp":{"post":{"operationId":"mcp","summary":"Model Context Protocol, Streamable HTTP, JSON responses only. Tools: search_record, get_fact, list_public_work, how_to_engage.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"A single JSON-RPC 2.0 message (initialize, ping, tools/list, tools/call)."}}}},"responses":{"200":{"description":"JSON-RPC response.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Notification accepted."},"400":{"description":"Invalid JSON-RPC message."},"403":{"description":"Origin not allowed."},"413":{"description":"Request larger than 2 KB."},"415":{"description":"Content-Type must be application/json."},"429":{"description":"Rate limit; see Retry-After."}}}},"/openapi.json":{"get":{"operationId":"getOpenApi","summary":"This document.","responses":{"200":{"description":"OpenAPI 3.1 document.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/health":{"get":{"operationId":"getHealth","summary":"Liveness.","responses":{"200":{"description":"{\"ok\":true}","content":{"application/json":{"schema":{"type":"object","required":["ok"],"properties":{"ok":{"const":true}}}}}}}}}}}