Skip to main content
Glama

Server Details

Contio MeetingOS: meetings, transcripts, action items, agendas, calendar, and project management.

Ownership verified
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.6/5.0

Scored across 34 tools

Disambiguation3/5

Descriptions are unusually thorough and explicitly cross-reference the right sibling tool, but the tool names themselves are crowded: manageMeetings, manageMeetingItems, manageMeetingContent, and manageMeetingParticipants all share a prefix and only the suffix tells them apart. There is also genuine overlap between getCanvas and getCanvasContent, and between getMeetingAttachment/getMeetingContext/manageMeetingContent download, where the split is by content type rather than by clear verb. The set is workable but an agent can easily misselect on the first try.

Naming Consistency4/5

Tool names are uniformly camelCase with a verb-first pattern (listMeetings, getMeeting, searchMeetings, deleteUserToken, manageActionItems), which is predictable. The deviation is granularity: some resources get flat single-action verbs while others collapse create/update/delete into one `manage*` tool with an `action` enum, so the same operation type appears under two shapes. Descriptions also reference internal endpoint names (v1UpdateActionItem, v1CreateMeeting) rather than the actual tool names, which weakens the naming contract.

Tool Count3/5

At 34 tools this is heavy, though the surface genuinely spans many sub-resources (meetings, agenda, backlog, action items, participants, attachments, context docs, canvases, calendar, tokens, templates), so each tool roughly maps to something. There is still redundancy in the read path — listMeetings, listUpcomingMeetings, searchMeetings, getMeeting, listMeetingTemplates, listMeetingContacts — which inflates the count beyond what the domain requires. It sits just over the comfortable range for a single agent context.

Completeness4/5

CRUD is well covered for the core lifecycle: meetings, agenda items, backlog items, action items, participants, attachments, context documents, and canvases all have create/read/update/delete paths. The main gap is personal access tokens, where listUserTokens and deleteUserToken exist but there is no way to create one, and templates can be listed but not inspected or edited individually. These are minor dead ends an agent can work around or report.

Available Tools

34 tools
deleteUserTokenRevoke a personal access token. Use this when the user wants to invalidate a token; use listUserTokens to find the id. Deletes a user access token by its `{id}` from v1ListUserTokens (not the secret value). Destructive and irreversible — integrations using it will 401 immediately. 404 for unknown/deleted ids; 204 No Content on success.A
DestructiveIdempotent
Inspect

Revoke a personal access token. Use this when the user wants to invalidate a token; use listUserTokens to find the id.

Deletes a user access token by its {id} from v1ListUserTokens (not the secret value). Destructive and irreversible — integrations using it will 401 immediately. 404 for unknown/deleted ids; 204 No Content on success.

Inputs: id (required).

getActionItemRead the details of one follow-up task. Use this when the user asks about a specific action item; use listActionItems to see all tasks. Fetches a single action item by `{id}`. The item is only returned if the caller is the assignee or a participant in the parent meeting, so inaccessible ids return 404. Use this to read `status`, `is_completed`, and `due_date` without re-listing.A
Read-onlyIdempotent
Inspect

Read the details of one follow-up task. Use this when the user asks about a specific action item; use listActionItems to see all tasks.

Fetches a single action item by {id}. The item is only returned if the caller is the assignee or a participant in the parent meeting, so inaccessible ids return 404. Use this to read status, is_completed, and due_date without re-listing.

Inputs: id (required). Returns: id, title, status, due_date, +10 more

getAgendaItemRead the details of a single agenda item. Use this when the user asks about one agenda item; use listAgendaItems to see the full agenda. Fetches a single agenda item by `{id}`. Items outside the caller's workspace and backlog (meeting-less) items are hidden as 404. Use this to read `status`, `title`, and `time_allocation_minutes` without re-listing.A
Read-onlyIdempotent
Inspect

Read the details of a single agenda item. Use this when the user asks about one agenda item; use listAgendaItems to see the full agenda.

Fetches a single agenda item by {id}. Items outside the caller's workspace and backlog (meeting-less) items are hidden as 404. Use this to read status, title, and time_allocation_minutes without re-listing.

Inputs: id (required). Returns: id, title, status, deferred, +9 more

getBacklogItemRead the details of one unscheduled backlog item. Use this when the user asks about a specific backlog item; use listBacklogItems to see all active backlog and listBacklogItemHistory for used or discarded ones. Fetches one active backlog item by `{id}`; this is the backlog handle, not `agenda_item_id`. Items that are already assigned or deleted return 404; find them in v1ListBacklogItemHistory. `talking_points` contains only the caller's private note.A
Read-onlyIdempotent
Inspect

Read the details of one unscheduled backlog item. Use this when the user asks about a specific backlog item; use listBacklogItems to see all active backlog and listBacklogItemHistory for used or discarded ones.

Fetches one active backlog item by {id}; this is the backlog handle, not agenda_item_id. Items that are already assigned or deleted return 404; find them in v1ListBacklogItemHistory. talking_points contains only the caller's private note.

Inputs: id (required). Returns: id, title, item_type, deleted_at, +13 more

getCalendarEventRead the details of one calendar event. Use this when the user asks about a specific event; use listCalendarEvents to see events in a time range. Fetches a single calendar event for the authenticated user, keyed by the `{id}` from v1ListCalendarEvents; requires the `meetings:read` scope. Use it to read the full detail of an event you already discovered via the list call. Returns 404 if the id is unknown or the event does not belong to the caller.A
Read-onlyIdempotent
Inspect

Read the details of one calendar event. Use this when the user asks about a specific event; use listCalendarEvents to see events in a time range.

Fetches a single calendar event for the authenticated user, keyed by the {id} from v1ListCalendarEvents; requires the meetings:read scope. Use it to read the full detail of an event you already discovered via the list call. Returns 404 if the id is unknown or the event does not belong to the caller.

Inputs: id (required). Returns: id, title, end_time, location, +5 more

getCanvasRead a canvas's metadata and Markdown body. Use this for a quick look at a canvas when you do not need to edit it. `content` is the stored Markdown body — the same body v1GetCanvasContent returns — but carries no ETag, and recent writes may take a moment to appear here. `content_version` counts writes to the body and is not a concurrency token. Before editing, always call v1GetCanvasContent to obtain the body and its `etag`. `role` is the caller's effective access (EDITOR or VIEWER). Inaccessible or unknown canvases return 404.A
Read-onlyIdempotent
Inspect

Read a canvas's metadata and Markdown body. Use this for a quick look at a canvas when you do not need to edit it.

content is the stored Markdown body — the same body v1GetCanvasContent returns — but carries no ETag, and recent writes may take a moment to appear here. content_version counts writes to the body and is not a concurrency token. Before editing, always call v1GetCanvasContent to obtain the body and its etag. role is the caller's effective access (EDITOR or VIEWER). Inaccessible or unknown canvases return 404.

Inputs: id (required). Returns: id, role, title, content, +9 more

