{"openapi":"3.1.0","info":{"title":"Airhockey API","version":"0.1.0","description":"A fully local, hand-curated air hockey rules and technique reference: serving, scoring, table-crossing and other fouls, match-structure rules, offensive and defensive techniques, table/mallet/puck equipment specs, singles/doubles and tournament match formats, a scoring-system summary, a term glossary and beginner tips. Keyless; fully local; zero upstream calls.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://airhockey.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/airhockey/docs"},"termsOfService":"https://connectorbay.com/airhockey/terms"},"servers":[{"url":"https://airhockey.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/airhockey/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/rule_lookup":{"post":{"operationId":"rule_lookup","summary":"Full detail for one air hockey rule: category, how it works, and any common-misconception notes. Use","description":"Full detail for one air hockey rule: category, how it works, and any common-misconception notes. Use\n    for \"what's the table-crossing rule\", \"what happens on stalling\", \"how does the own goal rule work\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"topic":{"description":"A rule topic, name or alias.","examples":["table crossing","stalling","own goal","first serve"],"minLength":1,"title":"Topic","type":"string"}},"required":["topic"],"title":"rule_lookupArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/rule_search":{"post":{"operationId":"rule_search","summary":"Keyword search across every rule's topic, aliases, category, summary, details and notes. Use for \"rules","description":"Keyword search across every rule's topic, aliases, category, summary, details and notes. Use for \"rules\n    about the puck leaving the table\", \"any rule about doubles\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"description":"Keyword to search for.","minLength":1,"title":"Query","type":"string"}},"required":["query"],"title":"rule_searchArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/rules_by_category":{"post":{"operationId":"rules_by_category","summary":"Every rule in one category (Serving, Scoring, Fouls & Table Crossing, Match Structure, Equipment &","description":"Every rule in one category (Serving, Scoring, Fouls & Table Crossing, Match Structure, Equipment &\n    Setup, Etiquette), or with no category, every category and how many rules it has. Use for \"list all\n    scoring rules\", \"what categories of rules do you cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"category":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A rule category name; omit to list every category with its rule count.","examples":["Serving","Fouls & Table Crossing","Scoring"],"title":"Category"}},"title":"rules_by_categoryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/technique_info":{"post":{"operationId":"technique_info","summary":"Full detail for one offensive or defensive technique — how it works, tips, and common mistakes — or,","description":"Full detail for one offensive or defensive technique — how it works, tips, and common mistakes — or,\n    with no name given, a one-line summary of every technique. Use for \"how do I hit a bank shot\", \"what is\n    defensive positioning\", \"what techniques are there\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A technique's name or alias; omit to list every technique.","examples":["bank shot","cut shot","defensive positioning","home position"],"title":"Name"}},"title":"technique_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/equipment_overview":{"post":{"operationId":"equipment_overview","summary":"Table, mallet and puck specs: typical dimensions, materials, the air-cushion/blower system, rails,","description":"Table, mallet and puck specs: typical dimensions, materials, the air-cushion/blower system, rails,\n    goal mouth, and other common equipment. Use for \"what size is an air hockey table\", \"what's the puck made\n    of\", \"how does the air cushion work\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"equipment_overviewArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/format_info":{"post":{"operationId":"format_info","summary":"Full detail for one match or tournament format — singles, doubles, round robin, single/double","description":"Full detail for one match or tournament format — singles, doubles, round robin, single/double\n    elimination, race-to/best-of — or, with no name given, a one-line summary of every format. Use for\n    \"what's the difference between single and double elimination\", \"how does doubles work in air hockey\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A match/tournament format's name or alias; omit to list every format.","examples":["singles","doubles","double elimination","race to"],"title":"Name"}},"title":"format_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/scoring_summary":{"post":{"operationId":"scoring_summary","summary":"The scoring system at a glance: point value per goal, game win condition and typical target scores,","description":"The scoring system at a glance: point value per goal, game win condition and typical target scores,\n    the own-goal rule, match structure, tiebreakers, and timed-play variants. Use for \"how many points to win\n    a game of air hockey\", \"does an own goal count against me\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"scoring_summaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/term_glossary":{"post":{"operationId":"term_glossary","summary":"Definitions of common air hockey vocabulary — mallet, centerline, bank shot, stalling, own goal, home","description":"Definitions of common air hockey vocabulary — mallet, centerline, bank shot, stalling, own goal, home\n    position, and more. Use for \"what does 'stalling' mean\", \"define centerline\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific term to look up; omit to list all.","title":"Term"}},"title":"term_glossaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/beginner_tips":{"post":{"operationId":"beginner_tips","summary":"A ranked shortlist of tips for someone new to air hockey — positioning, grip, watching the mallet not","description":"A ranked shortlist of tips for someone new to air hockey — positioning, grip, watching the mallet not\n    just the puck, and more. Use for \"tips for playing air hockey for the first time\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"count":{"default":5,"description":"How many tips to return.","maximum":10,"minimum":1,"title":"Count","type":"integer"}},"title":"beginner_tipsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}