{"openapi":"3.1.0","info":{"title":"Word Scramble API","version":"0.1.0","description":"A real, playable, fully local word-unscramble game engine over an original, hand-curated bank of ~290 words across 5 categories and 3 difficulty tiers, with letter-reveal and category/definition hints, answer validation, and scoring. 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://wordscramble.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/wordscramble/docs"},"termsOfService":"https://connectorbay.com/wordscramble/terms"},"servers":[{"url":"https://wordscramble.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/wordscramble/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 Word Scramble round and returns the initial `state`, with the word already scrambled. Show","description":"Starts a new Word Scramble round and returns the initial `state`, with the word already scrambled. Show\n    the player `state.scrambled`, never `state.word`. Use for \"let's play word scramble\", \"give me a hard food\n    word to unscramble\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"category":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optionally restrict to one category (see list_categories). Omit for any category.","examples":["Animals","Food"],"title":"Category"},"difficulty":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optionally restrict to 'easy', 'medium', or 'hard'. Omit for any difficulty.","title":"Difficulty"},"max_attempts":{"default":8,"description":"How many wrong guesses are allowed before a loss.","maximum":20,"minimum":1,"title":"Max Attempts","type":"integer"}},"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/submit_guess":{"post":{"operationId":"submit_guess","summary":"Checks a guess against the secret word (case-insensitive). Returns the new state, whether it was correct,","description":"Checks a guess against the secret word (case-insensitive). Returns the new state, whether it was correct,\n    and a score once the round ends. Use for \"my guess is ELEPHANT\", \"is it GIRAFFE\".","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":"The player's guess at the unscrambled word.","minLength":1,"title":"Guess","type":"string"}},"required":["state","guess"],"title":"submit_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":"Gives a hint — one more revealed letter, the category, or a short definition — and returns the new state.","description":"Gives a hint — one more revealed letter, the category, or a short definition — and returns the new state.\n    Each hint lowers the eventual score. Use for \"give me a hint\", \"what category is this\", \"give me a clue\".","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"},"hint_type":{"default":"letter","description":"'letter' reveals one more letter; 'category' gives the word's category; 'definition' gives a short clue.","examples":["letter","category","definition"],"title":"Hint Type","type":"string"}},"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/give_up":{"post":{"operationId":"give_up","summary":"Ends the round early and reveals the secret word. Use for \"I give up\", \"just tell me the word\".","description":"Ends the round early and reveals the secret word. Use for \"I give up\", \"just tell me the word\".","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":"give_upArguments","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 rendering of the current round — scrambled letters, revealed-letter progress, category,","description":"A human-readable rendering of the current round — scrambled letters, revealed-letter progress, category,\n    difficulty, attempts, and outcome if finished. This is what to show the player, not the raw state.","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/list_categories":{"post":{"operationId":"list_categories","summary":"Every word category with word counts by difficulty tier. Use for \"what categories are there\", \"how many","description":"Every word category with word counts by difficulty tier. Use for \"what categories are there\", \"how many\n    hard animal words do you have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_categoriesArguments","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 how to play, scoring, and difficulty tiers, with no live game needed. Use for \"how does word","description":"Explains how to play, scoring, and difficulty tiers, with no live game needed. Use for \"how does word\n    scramble work\", \"how is the score calculated\".","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}}}}