getCanvasContentRead the Markdown body of a canvas together with its ETag. Use this immediately before rewriting a canvas so the update can be guarded against concurrent edits. Returns the stored body as Markdown plus a strong `etag` (also in the `ETag` header) derived from that body. Pass the `etag` unchanged as `If-Match` on v1UpdateCanvasContent; the same body always yields the same ETag. A 502 means a backend dependency was unavailable — retry later. Viewers can read; only editors can replace.A
Read-onlyIdempotent
Inspect

Read the Markdown body of a canvas together with its ETag. Use this immediately before rewriting a canvas so the update can be guarded against concurrent edits.

Returns the stored body as Markdown plus a strong etag (also in the ETag header) derived from that body. Pass the etag unchanged as If-Match on v1UpdateCanvasContent; the same body always yields the same ETag. A 502 means a backend dependency was unavailable — retry later. Viewers can read; only editors can replace.

Inputs: id (required). Returns: id, etag, content

getMeRead the current user's identity and workspace context. Use this when the user asks about who they are, their plan, or their workspace. Returns the authenticated user's public identity and the workspace context carried by the current credential. Use this to resolve the caller's user id, email, workspace id, workspace role, and plan before invoking operations that require those identifiers. The endpoint requires authentication but no resource scope, and repeated calls do not change state.A
Read-onlyIdempotent
Inspect

Read the current user's identity and workspace context. Use this when the user asks about who they are, their plan, or their workspace.

Returns the authenticated user's public identity and the workspace context carried by the current credential. Use this to resolve the caller's user id, email, workspace id, workspace role, and plan before invoking operations that require those identifiers. The endpoint requires authentication but no resource scope, and repeated calls do not change state.

Inputs: no named parameters. Returns: id, email, timezone, plan_type, +5 more

getMeetingRead the full details of a meeting. Use this when the user asks about a specific meeting by id; use listMeetings or searchMeetings to find one and listUpcomingMeetings for the next scheduled ones. Fetches a meeting by `{id}`. `summary_notes` is present when a summary exists; PRO+ callers get full text, FREE-tier callers get a truncated preview. `applied_template_ids` lists the templates applied to the meeting — updated synchronously by PATCH and asynchronously after a templated create, so poll it to confirm a create-time `template_id` finished applying. A non-null `redirect_to_meeting_id` means the meeting was merged into another. Unknown or inaccessible ids return 404.A
Read-onlyIdempotent
Inspect

Read the full details of a meeting. Use this when the user asks about a specific meeting by id; use listMeetings or searchMeetings to find one and listUpcomingMeetings for the next scheduled ones.

Fetches a meeting by {id}. summary_notes is present when a summary exists; PRO+ callers get full text, FREE-tier callers get a truncated preview. applied_template_ids lists the templates applied to the meeting — updated synchronously by PATCH and asynchronously after a templated create, so poll it to confirm a create-time template_id finished applying. A non-null redirect_to_meeting_id means the meeting was merged into another. Unknown or inaccessible ids return 404.

Inputs: id (required). Returns: id, title, status, end_time, +12 more

getMeetingAttachmentRead metadata for one raw file attachment. Use this when the user asks about a specific file; for AI context docs use getMeetingContext and for the actual bytes use manageMeetingContent download. Returns the metadata of a single attachment, keyed by the meeting `{id}` and the `{attachment_id}` from v1ListMeetingAttachments; requires the `meetings:read` scope. Metadata only: no storage location is ever exposed — fetch bytes with v1DownloadMeetingAttachment. An attachment addressed through a meeting it does not belong to, or one the caller may not see, returns 404.A
Read-onlyIdempotent
Inspect

Read metadata for one raw file attachment. Use this when the user asks about a specific file; for AI context docs use getMeetingContext and for the actual bytes use manageMeetingContent download.

Returns the metadata of a single attachment, keyed by the meeting {id} and the {attachment_id} from v1ListMeetingAttachments; requires the meetings:read scope. Metadata only: no storage location is ever exposed — fetch bytes with v1DownloadMeetingAttachment. An attachment addressed through a meeting it does not belong to, or one the caller may not see, returns 404.

Inputs: id (required), attachment_id (required). Returns: id, kind, file_name, mime_type, +8 more

getMeetingContextRead metadata for one AI context document on a meeting. Use this when the user asks about a specific context doc; for raw files use v1GetMeetingAttachment, and to read the actual text use manageMeetingContent download. Fetches metadata for the AI context document identified by meeting `{id}` and `{context_id}`. For raw file attachments use v1GetMeetingAttachment. To retrieve the actual bytes use v1DownloadMeetingContextContent. Unknown or inaccessible ids return 404.A
Read-onlyIdempotent
Inspect

Read metadata for one AI context document on a meeting. Use this when the user asks about a specific context doc; for raw files use v1GetMeetingAttachment, and to read the actual text use manageMeetingContent download.

Fetches metadata for the AI context document identified by meeting {id} and {context_id}. For raw file attachments use v1GetMeetingAttachment. To retrieve the actual bytes use v1DownloadMeetingContextContent. Unknown or inaccessible ids return 404.

Inputs: id (required), context_id (required). Returns: id, title, model_id, source_id, +10 more

getMeetingTranscriptGet the transcript of a meeting. Use this when the user asks for the transcript, meeting transcript, SRT/captions, or recording transcript; requires Elite plan. Downloads a meeting transcript as an SRT file; requires an ELITE plan and returns 402 on lower tiers. The response is `application/x-subrip` binary content, not JSON. `format` defaults to `srt`, the only supported value.A
Read-onlyIdempotent
Inspect

Get the transcript of a meeting. Use this when the user asks for the transcript, meeting transcript, SRT/captions, or recording transcript; requires Elite plan.

Downloads a meeting transcript as an SRT file; requires an ELITE plan and returns 402 on lower tiers. The response is application/x-subrip binary content, not JSON. format defaults to srt, the only supported value.

Inputs: id (required), format.

listActionItemsView follow-up tasks across meetings. Use this to see action items assigned to the caller; use getActionItem for the details of a single task. Lists action items assigned to the caller. Filter by `meeting_id` and/or `status`; paginate with `limit` and `offset` (1–100). Items assigned to other members are not returned. Use this to discover ids for v1UpdateActionItem and v1DeleteActionItem.A
Read-onlyIdempotent
Inspect

View follow-up tasks across meetings. Use this to see action items assigned to the caller; use getActionItem for the details of a single task.

Lists action items assigned to the caller. Filter by meeting_id and/or status; paginate with limit and offset (1–100). Items assigned to other members are not returned. Use this to discover ids for v1UpdateActionItem and v1DeleteActionItem.

Inputs: limit, offset, status, meeting_id. Returns: items, limit, total, offset

listAgendaItemsView all agenda items for a meeting. Use this to see the full agenda; use getAgendaItem for the details of a single item. Lists agenda items the caller can access. Filter by `meeting_id`; paginate with `limit` and `offset` (1–100). Use this to read current `sequence` ordering before inserting or reordering, and to discover ids for updates and deletes.A
Read-onlyIdempotent
Inspect

View all agenda items for a meeting. Use this to see the full agenda; use getAgendaItem for the details of a single item.

Lists agenda items the caller can access. Filter by meeting_id; paginate with limit and offset (1–100). Use this to read current sequence ordering before inserting or reordering, and to discover ids for updates and deletes.

