{"openapi":"3.1.0","info":{"title":"Number Guess API","version":"0.1.0","description":"A real, playable, fully local number-guessing game engine with two modes: classic (engine picks a secret, grades your guesses against optimal binary-search play) and reverse (engine guesses your secret using real binary search). Fully stateless — every tool call passes the full game state.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://numberguess.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/numberguess/docs"},"termsOfService":"https://connectorbay.com/numberguess/terms"},"servers":[{"url":"https://numberguess.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/numberguess/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_game":{"post":{"operationId":"new_game","summary":"Starts a new number-guessing game in one of two modes and returns the initial `state`. Use for \"let's","description":"Starts a new number-guessing game in one of two modes and returns the initial `state`. Use for \"let's\n    play a number guessing game 1 to 100\", \"I'm thinking of a number between 1 and 1000, you guess it\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"mode":{"description":"'you_guess' (engine picks a secret, you guess it) or 'engine_guesses' (you think of a number, engine guesses it).","examples":["you_guess","engine_guesses"],"title":"Mode","type":"string"},"min_value":{"default":1,"description":"Lower bound of the range, inclusive.","title":"Min Value","type":"integer"},"max_value":{"default":100,"description":"Upper bound of the range, inclusive.","title":"Max Value","type":"integer"},"max_attempts":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Optional cap on guesses before the game is a loss. Omit for unlimited.","title":"Max Attempts"}},"required":["mode"],"title":"new_gameArguments","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/make_guess":{"post":{"operationId":"make_guess","summary":"'you_guess' mode only: submit one guess against the engine's hidden secret. Returns the new state, whether","description":"'you_guess' mode only: submit one guess against the engine's hidden secret. Returns the new state, whether\n    the guess was higher/lower/correct, and whether it matched the optimal binary-search bisection. Use for\n    \"my guess is 50\", \"I guess 73\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The current game state, exactly as returned by a previous call in this connector.","title":"State","type":"object"},"guess":{"description":"Your guess, an integer within the game's range.","title":"Guess","type":"integer"}},"required":["state","guess"],"title":"make_guessArguments","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/respond_to_guess":{"post":{"operationId":"respond_to_guess","summary":"'engine_guesses' mode only: tell the engine whether your secret number is higher than, lower than, or","description":"'engine_guesses' mode only: tell the engine whether your secret number is higher than, lower than, or\n    equal to its last guess (see state's `current_guess` or the render text). Returns the new state and, if the\n    game continues, the engine's next guess. Inconsistent feedback is reported as an error. Use for \"higher\",\n    \"lower\", \"that's correct\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The current game state, exactly as returned by a previous call in this connector.","title":"State","type":"object"},"feedback":{"description":"How the engine's last guess compares to your secret number.","examples":["higher","lower","correct"],"title":"Feedback","type":"string"}},"required":["state","feedback"],"title":"respond_to_guessArguments","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":"'you_guess' mode only: a hint about the hidden secret (parity, which part of the remaining range it's","description":"'you_guess' mode only: a hint about the hidden secret (parity, which part of the remaining range it's\n    in, digit sum) that never reveals the exact number. Use for \"give me a hint\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The current game state, exactly as returned by a previous call in this connector.","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/render_game":{"post":{"operationId":"render_game","summary":"A human-readable summary of the current game state — mode, range, attempts so far, guess history, and","description":"A human-readable summary of the current game state — mode, range, attempts so far, guess history, and\n    outcome if finished. Use to show the player where things stand.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The current game state, exactly as returned by a previous call in this connector.","title":"State","type":"object"}},"required":["state"],"title":"render_gameArguments","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/game_rules":{"post":{"operationId":"game_rules","summary":"Explains both game modes and the optimal binary-search strategy math, with no live game needed. Use for","description":"Explains both game modes and the optimal binary-search strategy math, with no live game needed. Use for\n    \"how does this game work\", \"what's the optimal strategy\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"game_rulesArguments","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}}}}