{"openapi":"3.1.0","info":{"title":"Tally API","version":"0.1.0","description":"A fully local game scorekeeping and rules-reference toolkit: real computed scoring for cribbage, Yahtzee, ten-pin bowling and poker hand comparisons, a random team generator, and hand-curated rules references for dozens of card, board and dice games plus a glossary.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://tally.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/tally/docs"},"termsOfService":"https://connectorbay.com/tally/terms"},"servers":[{"url":"https://tally.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/tally/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/score_cribbage_hand":{"post":{"operationId":"score_cribbage_hand","summary":"Real computed cribbage hand scoring: 2 points per card-combination summing to 15, 2 points per pair, 1 point","description":"Real computed cribbage hand scoring: 2 points per card-combination summing to 15, 2 points per pair, 1 point\n    per card in a run of 3+ (duplicated ranks multiply a run's score), 4 points for a 4-card flush (5 if the\n    starter matches suit too — and in the crib, only the full 5-card flush counts, worth 5), and 1 point for \"his\n    nobs\" (holding the jack matching the starter's suit). Use for \"score this cribbage hand\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"hand":{"description":"Exactly 4 cards, e.g. ['5S','5C','5D','JH'].","items":{"type":"string"},"maxItems":4,"minItems":4,"title":"Hand","type":"array"},"starter_card":{"description":"The single starter/cut card, e.g. '5H'.","title":"Starter Card","type":"string"},"is_crib":{"default":false,"description":"True if this hand is being scored as a crib (changes the flush rule: a crib flush only counts at all 5 cards, worth 5 — a bare 4-card flush scores 0 in the crib).","title":"Is Crib","type":"boolean"}},"required":["hand","starter_card"],"title":"score_cribbage_handArguments","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/score_yahtzee_category":{"post":{"operationId":"score_yahtzee_category","summary":"Real computed Yahtzee scoring for one 5-dice roll against one category, using the official rules (full","description":"Real computed Yahtzee scoring for one 5-dice roll against one category, using the official rules (full\n    house needs two distinct numbers at counts 3-and-2; small/large straight need 4/5 consecutive distinct values).\n    Use for \"what does this roll score as a full house\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dice":{"description":"Exactly 5 die values, each 1-6.","items":{"type":"integer"},"maxItems":5,"minItems":5,"title":"Dice","type":"array"},"category":{"description":"One of: ones, twos, threes, fours, fives, sixes, three_of_a_kind, four_of_a_kind, full_house, small_straight, large_straight, yahtzee, chance","title":"Category","type":"string"}},"required":["dice","category"],"title":"score_yahtzee_categoryArguments","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/yahtzee_best_category":{"post":{"operationId":"yahtzee_best_category","summary":"Computes the real score this roll would earn in every category still open, and suggests the highest-scoring","description":"Computes the real score this roll would earn in every category still open, and suggests the highest-scoring\n    one (ties are listed together). Use for \"which open category should I use this roll on\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dice":{"description":"Exactly 5 die values, each 1-6.","items":{"type":"integer"},"maxItems":5,"minItems":5,"title":"Dice","type":"array"},"available_categories":{"description":"The categories still open on the scorecard, e.g. ['full_house','chance','sixes'].","items":{"type":"string"},"title":"Available Categories","type":"array"}},"required":["dice","available_categories"],"title":"yahtzee_best_categoryArguments","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/score_bowling_frame":{"post":{"operationId":"score_bowling_frame","summary":"Real computed ten-pin bowling score for a complete game from its full roll sequence — strike and spare","description":"Real computed ten-pin bowling score for a complete game from its full roll sequence — strike and spare\n    bonuses are applied correctly across all 10 frames, including the 10th frame's special extra bonus roll(s),\n    and the sequence is validated as a legal game. Use for \"score this bowling game\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"rolls":{"description":"Every roll of the game in order, pins knocked down per roll (0-10), including the 10th frame's bonus roll(s), e.g. a perfect game is twelve 10s.","items":{"type":"integer"},"title":"Rolls","type":"array"}},"required":["rolls"],"title":"score_bowling_frameArguments","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/poker_hand_winner":{"post":{"operationId":"poker_hand_winner","summary":"Determines the winner among 2+ five-card poker hands using real hand-ranking logic (category, then","description":"Determines the winner among 2+ five-card poker hands using real hand-ranking logic (category, then\n    tiebreak values high to low), and reports a tie when two or more hands are exactly equal. Use for \"which of\n    these poker hands wins\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"hands":{"description":"2 or more hands, each exactly 5 cards, e.g. [['AS','AD','AC','2H','3H'], ['KS','KD','KC','KH','2S']].","items":{"items":{"type":"string"},"type":"array"},"minItems":2,"title":"Hands","type":"array"}},"required":["hands"],"title":"poker_hand_winnerArguments","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/card_game_rules":{"post":{"operationId":"card_game_rules","summary":"Hand-curated quick-reference rules (setup, objective, basic play, scoring) for common card games not","description":"Hand-curated quick-reference rules (setup, objective, basic play, scoring) for common card games not\n    algorithmically scored elsewhere in Tally. Use for \"what are the rules of Euchre\", \"how do you play Hearts\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A card game name, e.g. Uno, Rummy, Hearts, Spades, Euchre, Go Fish, War, Blackjack, Solitaire, Crazy Eights, Canasta. Omit to list all covered games.","title":"Game"}},"title":"card_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/board_game_rules_summary":{"post":{"operationId":"board_game_rules_summary","summary":"Hand-curated quick-reference rules summaries for common board and party games. Use for \"how do you score","description":"Hand-curated quick-reference rules summaries for common board and party games. Use for \"how do you score\n    Scrabble\", \"what are the rules of Pictionary\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A board/party game name, e.g. Monopoly, Scrabble, Uno, Dominoes, Checkers, Backgammon, Chess, Jenga, Charades, Pictionary. Omit to list all covered games.","title":"Game"}},"title":"board_game_rules_summaryArguments","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/dice_game_rules":{"post":{"operationId":"dice_game_rules","summary":"Hand-curated quick-reference rules for common dice games (informational only — the Craps entry covers roll","description":"Hand-curated quick-reference rules for common dice games (informational only — the Craps entry covers roll\n    resolution, not betting odds or wagering advice). Use for \"what are the rules of Farkle\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A dice game name, e.g. Yahtzee, Farkle, Craps, Liar's Dice, Pig. Omit to list all covered games.","title":"Game"}},"title":"dice_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/random_team_generator":{"post":{"operationId":"random_team_generator","summary":"Randomly splits a list of player names into num_teams teams, as balanced in size as possible, using a","description":"Randomly splits a list of player names into num_teams teams, as balanced in size as possible, using a\n    cryptographically-seeded shuffle. Use for \"split us into 2 teams\", \"randomly divide these 6 players into 3\n    teams\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"player_names":{"description":"The players to split up, e.g. ['Amy','Bo','Cai','Dee'].","items":{"type":"string"},"minItems":2,"title":"Player Names","type":"array"},"num_teams":{"description":"How many teams to split them into.","minimum":2,"title":"Num Teams","type":"integer"}},"required":["player_names","num_teams"],"title":"random_team_generatorArguments","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_glossary":{"post":{"operationId":"game_glossary","summary":"Definitions of common general tabletop-game terms (meeple, worker placement, push your luck, trick-taking,","description":"Definitions of common general tabletop-game terms (meeple, worker placement, push your luck, trick-taking,\n    shedding game, ...). Use for \"what's a meeple\", \"what does push your luck 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":"game_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}}}}