Inputs: limit, offset, meeting_id. Returns: items, limit, total, offset

listBacklogItemHistoryView scheduled or discarded backlog items. Use this to see the backlog history; use listBacklogItems for active unscheduled items and getBacklogItem for one active item. Lists backlog items that have been assigned to a meeting or deleted (`assigned_at` or `deleted_at` set). These are terminal — they cannot be updated or reassigned. An id appears here or in v1ListBacklogItems, never both. Paginate with `limit` and `offset` (1–100).A
Read-onlyIdempotent
Inspect

View scheduled or discarded backlog items. Use this to see the backlog history; use listBacklogItems for active unscheduled items and getBacklogItem for one active item.

Lists backlog items that have been assigned to a meeting or deleted (assigned_at or deleted_at set). These are terminal — they cannot be updated or reassigned. An id appears here or in v1ListBacklogItems, never both. Paginate with limit and offset (1–100).

Inputs: limit, offset, sort_order. Returns: items, limit, total, offset

listBacklogItemsSee unscheduled agenda items in the backlog. Use this to view active backlog items; use getBacklogItem for one item's details and listBacklogItemHistory for used or discarded ones. Lists the caller's active (unscheduled) backlog items. Items assigned or deleted are excluded — use v1ListBacklogItemHistory for those. Paginate with `limit` and `offset` (1–100). Each item's `id` is the backlog handle, not `agenda_item_id`.A
Read-onlyIdempotent
Inspect

See unscheduled agenda items in the backlog. Use this to view active backlog items; use getBacklogItem for one item's details and listBacklogItemHistory for used or discarded ones.

Lists the caller's active (unscheduled) backlog items. Items assigned or deleted are excluded — use v1ListBacklogItemHistory for those. Paginate with limit and offset (1–100). Each item's id is the backlog handle, not agenda_item_id.

Inputs: limit, offset, sort_order. Returns: items, limit, total, offset

listCalendarEventsView calendar events in a time range. Use this to see multiple events; use getCalendarEvent for the details of a single event. Lists the caller's calendar events between `start_date` and `end_date` (both required ISO-8601). Paginate with `limit` and `offset` (1–100) and control ordering with `direction`. An empty result usually means no events in the range.A
Read-onlyIdempotent
Inspect

View calendar events in a time range. Use this to see multiple events; use getCalendarEvent for the details of a single event.

Lists the caller's calendar events between start_date and end_date (both required ISO-8601). Paginate with limit and offset (1–100) and control ordering with direction. An empty result usually means no events in the range.

Inputs: end_date (required), start_date (required), limit, offset, +1 more. Returns: items, limit, total, offset

listCanvasesList or search the canvases the user can access. Use this to find a canvas by title or body text before reading or editing it. Searches the stored Markdown body — the same body v1GetCanvasContent returns. Recent writes, including in-app edits (saved after a short delay), may take a few seconds to show up in `match_context` and ranking. `q` runs hybrid full-text search over title and body; omit it to list. `include_workspace=true` adds canvases shared with the whole workspace. Paginate with `limit` (1–100) and `offset`. Use v1GetCanvasContent to read a result's body with its ETag.A
Read-onlyIdempotent
Inspect

List or search the canvases the user can access. Use this to find a canvas by title or body text before reading or editing it.

Searches the stored Markdown body — the same body v1GetCanvasContent returns. Recent writes, including in-app edits (saved after a short delay), may take a few seconds to show up in match_context and ranking. q runs hybrid full-text search over title and body; omit it to list. include_workspace=true adds canvases shared with the whole workspace. Paginate with limit (1–100) and offset. Use v1GetCanvasContent to read a result's body with its ETag.

Inputs: q, limit, offset, include_workspace. Returns: items, limit, total, offset

listMeetingAttachmentsList raw files attached to a meeting. Use this to see uploaded files; use manageMeetingContent download to retrieve the bytes and manageMeetingContent delete to remove. Lists raw file attachments on a meeting (`{id}`). These are stored as-is, not normalized or AI-visible; use v1ListMeetingContext for AI context documents. Paginate with `limit` (1–100, default 25) and `offset`. Returns 404 for an unknown or inaccessible meeting.A
Read-onlyIdempotent
Inspect

List raw files attached to a meeting. Use this to see uploaded files; use manageMeetingContent download to retrieve the bytes and manageMeetingContent delete to remove.

Lists raw file attachments on a meeting ({id}). These are stored as-is, not normalized or AI-visible; use v1ListMeetingContext for AI context documents. Paginate with limit (1–100, default 25) and offset. Returns 404 for an unknown or inaccessible meeting.

Inputs: id (required), limit, offset. Returns: items, limit, total, offset

listMeetingContactsFind workspace contacts for meeting invitations or name-to-email resolution. Use this when the user gives only a name or initials and you need the matching email/address; pass any meeting id and an optional q. Use manageMeetingParticipants add to actually add them to a meeting. Searches workspace contacts for a meeting. Pass the meeting `id` and optional `q` (name/email substring). Use returned `email` as `guest_email` in v1AddMeetingParticipants. Does not expose registered-user status.A
Read-only
Inspect

Find workspace contacts for meeting invitations or name-to-email resolution. Use this when the user gives only a name or initials and you need the matching email/address; pass any meeting id and an optional q. Use manageMeetingParticipants add to actually add them to a meeting.

Searches workspace contacts for a meeting. Pass the meeting id and optional q (name/email substring). Use returned email as guest_email in v1AddMeetingParticipants. Does not expose registered-user status.

Inputs: id (required), q, limit, offset. Returns: items, limit, total, offset

listMeetingContextList AI context documents on a meeting. Use this to see background docs; use getMeetingContext for one doc's metadata and manageMeetingContent download for the actual text; raw files are listed with listMeetingAttachments. Lists context documents on a meeting. Use as the discovery call before v1GetMeetingContext or v1DownloadMeetingContextContent. Text-biased AI-visible documents only; list raw files with v1ListMeetingAttachments. Paginate with `limit`/`offset` (clamped 1–100). 404 unknown/out-of-workspace meeting.A
Read-onlyIdempotent
Inspect

List AI context documents on a meeting. Use this to see background docs; use getMeetingContext for one doc's metadata and manageMeetingContent download for the actual text; raw files are listed with listMeetingAttachments.

Lists context documents on a meeting. Use as the discovery call before v1GetMeetingContext or v1DownloadMeetingContextContent. Text-biased AI-visible documents only; list raw files with v1ListMeetingAttachments. Paginate with limit/offset (clamped 1–100). 404 unknown/out-of-workspace meeting.

Inputs: id (required), limit, offset. Returns: items, limit, total, offset

listMeetingParticipantsSee who is in a meeting. Use this to view the participant list; use manageMeetingParticipants to add, remove, or change roles. Lists participants of a meeting (`{id}`). Paginate with `limit` and `offset` (1–100). Each item's user id is the value passed to v1RemoveMeetingParticipant. Returns 404 for an unknown or inaccessible meeting.A
Read-onlyIdempotent
Inspect

See who is in a meeting. Use this to view the participant list; use manageMeetingParticipants to add, remove, or change roles.

