{"openapi":"3.1.0","info":{"title":"Kakuro Play API","version":"0.1.0","description":"A fully local, playable Kakuro (cross-sum) puzzle engine built from hand-verified, uniquely-solvable layouts, with real combination-cross-reference hint logic and a full backtracking solver. Stateless: the caller holds the puzzle state between calls.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://kakuroplay.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/kakuroplay/docs"},"termsOfService":"https://connectorbay.com/kakuroplay/terms"},"servers":[{"url":"https://kakuroplay.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/kakuroplay/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/new_puzzle":{"post":{"operationId":"new_puzzle","summary":"Generate a new Kakuro puzzle: a hand-verified layout, freshly digit-relabeled, with a","description":"Generate a new Kakuro puzzle: a hand-verified layout, freshly digit-relabeled, with a\n    mathematically confirmed unique solution. Use for \"let's play kakuro\", \"give me a cross-sum puzzle\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"difficulty":{"default":"easy","description":"'easy', 'medium', or 'hard' (a different hand-verified layout each).","title":"Difficulty","type":"string"}},"title":"new_puzzleArguments","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/set_cell":{"post":{"operationId":"set_cell","summary":"Fill or clear one cell. Rejected if the cell is blocked, if the digit repeats within its","description":"Fill or clear one cell. Rejected if the cell is blocked, if the digit repeats within its\n    across-run or down-run, or if it would make a run's sum exceed or become unable to reach its clue.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"Current puzzle state, exactly as returned by a previous call.","title":"State","type":"object"},"row":{"description":"Row index, 0-based.","minimum":0,"title":"Row","type":"integer"},"col":{"description":"Column index, 0-based.","minimum":0,"title":"Col","type":"integer"},"value":{"description":"Digit 1-9 to place, or 0 to clear the cell.","maximum":9,"minimum":0,"title":"Value","type":"integer"}},"required":["state","row","col","value"],"title":"set_cellArguments","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/get_hint":{"post":{"operationId":"get_hint","summary":"Return one genuine logical deduction: a forced cell value and WHY it's forced (combination","description":"Return one genuine logical deduction: a forced cell value and WHY it's forced (combination\n    cross-referencing, or -- only if that doesn't apply -- a solver-derived deeper deduction). Does not\n    modify the state; call set_cell yourself to apply it.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"Current puzzle state, exactly as returned by a previous call.","title":"State","type":"object"}},"required":["state"],"title":"get_hintArguments","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/check_solution":{"post":{"operationId":"check_solution","summary":"Check whether the grid is complete and whether every run sums correctly with no repeated","description":"Check whether the grid is complete and whether every run sums correctly with no repeated\n    digits.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"Current puzzle state, exactly as returned by a previous call.","title":"State","type":"object"}},"required":["state"],"title":"check_solutionArguments","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/solve":{"post":{"operationId":"solve","summary":"Run the full backtracking solver on the puzzle's clues and return the unique answer grid -- for","description":"Run the full backtracking solver on the puzzle's clues and return the unique answer grid -- for\n    verification, or for a player who wants to see the solution.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"Current puzzle state, exactly as returned by a previous call.","title":"State","type":"object"}},"required":["state"],"title":"solveArguments","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/render_board":{"post":{"operationId":"render_board","summary":"Render the current grid as human-readable text with across/down clue lists.","description":"Render the current grid as human-readable text with across/down clue lists.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"Current puzzle state, exactly as returned by a previous call.","title":"State","type":"object"}},"required":["state"],"title":"render_boardArguments","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_info":{"post":{"operationId":"rules_info","summary":"Explain Kakuro's rules, the difficulty levels, and how hints and generation work.","description":"Explain Kakuro's rules, the difficulty levels, and how hints and generation work.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"rules_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}}}}