{"openapi":"3.1.0","info":{"title":"Patience API","version":"0.1.0","description":"A fully local, hand-curated solitaire/patience card-game reference: original rule summaries for 10 classic single- and double-deck games (Klondike, Spider, FreeCell, Pyramid, Golf, Yukon, Canfield, TriPeaks, Forty Thieves, Scorpion), each with a plain-language how-to-play walkthrough, key rules, a qualitative win-odds note, and curated beginner tips, plus a patience-terms glossary and mood-based game suggestions. Keyless; zero upstream API calls; nothing stored.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://patience.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/patience/docs"},"termsOfService":"https://connectorbay.com/patience/terms"},"servers":[{"url":"https://patience.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/patience/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/game_rules":{"post":{"operationId":"game_rules","summary":"Full detail for one patience game: objective, setup, a numbered how-to-play walkthrough, key rules and","description":"Full detail for one patience game: objective, setup, a numbered how-to-play walkthrough, key rules and\n    typical time to play. Use for \"how do I play Klondike\", \"what are the rules of Forty Thieves\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"A patience game's name or alias.","examples":["Klondike","Spider","FreeCell","TriPeaks"],"minLength":1,"title":"Name","type":"string"}},"required":["name"],"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}},"/v1/tools/games_by_difficulty":{"post":{"operationId":"games_by_difficulty","summary":"Every game at a given difficulty — beginner, intermediate or advanced (easy/medium/hard also work as","description":"Every game at a given difficulty — beginner, intermediate or advanced (easy/medium/hard also work as\n    synonyms). Use for \"what's a good beginner patience game\", \"show me the hardest games you cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"level":{"description":"A difficulty level.","examples":["beginner","intermediate","advanced","easy","hard"],"minLength":1,"title":"Level","type":"string"}},"required":["level"],"title":"games_by_difficultyArguments","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/games_by_deck_count":{"post":{"operationId":"games_by_deck_count","summary":"Every game that uses the given number of decks (1 or 2). Use for \"what solitaire games use two decks\",","description":"Every game that uses the given number of decks (1 or 2). Use for \"what solitaire games use two decks\",\n    \"list every single-deck patience game\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"count":{"description":"Number of standard 52-card decks the game uses: 1 or 2.","examples":[1,2],"maximum":2,"minimum":1,"title":"Count","type":"integer"}},"required":["count"],"title":"games_by_deck_countArguments","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 patience/solitaire terms — tableau, foundation, stock, waste, reserve, free cell,","description":"Definitions of common patience/solitaire terms — tableau, foundation, stock, waste, reserve, free cell,\n    build up/down, redeal, cascade, supermove, open vs closed tableau, and more. Use for \"what's a foundation\n    in solitaire\", \"what does 'redeal' mean\".","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/win_odds_note":{"post":{"operationId":"win_odds_note","summary":"A qualitative, non-fabricated note on how \"winnable\" a named game typically is — whether it's usually","description":"A qualitative, non-fabricated note on how \"winnable\" a named game typically is — whether it's usually\n    solvable with skilled play, often blocked by bad luck, or highly sensitive to which house rules (redeals,\n    empty-column rules) are in use. No invented precise percentages. Use for \"is Klondike usually winnable\",\n    \"how often can you actually win FreeCell\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"A patience game's name or alias.","examples":["Klondike","FreeCell","Golf"],"minLength":1,"title":"Name","type":"string"}},"required":["name"],"title":"win_odds_noteArguments","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_game_for_mood":{"post":{"operationId":"find_game_for_mood","summary":"Suggests 1-4 patience games matching a plain-language mood or craving, keyword-matched against each","description":"Suggests 1-4 patience games matching a plain-language mood or craving, keyword-matched against each\n    game's mood tags, family, difficulty and typical playing time. Use for \"what should I play if I'm bored\n    for five minutes\", \"suggest a challenging two-deck game\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"description":{"description":"A mood or craving, in plain language.","examples":["something quick and relaxing","a real brain burner","I only have five minutes","I want a game I can actually win"],"minLength":1,"title":"Description","type":"string"}},"required":["description"],"title":"find_game_for_moodArguments","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":"The families this reference groups patience games into (e.g. Classic Foundation-Builders, Same-Suit","description":"The families this reference groups patience games into (e.g. Classic Foundation-Builders, Same-Suit\n    Sequence Clearers) with how many games are in each and which. Use for \"what kinds of patience games 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}},"/v1/tools/beginner_tips":{"post":{"operationId":"beginner_tips","summary":"A curated shortlist of practical tips for playing one named game well, aimed at someone learning it.","description":"A curated shortlist of practical tips for playing one named game well, aimed at someone learning it.\n    Use for \"any tips for playing Spider\", \"how do I get better at FreeCell\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"A patience game's name or alias.","examples":["Klondike","Spider","Canfield"],"minLength":1,"title":"Name","type":"string"}},"required":["name"],"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}}}}