Lists participants of a meeting ({id}). Paginate with limit and offset (1–100). Each item's user id is the value passed to v1RemoveMeetingParticipant. Returns 404 for an unknown or inaccessible meeting.

Inputs: id (required), limit, offset. Returns: items, limit, total, offset

listMeetingsBrowse or paginate the caller's meetings. Use this to see all meetings; prefer searchMeetings when the user mentions keyword, date, participant, or status, and listUpcomingMeetings for the soonest future ones. Lists the caller's workspace meetings, newest first. Paginate with `limit` and `offset`; the response `total` tells you when to stop. Items are summary views and never include `summary_notes`; use v1GetMeeting for full details.A
Read-onlyIdempotent
Inspect

Browse or paginate the caller's meetings. Use this to see all meetings; prefer searchMeetings when the user mentions keyword, date, participant, or status, and listUpcomingMeetings for the soonest future ones.

Lists the caller's workspace meetings, newest first. Paginate with limit and offset; the response total tells you when to stop. Items are summary views and never include summary_notes; use v1GetMeeting for full details.

Inputs: limit, offset. Returns: items, limit, total, offset

listMeetingTemplatesBrowse meeting templates. Use this to see available templates; use the returned id with manageMeetings create or update to seed a meeting from a template. Lists meeting templates usable by the caller (system, vertical, workspace, and personal). A template bundles agenda items, participants, facilitator prompts, and notes; applying one materializes that content onto a meeting additively (existing content is preserved). Call this to get a `template_id`, then pass it to v1CreateMeeting (applied asynchronously after creation — confirm via `applied_template_ids` on v1GetMeeting) or v1UpdateMeeting (applied synchronously). Paginate with `limit` (1–100, default 20) and `offset`. No paid-tier gating.A
Read-onlyIdempotent
Inspect

Browse meeting templates. Use this to see available templates; use the returned id with manageMeetings create or update to seed a meeting from a template.

Lists meeting templates usable by the caller (system, vertical, workspace, and personal). A template bundles agenda items, participants, facilitator prompts, and notes; applying one materializes that content onto a meeting additively (existing content is preserved). Call this to get a template_id, then pass it to v1CreateMeeting (applied asynchronously after creation — confirm via applied_template_ids on v1GetMeeting) or v1UpdateMeeting (applied synchronously). Paginate with limit (1–100, default 20) and offset. No paid-tier gating.

Inputs: limit, offset. Returns: items, limit, total, offset

listUpcomingMeetingsSee the caller's soonest future meetings. Use this when the user asks what is coming up; use listMeetings to browse all meetings and searchMeetings to filter by criteria. Lists the caller's upcoming (future) meetings, soonest first. Paginate with `limit` and `offset`; the response `total` tells you when to stop. Items are summary views; use v1GetMeeting for full details.A
Read-onlyIdempotent
Inspect

See the caller's soonest future meetings. Use this when the user asks what is coming up; use listMeetings to browse all meetings and searchMeetings to filter by criteria.

Lists the caller's upcoming (future) meetings, soonest first. Paginate with limit and offset; the response total tells you when to stop. Items are summary views; use v1GetMeeting for full details.

Inputs: limit, offset. Returns: items, limit, total, offset

listUserTokensView the caller's active personal access tokens. Use this to see tokens; use deleteUserToken to revoke one. Lists the caller's own non-revoked personal access tokens. No special scope or role required. Returns a masked prefix plus scopes and timestamps; the full secret is never returned. Paginate with `limit`/`offset` (1–100). Token `id` is for v1DeleteUserToken — it is not the secret token string.A
Read-onlyIdempotent
Inspect

View the caller's active personal access tokens. Use this to see tokens; use deleteUserToken to revoke one.

Lists the caller's own non-revoked personal access tokens. No special scope or role required. Returns a masked prefix plus scopes and timestamps; the full secret is never returned. Paginate with limit/offset (1–100). Token id is for v1DeleteUserToken — it is not the secret token string.

Inputs: limit, offset. Returns: items, limit, total, offset

manageActionItemsCreate, update, and delete follow-up tasks (action items) tied to meetings. Use this for action-item lifecycle; to manage the parent meeting, agenda, or participants, use those dedicated tools. Set `action` to one of: create, delete, update. Then provide the fields for the selected action. action=create: Add a follow-up task to a meeting. Use this when the user wants to track work that came out of a meeting. Creates a follow-up action item in an accessible meeting. `meeting_id` and `title` are required; unknown `meeting_id` returns 404. Optional `status` must be one of `needs_review`, `accepted`, `in_progress`, `blocked`, `completed`, `cancelled`. The 201 body returns the `id` for v1UpdateActionItem or v1DeleteActionItem. Idempotent with `Idempotency-Key`; blind retries can duplicate without it. action=delete: Remove a follow-up task. Use this when the user wants to delete an action item. Soft-deletes an action item keyed by `{id}`. Returns 204 with no body. Unknown or inaccessible ids return 404. The call is effectively idempotent: a second delete of the same id also 404s, so retries are safe. action=update: Change a follow-up task's status or details. Use this when the user wants to update an action item. Partial update (PATCH) — only send fields to change. `status` drives a state machine, so set it explicitly rather than inferring from `is_completed`. This call does NOT honor `Idempotency-Key`; a blind retry may apply the same change twice. Returns 404 for an unknown or inaccessible id.A
Destructive
Inspect

Create, update, and delete follow-up tasks (action items) tied to meetings. Use this for action-item lifecycle; to manage the parent meeting, agenda, or participants, use those dedicated tools.

Set action to one of: create, delete, update. Then provide the fields for the selected action.

action=create: Add a follow-up task to a meeting. Use this when the user wants to track work that came out of a meeting.

Creates a follow-up action item in an accessible meeting. meeting_id and title are required; unknown meeting_id returns 404. Optional status must be one of needs_review, accepted, in_progress, blocked, completed, cancelled. The 201 body returns the id for v1UpdateActionItem or v1DeleteActionItem. Idempotent with Idempotency-Key; blind retries can duplicate without it.

action=delete: Remove a follow-up task. Use this when the user wants to delete an action item.

Soft-deletes an action item keyed by {id}. Returns 204 with no body. Unknown or inaccessible ids return 404. The call is effectively idempotent: a second delete of the same id also 404s, so retries are safe.

action=update: Change a follow-up task's status or details. Use this when the user wants to update an action item.

Partial update (PATCH) — only send fields to change. status drives a state machine, so set it explicitly rather than inferring from is_completed. This call does NOT honor Idempotency-Key; a blind retry may apply the same change twice. Returns 404 for an unknown or inaccessible id.

Inputs: action (required), id, title, status, +8 more.

