{"openapi":"3.1.0","info":{"title":"Tactics API","version":"0.1.0","description":"A fully local, hand-curated chess tactical-motifs reference: 20 real mid-game and endgame tactical patterns (fork, pin, skewer, discovered attack, discovered check, double check, deflection, decoy, x-ray, zwischenzug, overloading, interference, removing the defender, clearance sacrifice, battery, back-rank mate, smothered mate, windmill, zugzwang, trapped piece), each with an original explanation, recognition cues, typical executing pieces, an example pattern, difficulty, search, piece lookup, and a tactical-terminology glossary. Scoped exclusively to tactical patterns, not opening theory.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://tactics.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/tactics/docs"},"termsOfService":"https://connectorbay.com/tactics/terms"},"servers":[{"url":"https://tactics.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/tactics/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/motif_info":{"post":{"operationId":"motif_info","summary":"Full detail for one tactical motif: definition, mechanics, recognition cues, which pieces typically execute","description":"Full detail for one tactical motif: definition, mechanics, recognition cues, which pieces typically execute\n    it, an original illustrative example pattern, common defenses, difficulty, and related motifs. Use for \"what is\n    a fork\", \"explain the skewer\", \"how does a windmill work\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"A tactical motif's name or alias.","examples":["fork","pin","discovered check","zwischenzug"],"minLength":1,"title":"Name","type":"string"}},"required":["name"],"title":"motif_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/motif_search":{"post":{"operationId":"motif_search","summary":"Keyword search across every motif's name, aliases, category, definition, mechanics and recognition cues. Use","description":"Keyword search across every motif's name, aliases, category, definition, mechanics and recognition cues. Use\n    for \"motifs involving the king\", \"anything about defenders being overloaded\".","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":"motif_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/motifs_by_piece":{"post":{"operationId":"motifs_by_piece","summary":"Which tactical motifs a given piece typically executes (or, for the king, is typically the target of), with","description":"Which tactical motifs a given piece typically executes (or, for the king, is typically the target of), with\n    a short note on why. Use for \"what motifs does a knight typically pull off\", \"what tactics involve the rook\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"piece":{"description":"A chess piece.","examples":["knight","bishop","rook","queen","pawn","king"],"minLength":1,"title":"Piece","type":"string"}},"required":["piece"],"title":"motifs_by_pieceArguments","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/example_pattern":{"post":{"operationId":"example_pattern","summary":"A short, original, invented illustrative description of what a typical example of this motif looks like on","description":"A short, original, invented illustrative description of what a typical example of this motif looks like on\n    a board — not a reproduction of any real, annotated, or copyrighted game. Use for \"show me an example of a\n    fork\", \"what does a typical decoy sacrifice look like\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"motif":{"description":"A tactical motif's name or alias.","examples":["fork","smothered mate","windmill"],"minLength":1,"title":"Motif","type":"string"}},"required":["motif"],"title":"example_patternArguments","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 general tactical terminology distinct from the motifs themselves — tactic, combination,","description":"Definitions of general tactical terminology distinct from the motifs themselves — tactic, combination,\n    sacrifice, forcing move, candidate move, en prise, the exchange, tempo, prophylaxis, combination breaker,\n    mating net, luft. Use for \"what's a zwischenzug\" (also try motif_info first), \"what does 'en prise' mean\",\n    \"what's luft\".","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/difficulty_level":{"post":{"operationId":"difficulty_level","summary":"A motif's difficulty tier (beginner, intermediate, advanced), a note on what that tier generally means for a","description":"A motif's difficulty tier (beginner, intermediate, advanced), a note on what that tier generally means for a\n    learner, and other motifs at the same tier worth studying together. Use for \"how hard is it to spot a fork\",\n    \"what's an easy motif to learn first\", \"what's as advanced as a windmill\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"motif":{"description":"A tactical motif's name or alias.","examples":["fork","zwischenzug","windmill"],"minLength":1,"title":"Motif","type":"string"}},"required":["motif"],"title":"difficulty_levelArguments","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/find_motif_for_position":{"post":{"operationId":"find_motif_for_position","summary":"Suggests 1-4 tactical motifs that match a plain-language description of a board situation, keyword-matched","description":"Suggests 1-4 tactical motifs that match a plain-language description of a board situation, keyword-matched\n    against each motif's recognition cues, definition and mechanics. Use for \"what's it called when a piece can't\n    move without losing the king\", \"my opponent's rook is defending two squares at once, what tactic wins it\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"description":{"description":"A plain-language description of what's happening on the board.","examples":["a piece can't move without exposing my king","my knight attacks two undefended pieces at once","the defender is guarding two things at once","the king is surrounded by its own pieces"],"minLength":1,"title":"Description","type":"string"}},"required":["description"],"title":"find_motif_for_positionArguments","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/category_list":{"post":{"operationId":"category_list","summary":"Every tactical-motif category with how many motifs are in it. Use for \"what categories of tactics do you","description":"Every tactical-motif category with how many motifs are in it. Use for \"what categories of tactics do you\n    cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"category_listArguments","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}}}}