{"openapi":"3.1.0","info":{"title":"Gamenight API","version":"0.1.0","description":"A fully local, hand-curated game-night planning and hosting toolkit: matches games to group size, mood, duration and complexity across Party, Strategy, Cooperative, Card and Dice archetypes, builds a real time-boxed rotation schedule across multiple games with setup/teardown-aware, pacing-arc scheduling logic, and gives pairing, snack and host-logistics guidance.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://gamenight.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/gamenight/docs"},"termsOfService":"https://connectorbay.com/gamenight/terms"},"servers":[{"url":"https://gamenight.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/gamenight/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_night_planner":{"post":{"operationId":"game_night_planner","summary":"Builds a real, time-boxed game-night schedule: picks a diverse set of games from the curated pool","description":"Builds a real, time-boxed game-night schedule: picks a diverse set of games from the curated pool\n    that fit your group size, orders them into a light-to-peak-to-light pacing arc, and allocates a welcome\n    buffer plus setup/play/teardown minutes for each game against your total time — honestly reporting\n    whether everything fits or where it overflows. Use for \"plan a 3-hour game night for 6 people with 3\n    games\", \"how should I schedule 4 games in 2 hours for 8 people\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"total_time_minutes":{"description":"Total time available for the whole session, in minutes.","examples":[120,180,240],"maximum":480,"minimum":30,"title":"Total Time Minutes","type":"integer"},"group_size":{"description":"How many people are playing.","examples":[6],"maximum":30,"minimum":1,"title":"Group Size","type":"integer"},"num_games":{"default":3,"description":"How many different games to fit into the session.","examples":[3],"maximum":6,"minimum":1,"title":"Num Games","type":"integer"}},"required":["total_time_minutes","group_size"],"title":"game_night_plannerArguments","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/mood_to_game_type":{"post":{"operationId":"mood_to_game_type","summary":"Maps a mood — competitive, cooperative, silly or thoughtful — to the game categories that fit it","description":"Maps a mood — competitive, cooperative, silly or thoughtful — to the game categories that fit it\n    best, with a few example games from each. Use for \"what should we play if we're feeling silly\", \"we want\n    something competitive tonight\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"mood":{"description":"The mood the group is in.","examples":["competitive","cooperative","silly","thoughtful"],"minLength":1,"title":"Mood","type":"string"}},"required":["mood"],"title":"mood_to_game_typeArguments","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/pairing_suggestion":{"post":{"operationId":"pairing_suggestion","summary":"Suggests what category (and example games) to play next after finishing a game in a given category,","description":"Suggests what category (and example games) to play next after finishing a game in a given category,\n    for good pacing — e.g. after an intense Strategy game, wind down with something light. Use for \"what\n    should we play after a big strategy game\", \"we just finished a party game, what's next\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"just_played_category":{"description":"The category of game the group just finished playing.","examples":["Strategy","Party","Cooperative"],"minLength":1,"title":"Just Played Category","type":"string"}},"required":["just_played_category"],"title":"pairing_suggestionArguments","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/group_size_fit":{"post":{"operationId":"group_size_fit","summary":"Reports which categories and games in the curated pool fit a given headcount, and what size band that","description":"Reports which categories and games in the curated pool fit a given headcount, and what size band that\n    group falls into (duo, small group, party-sized, crowd) with practical guidance for that band. Use for\n    \"what games work for a group of 10\", \"we only have 2 players, what fits\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"size":{"description":"Number of people playing.","examples":[6],"maximum":30,"minimum":1,"title":"Size","type":"integer"}},"required":["size"],"title":"group_size_fitArguments","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/snack_pairing_tip":{"post":{"operationId":"snack_pairing_tip","summary":"A short, practical snack and table-logistics tip suited to one game category (or a general tip).","description":"A short, practical snack and table-logistics tip suited to one game category (or a general tip).\n    Use for \"what snacks work for a strategy game night\", \"any tips for card game snacks\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game_type":{"description":"A game category, or 'general' for an overall tip.","examples":["Party","Strategy","general"],"minLength":1,"title":"Game Type","type":"string"}},"required":["game_type"],"title":"snack_pairing_tipArguments","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/hosting_checklist":{"post":{"operationId":"hosting_checklist","summary":"A practical hosting checklist split into before-guests-arrive, during-the-night and wrap-up tips.","description":"A practical hosting checklist split into before-guests-arrive, during-the-night and wrap-up tips.\n    Use for \"what do I need to do to host a good game night\", \"give me a game night checklist\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"hosting_checklistArguments","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/warm_up_activity_suggestion":{"post":{"operationId":"warm_up_activity_suggestion","summary":"Suggests a short icebreaker/warm-up activity to open the night before the main games start, optionally","description":"Suggests a short icebreaker/warm-up activity to open the night before the main games start, optionally\n    filtered by a time budget or group size. Use for \"give us a quick icebreaker before we start\", \"5-minute\n    warm-up for 8 people\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"max_minutes":{"anyOf":[{"maximum":30,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only suggest warm-ups that fit within this many minutes.","title":"Max Minutes"},"group_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only suggest warm-ups that work for this many people.","title":"Group Size"}},"title":"warm_up_activity_suggestionArguments","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":"Every game category — Party, Strategy, Cooperative, Card, Dice — with its description and how many","description":"Every game category — Party, Strategy, Cooperative, Card, Dice — with its description and how many\n    curated games are in it. Use for \"what kinds of games do you 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}}}}