manageCalendarEventsCreate a meeting from a calendar event, or link/unlink an existing meeting with a calendar event. Use this for calendar integration; to manage meeting content or participants, use those dedicated tools. Set `action` to one of: createFromEvent, link, unlink. Then provide the fields for the selected action. action=createFromEvent: Turn a calendar event into a Contio meeting. Use this when the user wants to import an existing calendar event. Creates a meeting from the calendar event `{id}`; requires `calendar:write`. If a meeting already exists for the event, the existing meeting is returned with 200 instead of 201. Returns 404 for an unknown or inaccessible event. `Idempotency-Key` replays the original 2xx response. action=link: Associate an existing meeting with a calendar event. Use this when the user wants to sync a meeting to a calendar. Links a meeting (`{id}`) to the `calendar_event_id` in the body. Accepted with `calendar:write` or `meetings:write`. Returns 409 if the event is linked to another meeting, 400 if the meeting is already linked elsewhere or workspaces differ. Unlink first with v1UnlinkCalendarEvent to move a link. action=unlink: Detach a meeting from its calendar event. Use this when the user wants to stop syncing a meeting to a calendar. Removes the calendar-event link from the meeting (`{id}`). Accepted with `calendar:write` or `meetings:write`. Unlinking a meeting with no link is a no-op that still returns 200. Returns 403 for non-owner/non-editor and 404 for an unknown meeting.A
Idempotent
Inspect

Create a meeting from a calendar event, or link/unlink an existing meeting with a calendar event. Use this for calendar integration; to manage meeting content or participants, use those dedicated tools.

Set action to one of: createFromEvent, link, unlink. Then provide the fields for the selected action.

action=createFromEvent: Turn a calendar event into a Contio meeting. Use this when the user wants to import an existing calendar event.

Creates a meeting from the calendar event {id}; requires calendar:write. If a meeting already exists for the event, the existing meeting is returned with 200 instead of 201. Returns 404 for an unknown or inaccessible event. Idempotency-Key replays the original 2xx response.

action=link: Associate an existing meeting with a calendar event. Use this when the user wants to sync a meeting to a calendar.

Links a meeting ({id}) to the calendar_event_id in the body. Accepted with calendar:write or meetings:write. Returns 409 if the event is linked to another meeting, 400 if the meeting is already linked elsewhere or workspaces differ. Unlink first with v1UnlinkCalendarEvent to move a link.

action=unlink: Detach a meeting from its calendar event. Use this when the user wants to stop syncing a meeting to a calendar.

Removes the calendar-event link from the meeting ({id}). Accepted with calendar:write or meetings:write. Unlinking a meeting with no link is a no-op that still returns 200. Returns 403 for non-owner/non-editor and 404 for an unknown meeting.

Inputs: action (required), id, Idempotency-Key, calendar_event_id.

manageCanvasesCreate, rename, rewrite, or delete canvases (collaborative Markdown documents). Use `action=replaceContent` with the `If-Match` ETag from getCanvasContent to rewrite the body; use `update` for title or workspace access only. To read a canvas, use getCanvas or getCanvasContent. Set `action` to one of: create, delete, replaceContent, update. Then provide the fields for the selected action. action=create: Create a new canvas, optionally seeded with Markdown or from a template. Use this when the user wants a new document to write or collaborate in. `title` is required (1–255 chars). Supply either `content` (Markdown) or `template_id`; when a template is given, `content` is ignored and the caller must be able to read the template (else 404 `template_not_found`). `workspace_canvas_role` defaults to `NOACCESS`; `VIEWER` shares read access with the whole workspace. The 201 body includes the canvas plus the initial `etag` for a first v1UpdateCanvasContent. Send an `Idempotency-Key` to avoid duplicates on retry. 402 means the plan lacks canvases; 422 means the Markdown could not be converted. action=delete: Delete a canvas the user owns. Use this only when the user explicitly wants a canvas removed. Soft-deletes the canvas row and best-effort removes the collaborative document. Owner only: any non-owner who can see the canvas (editor or viewer) gets 403; unknown or inaccessible canvases get 404. Returns 204; a repeat delete 404s, so retries are safe. There is no restore through this API. action=replaceContent: Replace the entire body of a canvas with new Markdown, guarded by the ETag from the last read. Use this to rewrite a canvas after reading it with getCanvasContent. Full replacement, not a patch: send the complete new body in `content` (non-empty; use v1DeleteCanvas to remove a canvas). `If-Match` is required and must be the `etag` from v1GetCanvasContent or a prior write — missing gives 400 `checksum_required`; stale gives 409 `checksum_mismatch` with the current ETag in the `ETag` header. On 409, re-read the content, re-apply the user's intent to the fresh body, and retry once with the new ETag; never merge blindly. The 200 body carries the new `etag` for the next write. Requires editor access; viewers get 404. The body is stored exactly as sent — nothing reformats it — so the next read returns the same text and ETag. A later in-app or agent edit may reformat unrelated lines of the body and bump `content_version`, which invalidates any ETag you hold: the next `If-Match` then gets 409 `checksum_mismatch`, so re-read before writing again. 422 `validation_error` means the body was rejected — typically an attachment reference (`rome-att://`) that is malformed, points at another canvas, or no longer resolves; fix the body rather than retrying it unchanged. A 502 means a backend dependency was unavailable — retry later. action=update: Rename a canvas or change its workspace-wide access. Use this for metadata changes; to change the body, use the replaceContent action. Partial update (PATCH) of `title` (1–255 chars) and/or `workspace_canvas_role` (`VIEWER` or `NOACCESS`); at least one is required. Scalar last-writer-wins — no `If-Match` is needed and the body is untouched. Requires editor access; viewers and unknown canvases return 404. 402 means the plan lacks canvases.A
DestructiveIdempotent
Inspect

Create, rename, rewrite, or delete canvases (collaborative Markdown documents). Use action=replaceContent with the If-Match ETag from getCanvasContent to rewrite the body; use update for title or workspace access only. To read a canvas, use getCanvas or getCanvasContent.

Set action to one of: create, delete, replaceContent, update. Then provide the fields for the selected action.

action=create: Create a new canvas, optionally seeded with Markdown or from a template. Use this when the user wants a new document to write or collaborate in.

title is required (1–255 chars). Supply either content (Markdown) or template_id; when a template is given, content is ignored and the caller must be able to read the template (else 404 template_not_found). workspace_canvas_role defaults to NOACCESS; VIEWER shares read access with the whole workspace. The 201 body includes the canvas plus the initial etag for a first v1UpdateCanvasContent. Send an Idempotency-Key to avoid duplicates on retry. 402 means the plan lacks canvases; 422 means the Markdown could not be converted.

action=delete: Delete a canvas the user owns. Use this only when the user explicitly wants a canvas removed.

Soft-deletes the canvas row and best-effort removes the collaborative document. Owner only: any non-owner who can see the canvas (editor or viewer) gets 403; unknown or inaccessible canvases get 404. Returns 204; a repeat delete 404s, so retries are safe. There is no restore through this API.

action=replaceContent: Replace the entire body of a canvas with new Markdown, guarded by the ETag from the last read. Use this to rewrite a canvas after reading it with getCanvasContent.

Full replacement, not a patch: send the complete new body in content (non-empty; use v1DeleteCanvas to remove a canvas). If-Match is required and must be the etag from v1GetCanvasContent or a prior write — missing gives 400 checksum_required; stale gives 409 checksum_mismatch with the current ETag in the ETag header. On 409, re-read the content, re-apply the user's intent to the fresh body, and retry once with the new ETag; never merge blindly. The 200 body carries the new etag for the next write. Requires editor access; viewers get 404. The body is stored exactly as sent — nothing reformats it — so the next read returns the same text and ETag. A later in-app or agent edit may reformat unrelated lines of the body and bump content_version, which invalidates any ETag you hold: the next If-Match then gets 409 checksum_mismatch, so re-read before writing again. 422 validation_error means the body was rejected — typically an attachment reference (rome-att://) that is malformed, points at another canvas, or no longer resolves; fix the body rather than retrying it unchanged. A 502 means a backend dependency was unavailable — retry later.

