{"openapi":"3.1.0","info":{"title":"Legacy API","version":"0.1.0","description":"A fully local, hand-curated reference to the legacy & campaign board game genre: mechanic explainers (permanent stickers/writing, sealed envelopes, persistent world state, character progression, branching narrative), design considerations (replayability, group buy-in, storage of persistent state, cost, spoilers, scheduling, legacy fatigue, resale), a genre glossary, real-game examples per mechanic, a campaign-length calculator, a group/commitment-level game finder, and beginner tips.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://legacy.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/legacy/docs"},"termsOfService":"https://connectorbay.com/legacy/terms"},"servers":[{"url":"https://legacy.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/legacy/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/mechanic_info":{"post":{"operationId":"mechanic_info","summary":"Full detail for one legacy/campaign board game mechanic: category, an original explanation of how it","description":"Full detail for one legacy/campaign board game mechanic: category, an original explanation of how it\n    works, whether it's permanent or resettable, its effect on replayability, real games that use it, and\n    related mechanics. Use for \"what is a sealed envelope in board games\", \"how does the sticker mechanic work\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"A legacy/campaign mechanic's name or alias.","examples":["sticker mechanic","sealed envelope","persistent character sheet"],"minLength":1,"title":"Name","type":"string"}},"required":["name"],"title":"mechanic_infoArguments","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/design_consideration":{"post":{"operationId":"design_consideration","summary":"Covers one practical design/ownership consideration for choosing or running a legacy or campaign game","description":"Covers one practical design/ownership consideration for choosing or running a legacy or campaign game\n    — replayability, group buy-in and commitment, storage of persistent state, cost per play, spoiler\n    management, scheduling cadence, legacy fatigue, or resale/secondhand value — with its real tradeoffs.\n    Use for \"why do legacy games cost so much\", \"how do I keep a group committed to a campaign\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"topic":{"description":"A design/ownership topic.","examples":["replayability","group buy-in","storage of persistent state","cost","spoilers","scheduling","legacy fatigue","resale"],"minLength":1,"title":"Topic","type":"string"}},"required":["topic"],"title":"design_considerationArguments","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":"Defines legacy/campaign genre terms — legacy game, campaign game, legacy-lite, one-and-done,","description":"Defines legacy/campaign genre terms — legacy game, campaign game, legacy-lite, one-and-done,\n    permanent alteration, sealed content, campaign log, scenario, chapter, unlock, sticker mechanic,\n    persistent world state, meta-progression, branching narrative, recharge kit, spoiler, group buy-in, save\n    state, and more. Use for \"what does 'legacy-lite' mean\", \"what's a campaign log\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific genre 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/game_examples":{"post":{"operationId":"game_examples","summary":"Real, factually-referenced games that use one named legacy/campaign mechanic, each with year,","description":"Real, factually-referenced games that use one named legacy/campaign mechanic, each with year,\n    publisher, player count, overall commitment level, and how it applies that mechanic in original wording\n    — never reproduced rules or card text. Use for \"what games use sealed envelopes\", \"give me examples of\n    persistent character sheets\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"mechanic":{"description":"A legacy/campaign mechanic's name or alias.","examples":["sealed envelope","persistent character sheet","branching story passage"],"minLength":1,"title":"Mechanic","type":"string"}},"required":["mechanic"],"title":"game_examplesArguments","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/campaign_length_estimator":{"post":{"operationId":"campaign_length_estimator","summary":"Calculates a campaign's total playtime (with a typical setup/log-reading overhead added), calendar-time","description":"Calculates a campaign's total playtime (with a typical setup/log-reading overhead added), calendar-time\n    estimates at weekly/biweekly/monthly cadence, a commitment tier (low/medium/high/marathon), and a rough\n    comparison to a real game of similar total length. A real calculation, not a lookup. Use for \"how long\n    will a 12-session campaign take\", \"20 chapters at 90 minutes each, how many months is that biweekly\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"scenario_count":{"description":"Number of scenarios/chapters in the campaign.","examples":[12,20,95],"maximum":500,"minimum":1,"title":"Scenario Count","type":"integer"},"avg_session_minutes":{"description":"Average length of one play session, in minutes.","examples":[60,90,120],"maximum":600,"minimum":5,"title":"Avg Session Minutes","type":"integer"}},"required":["scenario_count","avg_session_minutes"],"title":"campaign_length_estimatorArguments","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_group":{"post":{"operationId":"find_game_for_group","summary":"Suggests real legacy/campaign games matching a group's size and desired session-count/time commitment","description":"Suggests real legacy/campaign games matching a group's size and desired session-count/time commitment\n    (low, medium, high, marathon). Use for \"what legacy game works for 2 players who want something short\",\n    \"campaign game for a group of 5 willing to commit to a lot of sessions\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"player_count":{"description":"How many players in the group.","examples":[2,4,5],"maximum":10,"minimum":1,"title":"Player Count","type":"integer"},"commitment_level":{"description":"Desired commitment level.","examples":["low","medium","high","marathon"],"minLength":1,"title":"Commitment Level","type":"string"}},"required":["player_count","commitment_level"],"title":"find_game_for_groupArguments","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 legacy/campaign mechanic category with how many mechanics are in it. Use for \"what categories of","description":"Every legacy/campaign mechanic category with how many mechanics are in it. Use for \"what categories of\n    legacy mechanics 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}},"/v1/tools/beginner_tips":{"post":{"operationId":"beginner_tips","summary":"A curated, ordered list of practical tips for a group about to start their first legacy or campaign","description":"A curated, ordered list of practical tips for a group about to start their first legacy or campaign\n    game. Use for \"what should we know before starting a legacy game\", \"tips for our first campaign board game\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"count":{"default":5,"description":"How many tips to return.","maximum":10,"minimum":1,"title":"Count","type":"integer"}},"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}}}}