{"openapi":"3.1.0","info":{"title":"Jam API","version":"0.1.0","description":"A fully local, hand-curated game jam reference: common time-box formats (48-hour, week-long, month-long, and Ludum Dare's compo/jam divisions), real jam events referenced factually (Ludum Dare, Global Game Jam, itch.io jams, GMTK Game Jam and more), scope-management and team-formation advice, judging/rating basics, a jam-vocabulary glossary, skill-level jam suggestions, and beginner tips. Keyless; fully local; zero upstream calls.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://jam.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/jam/docs"},"termsOfService":"https://connectorbay.com/jam/terms"},"servers":[{"url":"https://jam.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/jam/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/format_info":{"post":{"operationId":"format_info","summary":"Full detail for one common game jam format: typical length, how it tends to feel to jam in, who it","description":"Full detail for one common game jam format: typical length, how it tends to feel to jam in, who it\n    suits best, and scope guidance suited to that length. Covers 48/72-hour, week-long, two-week, month-long,\n    and the solo/from-scratch (\"compo\") vs. team-friendly (\"jam\") divisions. Use for \"what is a 48-hour jam\n    like\", \"what's the difference between a compo and a jam division\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"A jam time-box format's name or alias.","examples":["48-hour jam","week-long jam","compo","month-long jam"],"minLength":1,"title":"Name","type":"string"}},"required":["name"],"title":"format_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/jam_event_info":{"post":{"operationId":"jam_event_info","summary":"Factual, hedged detail on one real game jam event: founding, cadence, typical format, theme process,","description":"Factual, hedged detail on one real game jam event: founding, cadence, typical format, theme process,\n    judging style, and notable facts, referenced factually rather than as an official rulebook. Use for \"what\n    is Ludum Dare\", \"how does the Global Game Jam work\", \"what's js13kGames about\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"A real game jam event's name or alias.","examples":["Ludum Dare","Global Game Jam","GMTK Game Jam","js13kGames"],"minLength":1,"title":"Name","type":"string"}},"required":["name"],"title":"jam_event_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/term_glossary":{"post":{"operationId":"term_glossary","summary":"Definitions of common game jam vocabulary — theme, compo, diversifier, scope creep, core loop,","description":"Definitions of common game jam vocabulary — theme, compo, diversifier, scope creep, core loop,\n    vertical slice, MVP, placeholder art, game feel/juice, postmortem, rating period, timebox, and more. Use\n    for \"what's a diversifier\", \"what does 'compo' mean in game jam terms\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific jam 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/scope_management_tip":{"post":{"operationId":"scope_management_tip","summary":"One practical tip for keeping a time-boxed game project's scope achievable — building the core loop","description":"One practical tip for keeping a time-boxed game project's scope achievable — building the core loop\n    first, keeping a cut list, avoiding multiplayer/procgen traps, setting a feature freeze, and more — or,\n    with no topic, the full list of tip topics. Use for \"how do I avoid scope creep in a jam\", \"when should I\n    stop adding features\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A scope-management topic to look up; omit to list every tip topic.","examples":["core loop first","feature freeze","placeholder art","procedural generation"],"title":"Topic"}},"title":"scope_management_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/team_formation_tip":{"post":{"operationId":"team_formation_tip","summary":"One practical tip for forming and running a game jam team — defining roles early, ideal team size,","description":"One practical tip for forming and running a game jam team — defining roles early, ideal team size,\n    finding teammates on a jam's Discord, matching complementary skills, remote-team coordination, and more —\n    or, with no topic, the full list of tip topics. Use for \"how do I find teammates for a game jam\", \"what's\n    a good jam team size\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A team-formation topic to look up; omit to list every tip topic.","examples":["finding teammates","team size","remote timezones","role definition"],"title":"Topic"}},"title":"team_formation_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/judging_criteria_overview":{"post":{"operationId":"judging_criteria_overview","summary":"Explains how game jam judging commonly works: the three broad models (peer/community rating,","description":"Explains how game jam judging commonly works: the three broad models (peer/community rating,\n    panel/judge-scored, and unranked/participation-first), the categories jams typically score (theme, fun,\n    innovation, aesthetics, mood, technical execution, overall), and the optional \"diversifier\" concept. Use\n    for \"how does game jam judging work\", \"what categories do jams usually score\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"judging_criteria_overviewArguments","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_jam_for_skill_level":{"post":{"operationId":"find_jam_for_skill_level","summary":"Suggests suitable jam formats and real events for a stated experience level (first-timer, beginner,","description":"Suggests suitable jam formats and real events for a stated experience level (first-timer, beginner,\n    intermediate, advanced), with the reasoning behind the suggestions and level-specific tips. Use for \"what\n    game jam should a total beginner try first\", \"what's a good next jam once I'm comfortable jamming\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"level":{"description":"An experience level.","examples":["first-timer","beginner","intermediate","advanced"],"minLength":1,"title":"Level","type":"string"}},"required":["level"],"title":"find_jam_for_skill_levelArguments","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 ranked shortlist of general advice for someone jamming for the first few times — scoping small,","description":"A ranked shortlist of general advice for someone jamming for the first few times — scoping small,\n    using familiar tools, playtesting early, submitting something even if incomplete, and more. Use for \"give\n    me tips for my first game jam\", \"what should I know before jamming for the first time\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"count":{"default":5,"description":"How many tips to return.","maximum":12,"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}}}}