action=update: Rename a canvas or change its workspace-wide access. Use this for metadata changes; to change the body, use the replaceContent action.

Partial update (PATCH) of title (1–255 chars) and/or workspace_canvas_role (VIEWER or NOACCESS); at least one is required. Scalar last-writer-wins — no If-Match is needed and the body is untouched. Requires editor access; viewers and unknown canvases return 404. 402 means the plan lacks canvases.

Inputs: action (required), id, title, content, +4 more.

manageMeetingContentUpload, download, or remove raw file attachments and AI context documents for a meeting. Use `contentType=attachment` for binary files such as PDFs and images; use `contentType=context` for text-biased background material such as company profiles or meeting notes. To manage agenda or action items, use those dedicated tools. Set `contentType` to select the variant and `action` to one of: delete, download, upload. Then provide the fields for the selected combination. contentType=attachment, action=delete: Remove a raw file attachment from a meeting. Use this when the user wants to delete an uploaded file. Deletes an attachment (`{attachment_id}`) from a meeting (`{id}`) together with its stored bytes; requires the `meetings:write` scope. Irreversible. Only a caller with edit rights on the attachment may delete it (403 otherwise), and unknown or cross-meeting ids return 404. contentType=attachment, action=download: Get the raw file bytes of a meeting attachment. Use this when the user wants to retrieve a binary file. Returns the raw bytes of the attachment identified by meeting `{id}` and `{attachment_id}`. Through the MCP gateway the response is a JSON object with `base64`, `filename`, `mime_type`, and `size`. Link attachments return 400. Unknown or inaccessible ids return 404. contentType=attachment, action=upload: Attach a raw or binary file to a meeting. Use this when the user wants to upload a PDF, image, spreadsheet, or other non-text file as a raw attachment; for AI-readable text background material, use the context upload instead. Uploads a raw file to a meeting (`{id}`) as base64. Only `file` is required; `kind` accepts only `file`. Files are stored verbatim, capped at 50MB (413 if exceeded). The 201 body returns the attachment `id`. Not idempotent — retries upload again. contentType=context, action=delete: Remove an AI context document from a meeting. Use this when the user wants to delete background material; raw files are removed with the attachment delete instead. Soft-deletes the AI context document identified by meeting `{id}` and `{context_id}`. For raw file attachments use v1DeleteMeetingAttachment. Returns 204. The call is effectively idempotent: a repeat delete 404s, so retries are safe. contentType=context, action=download: Get the content of an AI context document. Use this when the user wants to retrieve background material; for raw files use the attachment download instead. Returns the stored content of the AI context document identified by meeting `{id}` and `{context_id}`. The sanitized/converted copy is returned when available, otherwise the original bytes. Use v1GetMeetingContext for metadata. Unknown or inaccessible ids return 404. contentType=context, action=upload: Add a text-biased background document the AI can reference. Use this when the user wants to upload company profiles, notes, transcripts, or other text context; it requires `source_format` such as `markdown`, `plain_text`, or `json`. For PDFs, images, and other binary files, use the attachment upload instead. Uploads text-biased material to a meeting. `file` must be base64-encoded; `file_name`/`file_type` override filename/MIME, otherwise `title`/`context_type` are used. `source_format` (e.g. `markdown`, `plain_text`, `json`) is required. Capped at 4.5MB; per-meeting cap may return 400. Not idempotent.A
Destructive
Inspect

Upload, download, or remove raw file attachments and AI context documents for a meeting. Use contentType=attachment for binary files such as PDFs and images; use contentType=context for text-biased background material such as company profiles or meeting notes. To manage agenda or action items, use those dedicated tools.

Set contentType to select the variant and action to one of: delete, download, upload. Then provide the fields for the selected combination.

contentType=attachment, action=delete: Remove a raw file attachment from a meeting. Use this when the user wants to delete an uploaded file.

Deletes an attachment ({attachment_id}) from a meeting ({id}) together with its stored bytes; requires the meetings:write scope. Irreversible. Only a caller with edit rights on the attachment may delete it (403 otherwise), and unknown or cross-meeting ids return 404.

contentType=attachment, action=download: Get the raw file bytes of a meeting attachment. Use this when the user wants to retrieve a binary file.

Returns the raw bytes of the attachment identified by meeting {id} and {attachment_id}. Through the MCP gateway the response is a JSON object with base64, filename, mime_type, and size. Link attachments return 400. Unknown or inaccessible ids return 404.

contentType=attachment, action=upload: Attach a raw or binary file to a meeting. Use this when the user wants to upload a PDF, image, spreadsheet, or other non-text file as a raw attachment; for AI-readable text background material, use the context upload instead.

Uploads a raw file to a meeting ({id}) as base64. Only file is required; kind accepts only file. Files are stored verbatim, capped at 50MB (413 if exceeded). The 201 body returns the attachment id. Not idempotent — retries upload again.

contentType=context, action=delete: Remove an AI context document from a meeting. Use this when the user wants to delete background material; raw files are removed with the attachment delete instead.

Soft-deletes the AI context document identified by meeting {id} and {context_id}. For raw file attachments use v1DeleteMeetingAttachment. Returns 204. The call is effectively idempotent: a repeat delete 404s, so retries are safe.

contentType=context, action=download: Get the content of an AI context document. Use this when the user wants to retrieve background material; for raw files use the attachment download instead.

Returns the stored content of the AI context document identified by meeting {id} and {context_id}. The sanitized/converted copy is returned when available, otherwise the original bytes. Use v1GetMeetingContext for metadata. Unknown or inaccessible ids return 404.

contentType=context, action=upload: Add a text-biased background document the AI can reference. Use this when the user wants to upload company profiles, notes, transcripts, or other text context; it requires source_format such as markdown, plain_text, or json. For PDFs, images, and other binary files, use the attachment upload instead.

Uploads text-biased material to a meeting. file must be base64-encoded; file_name/file_type override filename/MIME, otherwise title/context_type are used. source_format (e.g. markdown, plain_text, json) is required. Capped at 4.5MB; per-meeting cap may return 400. Not idempotent.

Inputs: action (required), id, file, kind, +9 more.

