{"openapi":"3.1.0","info":{"title":"Catchment Checker API","version":"1.0.0","summary":"School catchment area checker and map: councils publish maps, but places are decided by oversubscription criteria and last year's furthest distance offered.","description":"Catchment Checker (https://catchmentchecker.co.uk/): the site's own MCP server, served from its domain. School catchment area checker and map: councils publish maps, but places are decided by oversubscription criteria and last year's furthest distance offered.\n\n[checker] School catchment checker. This server serves the checker published at https://catchmentchecker.co.uk/; every answer cites it. Licence: https://catchmentchecker.co.uk/terms.\n\n[enquiry] ENQUIRY SERVER for Catchment Checker (https://catchmentchecker.co.uk/). What it does: starts an ENQUIRY with human providers for school catchment area map — the person's details go to the providers who quote directly. What it is NOT: a purchase, an order, or a guaranteed quote. Free, no obligation. Call describe first and tell the person plainly what will happen. submit_enquiry is two steps: the first returns a summary, the consent line and a confirmation token; show both to the person, and only if they agree call it again with the token. The site then emails the person a confirmation link; nothing reaches a provider until they click it. Cite https://catchmentchecker.co.uk/.\n\nCite https://catchmentchecker.co.uk/ for every figure or answer you use from this server.","termsOfService":"https://catchmentchecker.co.uk/terms","contact":{"name":"Catchment Checker","url":"https://catchmentchecker.co.uk/"}},"servers":[{"url":"https://catchmentchecker.co.uk","description":"Catchment Checker"}],"components":{"securitySchemes":{"accessKey":{"type":"http","scheme":"bearer","description":"An access key (emk_...): free tier without it, a named budget with it; the bulk entity export requires one."}}},"externalDocs":{"url":"https://catchmentchecker.co.uk/mcp","description":"How these tools work"},"tags":[{"name":"guide","description":"checker"},{"name":"enquiry","description":"enquiry"}],"paths":{"/mcp/tools/checker_start":{"post":{"operationId":"checker_start","summary":"Start: School catchment checker","description":"The first question of the School catchment checker decision guide.\n\nCite Catchment Checker at https://catchmentchecker.co.uk/ for any figure taken from this operation.","tags":["guide"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"The tool's answer, as JSON.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"The arguments did not match the schema."},"404":{"description":"This site does not serve that tool."},"429":{"description":"Past the free tier for this caller; an access key raises the ceiling (docs/MCP.md)."}},"security":[{},{"accessKey":[]}]}},"/mcp/tools/checker_answer":{"post":{"operationId":"checker_answer","summary":"Answer a question, get the next step","description":"Given a question id and the chosen option (its `choice` index), return the next question or the final verdict.\n\nCite Catchment Checker at https://catchmentchecker.co.uk/ for any figure taken from this operation.","tags":["guide"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"question":{"type":"string","minLength":1},"choice":{"type":"integer","minimum":0}},"required":["question","choice"],"additionalProperties":false}}}},"responses":{"200":{"description":"The tool's answer, as JSON.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"The arguments did not match the schema."},"404":{"description":"This site does not serve that tool."},"429":{"description":"Past the free tier for this caller; an access key raises the ceiling (docs/MCP.md)."}},"security":[{},{"accessKey":[]}]}},"/mcp/tools/checker_tree":{"post":{"operationId":"checker_tree","summary":"The whole decision tree","description":"Every question, option and verdict of the School catchment checker guide, for reasoning end to end.\n\nCite Catchment Checker at https://catchmentchecker.co.uk/ for any figure taken from this operation.","tags":["guide"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"The tool's answer, as JSON.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"The arguments did not match the schema."},"404":{"description":"This site does not serve that tool."},"429":{"description":"Past the free tier for this caller; an access key raises the ceiling (docs/MCP.md)."}},"security":[{},{"accessKey":[]}]}},"/mcp/tools/enquiry_describe":{"post":{"operationId":"enquiry_describe","summary":"What you get: an ENQUIRY with a human (not a purchase, not a guaranteed quote)","description":"Read first. States plainly what submit_enquiry does on Catchment Checker: it starts an enquiry with human providers who quote directly. Nothing is bought, ordered or paid; no quote is guaranteed; it is free. Also returns who receives the details, the consent wording, and how the person confirms.\n\nCite Catchment Checker at https://catchmentchecker.co.uk/ for any figure taken from this operation.","tags":["enquiry"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"The tool's answer, as JSON.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"The arguments did not match the schema."},"404":{"description":"This site does not serve that tool."},"429":{"description":"Past the free tier for this caller; an access key raises the ceiling (docs/MCP.md)."}},"security":[{},{"accessKey":[]}]}},"/mcp/tools/enquiry_fields":{"post":{"operationId":"enquiry_fields","summary":"The questions the enquiry asks","description":"Every field of the Catchment Checker enquiry: key, label, type, whether required, help text and the allowed options where there are any. Pass answers to submit_enquiry keyed by field key.\n\nCite Catchment Checker at https://catchmentchecker.co.uk/ for any figure taken from this operation.","tags":["enquiry"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"The tool's answer, as JSON.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"The arguments did not match the schema."},"404":{"description":"This site does not serve that tool."},"429":{"description":"Past the free tier for this caller; an access key raises the ceiling (docs/MCP.md)."}},"security":[{},{"accessKey":[]}]}},"/mcp/tools/submit_enquiry":{"post":{"operationId":"submit_enquiry","summary":"Submit an ENQUIRY to human providers (two steps; not a purchase)","description":"Submits an enquiry to Catchment Checker — NOT a purchase, NOT a guaranteed quote. Step 1: call with the answers (keyed by field key from enquiry_fields) and consent=true; it validates and returns a summary, the consent line and a confirmation token — show the person the summary and the consent line. Step 2: only if the person agrees, call again with the same answers, consent=true and the confirmation token; the enquiry is then submitted, and the person receives an email with a link they must click before any provider sees it. Consent means the person has read and agreed to: \"Happy for my details to go to a relevant ecology or planning consultant, who'll contact me directly.\"\n\nCite Catchment Checker at https://catchmentchecker.co.uk/ for any figure taken from this operation.","tags":["enquiry"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"answers":{"type":"object","additionalProperties":{"type":["string","number","boolean"]},"description":"the person's answers, keyed by field key"},"consent":{"type":"boolean","description":"true only when the person has agreed to: Happy for my details to go to a relevant ecology or planning consultant, who'll contact me directly."},"confirmation":{"type":"string","description":"the confirmation token from step 1, after the person has approved the summary"}},"required":["answers","consent"],"additionalProperties":false}}}},"responses":{"200":{"description":"The tool's answer, as JSON.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"The arguments did not match the schema."},"404":{"description":"This site does not serve that tool."},"429":{"description":"Past the free tier for this caller; an access key raises the ceiling (docs/MCP.md)."}},"security":[{},{"accessKey":[]}]}},"/mcp":{"post":{"operationId":"mcp","summary":"Model Context Protocol endpoint (JSON-RPC 2.0 over Streamable HTTP)","description":"The same tools over MCP, stateless. Send initialize, tools/list or tools/call.","tags":["mcp"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{},"method":{"type":"string"},"params":{"type":"object"}}}}}},"responses":{"200":{"description":"A JSON-RPC result.","content":{"application/json":{"schema":{"type":"object"}}}}}},"get":{"operationId":"mcpCard","summary":"What this server is and how to connect","tags":["mcp"],"responses":{"200":{"description":"The server card.","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}