Contio MeetingOS
Contio MeetingOS Contio MeetingOS is an AI-powered intelligent workspace for meeting-driven teams.
Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeCan modify data
What it can do
- DeleteUserToken: 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
- GetActionItem: 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
- GetAgendaItem: 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 ou
What data it sees
Do you need an account
No: the server works without sign-in
Contio MeetingOS
Contio MeetingOS is an AI-powered intelligent workspace for meeting-driven teams. This remote MCP server connects Claude, Cursor, or any MCP client to your Contio workspace so it can act on live meeting data, transcripts, calendars, and projects.
What it can do
- Meetings — list, search, and read meeting details and summaries.
- Transcripts — fetch transcript segments and speaker attribution for follow-up.
- Action items — create, assign, and track action items surfaced from conversations.
- Agendas — build and update meeting agendas before and during meetings.
- Calendar — query and manage calendar events tied to your workspace.
- Workspace & project management — browse workspaces, projects, and collaboration context.
How to connect
This is a remote, streamable-http MCP server hosted by Contio.
- Add
https://mcp.contio.ai/mcpas a remote MCP server in your client. - Authenticate with your Contio OAuth or personal access token.
- Your client can now call Contio tools on your behalf.
Learn more
- Docs: https://docs.contio.ai/user-api/
- Website: https://contio.ai
Server tool list (30)
Raw names from tools/list. Only developers need these.
| deleteUserToken | 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. |
| getActionItem | 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. |
| getAgendaItem | 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. |
| getBacklogItem | 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. |
| getCalendarEvent | 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. |
| getMe | 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. |
| getMeeting | 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. A non-null `redirect_to_meeting_id` means the meeting was merged into another. Unknown or inaccessible ids return 404. |
| getMeetingAttachment | 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. |
| getMeetingContext | 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. |
| getMeetingTranscript | 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. |
| listActionItems | 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. |
| listAgendaItems | 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. |
| listBacklogItemHistory | 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). |
| listBacklogItems | 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`. |
| listCalendarEvents | 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. |
| listMeetingAttachments | 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. |
| listMeetingContacts | 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. |
| listMeetingContext | 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. |
| listMeetingParticipants | 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. |
| listMeetingTemplates | Browse meeting templates. Use this to see available templates; use the returned id with manageMeetings create to start a meeting from a template. Lists meeting templates usable by the caller (system, vertical, workspace, and personal). Call this to get a `template_id` for v1CreateMeeting. Paginate with `limit` (1–100, default 20) and `offset`. No paid-tier gating. |
| listMeetings | 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. |
| listUpcomingMeetings | 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. |
| listUserTokens | 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. |
| manageActionItems | 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. |
| manageCalendarEvents | 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. |
| manageMeetingContent | 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. |
| manageMeetingItems | 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. |
| manageMeetingParticipants | 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. |
| manageMeetings | 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. 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. Body must contain at least one field. 404/403/402 for unknown/inaccessible, no edit access, or plan-gated `template_id`. |
| searchMeetings | 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 participates in. Filters: `q` (title/alias substring), `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. Paginate with `limit`/`offset`. `summary_notes` is not returned here; fetch via v1GetMeeting. |