manageMeetingItemsManage agenda and backlog items in a meeting. Use this when the user wants to add, update, remove, or schedule an agenda or backlog item. Do not use it to manage the meeting itself, participants, or action items — those are handled by separate tools. Set `backlog` to select the variant and `action` to one of: assign, create, delete, update. Then provide the fields for the selected combination. backlog=false, action=create: Add an item to a meeting's agenda. Use this when the user wants to schedule an agenda item. `meeting_id`, `title`, and `item_type` are required. A 409 means the meeting has already ended and cannot accept more agenda items; do not retry. The 201 body returns the created item `id`. Use an `Idempotency-Key` to prevent duplicates. backlog=false, action=delete: Remove an item from a meeting's agenda. Use this when the user wants to delete an agenda item. Deletes an agenda item in the caller's workspace, keyed by the `{id}` from v1ListAgendaItems; requires the `meetings:write` scope. Returns 204 No Content on success with no body. Deleting an unknown id or one outside the caller's workspace returns 404. The operation is effectively idempotent — a repeat delete of the same id simply 404s — so retries after a network error are safe. backlog=false, action=update: Modify an agenda item in a meeting. Use this when the user wants to change an item's title, description, or time allocation. Partial update (PATCH) of an agenda item. Requires `meetings:write` and the `id` from v1ListAgendaItems. 404 for unknown/cross-workspace ids. Not idempotent — re-read before retrying. `DEFERRED` skips the item in the current run; it does NOT move to the backlog. To move to backlog, delete and create a backlog item. backlog=true, action=assign: Schedule an unscheduled agenda item onto a meeting. Use this when the user wants to move a backlog item onto a meeting's agenda. Schedules an active backlog item onto a meeting. Requires `meeting_id` body field and `meetings:write` scope. Returns the new `agenda_item_id`; the backlog item is closed out and moves to v1ListBacklogItemHistory. Edit the created agenda item with v1UpdateAgendaItem. 404 unknown/out-of-workspace meeting, 400 missing `meeting_id`. backlog=true, action=create: Capture an unscheduled agenda item in the backlog. Use this when the user wants to save an item for later without putting it on a meeting. `title` and `item_type` are required; valid values are `DISCUSSION`, `QUESTIONS_TO_ANSWER`, `BREAK`, and `ADJOURN`. No `meeting_id` is used; assign to a meeting later with v1AssignBacklogItem. The 201 body returns the new `id`; use an `Idempotency-Key` to avoid duplicates. backlog=true, action=delete: Discard an unscheduled agenda item from the backlog. Use this when the user wants to permanently remove a backlog item. Soft-deletes the active backlog item keyed by `{id}`; removed items move to v1ListBacklogItemHistory with `deleted_at` set. Returns 204. There is no restore operation. The call is effectively idempotent: a repeat delete 404s, so retries are safe. backlog=true, action=update: Edit an unscheduled agenda item in the backlog. Use this when the user wants to change a backlog item's content. Partial update (PATCH) of an active backlog item. Omitted fields are left as-is; empty values clear the field. `item_type` is restricted to `DISCUSSION`, `QUESTIONS_TO_ANSWER`, `BREAK`, and `ADJOURN`. Already-assigned or deleted items return 404; find them in v1ListBacklogItemHistory.A
Destructive
Inspect

Manage agenda and backlog items in a meeting. Use this when the user wants to add, update, remove, or schedule an agenda or backlog item. Do not use it to manage the meeting itself, participants, or action items — those are handled by separate tools.

Set backlog to select the variant and action to one of: assign, create, delete, update. Then provide the fields for the selected combination.

backlog=false, action=create: Add an item to a meeting's agenda. Use this when the user wants to schedule an agenda item.

meeting_id, title, and item_type are required. A 409 means the meeting has already ended and cannot accept more agenda items; do not retry. The 201 body returns the created item id. Use an Idempotency-Key to prevent duplicates.

backlog=false, action=delete: Remove an item from a meeting's agenda. Use this when the user wants to delete an agenda item.

Deletes an agenda item in the caller's workspace, keyed by the {id} from v1ListAgendaItems; requires the meetings:write scope. Returns 204 No Content on success with no body. Deleting an unknown id or one outside the caller's workspace returns 404. The operation is effectively idempotent — a repeat delete of the same id simply 404s — so retries after a network error are safe.

backlog=false, action=update: Modify an agenda item in a meeting. Use this when the user wants to change an item's title, description, or time allocation.

Partial update (PATCH) of an agenda item. Requires meetings:write and the id from v1ListAgendaItems. 404 for unknown/cross-workspace ids. Not idempotent — re-read before retrying. DEFERRED skips the item in the current run; it does NOT move to the backlog. To move to backlog, delete and create a backlog item.

backlog=true, action=assign: Schedule an unscheduled agenda item onto a meeting. Use this when the user wants to move a backlog item onto a meeting's agenda.

Schedules an active backlog item onto a meeting. Requires meeting_id body field and meetings:write scope. Returns the new agenda_item_id; the backlog item is closed out and moves to v1ListBacklogItemHistory. Edit the created agenda item with v1UpdateAgendaItem. 404 unknown/out-of-workspace meeting, 400 missing meeting_id.

backlog=true, action=create: Capture an unscheduled agenda item in the backlog. Use this when the user wants to save an item for later without putting it on a meeting.

title and item_type are required; valid values are DISCUSSION, QUESTIONS_TO_ANSWER, BREAK, and ADJOURN. No meeting_id is used; assign to a meeting later with v1AssignBacklogItem. The 201 body returns the new id; use an Idempotency-Key to avoid duplicates.

backlog=true, action=delete: Discard an unscheduled agenda item from the backlog. Use this when the user wants to permanently remove a backlog item.

Soft-deletes the active backlog item keyed by {id}; removed items move to v1ListBacklogItemHistory with deleted_at set. Returns 204. There is no restore operation. The call is effectively idempotent: a repeat delete 404s, so retries are safe.

backlog=true, action=update: Edit an unscheduled agenda item in the backlog. Use this when the user wants to change a backlog item's content.

Partial update (PATCH) of an active backlog item. Omitted fields are left as-is; empty values clear the field. item_type is restricted to DISCUSSION, QUESTIONS_TO_ANSWER, BREAK, and ADJOURN. Already-assigned or deleted items return 404; find them in v1ListBacklogItemHistory.

Inputs: action (required), id, title, status, +9 more.

manageMeetingParticipantsAdd, remove, or change the role of participants in a meeting. Use this for participant management; to create or edit the meeting itself, use manageMeetings. Set `action` to one of: add, remove, updateRole. Then provide the fields for the selected action. action=add: Invite people to an existing meeting. Use this when the user wants to add participants; do not re-add the caller. If you only have a name or initials, use listMeetingContacts with any meeting id to resolve the email first. Requires the meeting `{id}` and a `participants` array. Adding a participant who is already on the meeting is a no-op for that entry; do not re-add the caller. Use an `Idempotency-Key` to prevent duplicate adds on retries. action=remove: Remove someone from a meeting. Use this when the user wants to revoke a participant's access. Removes a participant (`{userId}` from v1ListMeetingParticipants) from a workspace-owned meeting. Requires `meetings:write`. 204 on success; 404 if not on the meeting or unknown. Idempotent — safe to retry. action=updateRole: Change a participant's role in a meeting. Use this when the user wants to switch someone between EDITOR and VIEWER. Updates an existing participant's role to `EDITOR` or `VIEWER` on meeting `{id}`. Both the meeting `{id}` and the target `{userId}` path parameters are required, and the user must already be a participant (use v1AddMeetingParticipants to add someone). The call is idempotent: retries converge on the requested role.A
DestructiveIdempotent
Inspect

