{"openapi":"3.1.0","info":{"title":"Agendabuilder API","version":"0.1.0","description":"Meeting agenda generation computed locally: phase-by-phase time allocation for 13 meeting types, custom topic scheduling, role/prep guidance, and original minutes templates.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://agendabuilder.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/agendabuilder/docs"},"termsOfService":"https://connectorbay.com/agendabuilder/terms"},"servers":[{"url":"https://agendabuilder.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/agendabuilder/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/build_agenda":{"post":{"operationId":"build_agenda","summary":"Generate a structured agenda for a meeting type and duration: named phases with minutes and start/end","description":"Generate a structured agenda for a meeting type and duration: named phases with minutes and start/end\n    offsets that sum exactly to the duration. Use for \"build a 30-minute retro agenda\", \"agenda for a 1-hour\n    kickoff with 10 people\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"meeting_type":{"description":"Meeting type — see list_meeting_types.","examples":["standup","retrospective","kickoff"],"title":"Meeting Type","type":"string"},"duration_minutes":{"description":"Total meeting length in minutes.","maximum":480,"minimum":5,"title":"Duration Minutes","type":"integer"},"attendee_count":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of attendees.","title":"Attendee Count"},"goal":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"What this meeting needs to accomplish, in a sentence.","title":"Goal"}},"required":["meeting_type","duration_minutes"],"title":"build_agendaArguments","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/list_meeting_types":{"post":{"operationId":"list_meeting_types","summary":"List every supported meeting type with its label, typical default duration and typical attendee range.","description":"List every supported meeting type with its label, typical default duration and typical attendee range.\n    Use for \"what meeting types do you support\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_meeting_typesArguments","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/suggest_time_allocation":{"post":{"operationId":"suggest_time_allocation","summary":"Just the phase-by-phase minute and percentage breakdown for a meeting type and duration, without a full","description":"Just the phase-by-phase minute and percentage breakdown for a meeting type and duration, without a full\n    agenda. Use for \"how should I split a 45-minute planning meeting\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"meeting_type":{"description":"Meeting type — see list_meeting_types.","title":"Meeting Type","type":"string"},"duration_minutes":{"maximum":480,"minimum":5,"title":"Duration Minutes","type":"integer"}},"required":["meeting_type","duration_minutes"],"title":"suggest_time_allocationArguments","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/prep_checklist":{"post":{"operationId":"prep_checklist","summary":"A pre-meeting preparation checklist for a meeting type (invite, roles, materials). Use for \"what should I","description":"A pre-meeting preparation checklist for a meeting type (invite, roles, materials). Use for \"what should I\n    prep before a retro\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"meeting_type":{"description":"Meeting type — see list_meeting_types.","title":"Meeting Type","type":"string"}},"required":["meeting_type"],"title":"prep_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/role_assignments":{"post":{"operationId":"role_assignments","summary":"Recommend which meeting roles (facilitator, notetaker, timekeeper, chair) make sense given attendee count","description":"Recommend which meeting roles (facilitator, notetaker, timekeeper, chair) make sense given attendee count\n    and meeting type, with reasoning. Use for \"do we need a timekeeper for a 12-person planning meeting\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"attendee_count":{"maximum":1000,"minimum":1,"title":"Attendee Count","type":"integer"},"meeting_type":{"description":"Meeting type — see list_meeting_types.","title":"Meeting Type","type":"string"}},"required":["attendee_count","meeting_type"],"title":"role_assignmentsArguments","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/icebreaker_suggestion":{"post":{"operationId":"icebreaker_suggestion","summary":"Suggest 2-3 original icebreaker prompts for a meeting's context, or explain why to skip one for meeting","description":"Suggest 2-3 original icebreaker prompts for a meeting's context, or explain why to skip one for meeting\n    types (standup, interview, board meeting) where it usually isn't worth the time. Use for \"icebreaker for a\n    team retro\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"meeting_type":{"description":"Meeting type — see list_meeting_types.","title":"Meeting Type","type":"string"},"attendee_count":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"title":"Attendee Count"}},"required":["meeting_type"],"title":"icebreaker_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/agenda_from_topics":{"post":{"operationId":"agenda_from_topics","summary":"Build a custom agenda from a list of topics and a total duration: topics with a fixed `minutes` are scaled","description":"Build a custom agenda from a list of topics and a total duration: topics with a fixed `minutes` are scaled\n    down proportionally if they don't all fit; topics without one split the remaining time by `priority` weight.\n    Use for \"turn these 5 topics into a 45-minute agenda\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"topics":{"description":"List of {title, minutes?, priority? (1=high..3=low)}.","examples":[[{"priority":1,"title":"Budget review"},{"minutes":10,"title":"Q&A"}]],"items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"Topics","type":"array"},"duration_minutes":{"maximum":480,"minimum":5,"title":"Duration Minutes","type":"integer"},"buffer_minutes":{"default":0,"description":"Minutes to hold back unscheduled (e.g. for overflow).","maximum":60,"minimum":0,"title":"Buffer Minutes","type":"integer"}},"required":["topics","duration_minutes"],"title":"agenda_from_topicsArguments","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/meeting_length_recommendation":{"post":{"operationId":"meeting_length_recommendation","summary":"Compute a recommended meeting duration from type, attendee count and topic count, with the adjustments","description":"Compute a recommended meeting duration from type, attendee count and topic count, with the adjustments\n    shown. Use for \"how long should a kickoff with 12 people and 5 topics be\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"meeting_type":{"description":"Meeting type — see list_meeting_types.","title":"Meeting Type","type":"string"},"attendee_count":{"maximum":1000,"minimum":1,"title":"Attendee Count","type":"integer"},"topic_count":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"title":"Topic Count"}},"required":["meeting_type","attendee_count"],"title":"meeting_length_recommendationArguments","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/format_agenda_text":{"post":{"operationId":"format_agenda_text","summary":"Render a previously-built agenda as printable Markdown or plain text, ready to paste into a calendar invite.","description":"Render a previously-built agenda as printable Markdown or plain text, ready to paste into a calendar invite.\n    Use for \"format that agenda as markdown for my invite\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"agenda":{"description":"The `agenda` list returned by build_agenda or agenda_from_topics.","items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"Agenda","type":"array"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Heading for the agenda; defaults to 'Meeting Agenda'.","title":"Title"},"fmt":{"default":"markdown","description":"markdown | plain","title":"Fmt","type":"string"}},"required":["agenda"],"title":"format_agenda_textArguments","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/agenda_glossary":{"post":{"operationId":"agenda_glossary","summary":"Definitions of common meeting-facilitation terms — timebox, parking lot, RACI, quorum, facilitator,","description":"Definitions of common meeting-facilitation terms — timebox, parking lot, RACI, quorum, facilitator,\n    notetaker, decision log, standing agenda. Use for \"what's a parking lot in meeting terms\".","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":"agenda_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}}}}