Add, remove, or change the role of participants in a meeting. Use this for participant management; to create or edit the meeting itself, use manageMeetings.

Set action to one of: add, remove, updateRole. Then provide the fields for the selected action.

action=add: Invite people to an existing meeting. Use this when the user wants to add participants; do not re-add the caller. If you only have a name or initials, use listMeetingContacts with any meeting id to resolve the email first.

Requires the meeting {id} and a participants array. Adding a participant who is already on the meeting is a no-op for that entry; do not re-add the caller. Use an Idempotency-Key to prevent duplicate adds on retries.

action=remove: Remove someone from a meeting. Use this when the user wants to revoke a participant's access.

Removes a participant ({userId} from v1ListMeetingParticipants) from a workspace-owned meeting. Requires meetings:write. 204 on success; 404 if not on the meeting or unknown. Idempotent — safe to retry.

action=updateRole: Change a participant's role in a meeting. Use this when the user wants to switch someone between EDITOR and VIEWER.

Updates an existing participant's role to EDITOR or VIEWER on meeting {id}. Both the meeting {id} and the target {userId} path parameters are required, and the user must already be a participant (use v1AddMeetingParticipants to add someone). The call is idempotent: retries converge on the requested role.

Inputs: action (required), id, role, userId, +2 more.

manageMeetingsCreate, update, and delete meetings in the workspace. Use this when the user wants to schedule, edit, or cancel a meeting. To manage participants, agenda/backlog items, or action items, use those dedicated tools. Set `action` to one of: create, delete, update. Then provide the fields for the selected action. action=create: Start a new meeting in the workspace. Use this when the user wants to schedule a meeting; the caller is added as owner automatically. Only `title` is required. `start_time` and `end_time` are optional ISO-8601; set `is_instant: true` for an ad-hoc meeting starting now. The caller is added as owner, so do not re-add them via v1AddMeetingParticipants. Pass `template_id` (from listMeetingTemplates) to seed the meeting from a template: the template is linked at create and applied asynchronously — the create response's `applied_template_ids` will not include it yet; poll v1GetMeeting until the id appears before treating the agenda as seeded. Returns 201 with the meeting `id`; use an `Idempotency-Key` to prevent duplicates. action=delete: Remove a meeting owned by the caller. Use this when the user wants to cancel or delete a meeting. Soft-deletes a meeting keyed by `{id}`; only the owner may delete it (403 for non-owners). Unknown or inaccessible ids return 404. Returns 204. The call is effectively idempotent: a repeat delete 404s, so retries are safe. action=update: Modify an existing meeting. Use this when the user wants to change a meeting's fields such as title or time. Partial update (PATCH) of a workspace-owned meeting. Omitted fields are left untouched. `start_time`/`end_time` are ISO-8601 with timezone; nulling start makes the meeting untimed and end open-ended. `end_time` must follow the effective start. `template_id` applies the template synchronously — its agenda items, participants, and prompts are added additively (existing content is preserved), and re-sending an id already in `applied_template_ids` is a no-op. Body must contain at least one field. 404/403/402/503 for unknown/inaccessible, no edit access, plan-gated `template_id`, or the template backend unavailable.A
DestructiveIdempotent
Inspect

Create, update, and delete meetings in the workspace. Use this when the user wants to schedule, edit, or cancel a meeting. To manage participants, agenda/backlog items, or action items, use those dedicated tools.

Set action to one of: create, delete, update. Then provide the fields for the selected action.

action=create: Start a new meeting in the workspace. Use this when the user wants to schedule a meeting; the caller is added as owner automatically.

Only title is required. start_time and end_time are optional ISO-8601; set is_instant: true for an ad-hoc meeting starting now. The caller is added as owner, so do not re-add them via v1AddMeetingParticipants. Pass template_id (from listMeetingTemplates) to seed the meeting from a template: the template is linked at create and applied asynchronously — the create response's applied_template_ids will not include it yet; poll v1GetMeeting until the id appears before treating the agenda as seeded. Returns 201 with the meeting id; use an Idempotency-Key to prevent duplicates.

action=delete: Remove a meeting owned by the caller. Use this when the user wants to cancel or delete a meeting.

Soft-deletes a meeting keyed by {id}; only the owner may delete it (403 for non-owners). Unknown or inaccessible ids return 404. Returns 204. The call is effectively idempotent: a repeat delete 404s, so retries are safe.

action=update: Modify an existing meeting. Use this when the user wants to change a meeting's fields such as title or time.

Partial update (PATCH) of a workspace-owned meeting. Omitted fields are left untouched. start_time/end_time are ISO-8601 with timezone; nulling start makes the meeting untimed and end open-ended. end_time must follow the effective start. template_id applies the template synchronously — its agenda items, participants, and prompts are added additively (existing content is preserved), and re-sending an id already in applied_template_ids is a no-op. Body must contain at least one field. 404/403/402/503 for unknown/inaccessible, no edit access, plan-gated template_id, or the template backend unavailable.

Inputs: action (required), id, title, end_time, +5 more.

searchMeetingsFind meetings matching filters. Use this when the user gives keyword, date, participant, or status criteria; use listMeetings for plain browsing or listUpcomingMeetings for the next scheduled ones. If the user only has a name or initials, use listMeetingContacts with any meeting id to resolve the email first, then search by participant_emails. Searches meetings the caller can access: owned, directly invited to, or shared with their workspace (link-only shares are excluded). Filters: `q` (title/alias substring plus full-text over the title and the meeting summary and internal notes, so a term appearing only in a summary matches; quoted phrases and `-exclusions` supported), `start_time_from`/`start_time_to` (ISO 8601 with timezone), `status` (`scheduled` or `completed`), `title_contains`, `participant_emails` (comma-separated), and `has_action_items`. All optional and combined with AND. When `q` is given, results are ordered by relevance (full-text rank plus a title-substring boost), not recency, and items may carry `match_context` — a highlighted snippet from the notes passage that matched; it is absent for title/alias-only matches and filter-only calls. Paginate with `limit`/`offset`. `summary_notes` is not returned here; fetch via v1GetMeeting.A
Read-onlyIdempotent
Inspect

Find meetings matching filters. Use this when the user gives keyword, date, participant, or status criteria; use listMeetings for plain browsing or listUpcomingMeetings for the next scheduled ones. If the user only has a name or initials, use listMeetingContacts with any meeting id to resolve the email first, then search by participant_emails.

Searches meetings the caller can access: owned, directly invited to, or shared with their workspace (link-only shares are excluded). Filters: q (title/alias substring plus full-text over the title and the meeting summary and internal notes, so a term appearing only in a summary matches; quoted phrases and -exclusions supported), start_time_from/start_time_to (ISO 8601 with timezone), status (scheduled or completed), title_contains, participant_emails (comma-separated), and has_action_items. All optional and combined with AND. When q is given, results are ordered by relevance (full-text rank plus a title-substring boost), not recency, and items may carry match_context — a highlighted snippet from the notes passage that matched; it is absent for title/alias-only matches and filter-only calls. Paginate with limit/offset. summary_notes is not returned here; fetch via v1GetMeeting.

Inputs: q, limit, offset, status, +5 more. Returns: items, limit, total, offset

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.

    Resources