Skip to content
Scalekit Docs

Quo MCP

Vendor MCP15 toolsOAuth 2.1/DCRCommunicationCRM & Sales

Connect to Quo MCP. Access call details, summaries, transcripts, and voicemails, send text messages, and create or update contacts from your AI workflows.

Quo MCP connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. quickstart.ts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENV_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'quomcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Quo MCP:', link)
    process.stdout.write('Press Enter after authorizing...')
    await new Promise(r => process.stdin.once('data', r))
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'quomcp_list_contacts',
    toolInput: {},
    })
    console.log(result)

Connect this agent connector to let your agent:

  • Update task, contact — Update a Quo task
  • Send message, group message, bulk messages — Send an SMS text message from a Quo inbox to a single recipient
  • List users, tasks, inboxes — List the users (members) in the Quo workspace
  • Get contact — Fetch a single Quo contact by ID, including its default fields (name, company, role, email, phone) and any custom fields configured on the workspace
  • Fetch missed calls, messages, call transcripts — Fetch missed incoming calls for a Quo inbox, each enriched with the voicemail the caller left (transcript + recording URL) when there is one
  • Create task, contact — Create a task in Quo linked to exactly one inbox, conversation, or conversation activity

Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.

quomcp_create_contact#Create a new contact in the Quo workspace. Returns the new contact ID and a compact pipe-separated row that can be chained into `update-contact` or `get-contact`. Only `firstName` is required; all other fields are optional.6 params

Create a new contact in the Quo workspace. Returns the new contact ID and a compact pipe-separated row that can be chained into `update-contact` or `get-contact`. Only `firstName` is required; all other fields are optional.

NameTypeRequiredDescription
firstNamestringrequiredContact's first name (required)
companystringoptionalContact's company name
emailstringoptionalContact's email address, RFC-5322 format (e.g., 'jane@example.com')
lastNamestringoptionalContact's last name
phoneNumberstringoptionalContact's phone number. Format as E.164 before sending (e.g. '+15551234567', '+447911123456'). International numbers are supported.
rolestringoptionalContact's role or title
quomcp_create_task#Create a task in Quo linked to exactly one inbox, conversation, or conversation activity. Pick the most specific link target available: if a fetch result row gives you an AC… activity ID (a specific call or message), prefer `activityId` — it ties the task to exactly what the user is referring to. Use `conversationId` (CN…) when the user means the whole thread with a contact (also from fetch-* results). Use `inboxPhoneNumber` (E.164 or PN… ID, from list-inboxes) only when the task isn't about any specific call/message/thread.7 params

Create a task in Quo linked to exactly one inbox, conversation, or conversation activity. Pick the most specific link target available: if a fetch result row gives you an AC… activity ID (a specific call or message), prefer `activityId` — it ties the task to exactly what the user is referring to. Use `conversationId` (CN…) when the user means the whole thread with a contact (also from fetch-* results). Use `inboxPhoneNumber` (E.164 or PN… ID, from list-inboxes) only when the task isn't about any specific call/message/thread.

NameTypeRequiredDescription
descriptionstringrequiredThe task description.
titlestringrequiredThe task title.
activityIdstringoptionalCreate the task linked to a Quo activity ID (AC... format). Provide exactly one of inboxPhoneNumber, conversationId, or activityId.
assignedTostringoptionalOptional Quo user ID to assign the task to (US... format).
conversationIdstringoptionalCreate the task linked to a Quo conversation ID (CN... format), as returned by fetch-messages / fetch-call-transcripts / fetch-missed-calls. Provide exactly one of inboxPhoneNumber, conversationId, or activityId.
dueDatestringoptionalOptional due date as ISO 8601 datetime with timezone (e.g. '2024-01-01T00:00:00Z').
inboxPhoneNumberstringoptionalCreate the task under a Quo inbox: E.164 number (e.g. '+15555555555') or PN... ID. Use list-inboxes to discover available numbers. Provide exactly one of inboxPhoneNumber, conversationId, or activityId.
quomcp_fetch_call_transcripts#Fetch call transcripts for a Quo inbox. Requires the Quo Business plan and calls where transcription was enabled. Optionally filter by `userId` to return only calls handled by a specific team member (use `list-users` to look up user IDs). Each result row is `id | participant | direction | status | createdAt | duration | conversationId`; the leading `id` is the call's activity ID (AC…) — pass it to `create-task` as `activityId` to link a follow-up task to that specific call. When `participantPhoneNumber` is omitted, the tool aggregates across participants discovered from conversations, and the trailing `conversationId` (CN…) is populated for thread-level task linking. Set `createdAfter` to bound the window — the tool filters conversation discovery by that time server-side, so a call whose conversation is old but had recent activity is still found. Single-participant queries leave the `conversationId` column blank since the per-call `activityId` is already a precise link target. To page through additional results, use `participantPhoneNumber` + `pageToken` for a single participant, or `conversationPageToken` if you hit the conversation-discovery safety cap. Timezone: `createdAfter`/`createdBefore` are treated as UTC — pass ISO 8601 with a 'Z' suffix or an explicit offset — and every timestamp in results is UTC. When the user asks in relative terms (e.g. 'yesterday', 'this week'), scope the window to THEIR local timezone and convert to the matching UTC instants before calling; if you don't know their timezone, ask. Present returned times in the user's local timezone. When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.8 params

Fetch call transcripts for a Quo inbox. Requires the Quo Business plan and calls where transcription was enabled. Optionally filter by `userId` to return only calls handled by a specific team member (use `list-users` to look up user IDs). Each result row is `id | participant | direction | status | createdAt | duration | conversationId`; the leading `id` is the call's activity ID (AC…) — pass it to `create-task` as `activityId` to link a follow-up task to that specific call. When `participantPhoneNumber` is omitted, the tool aggregates across participants discovered from conversations, and the trailing `conversationId` (CN…) is populated for thread-level task linking. Set `createdAfter` to bound the window — the tool filters conversation discovery by that time server-side, so a call whose conversation is old but had recent activity is still found. Single-participant queries leave the `conversationId` column blank since the per-call `activityId` is already a precise link target. To page through additional results, use `participantPhoneNumber` + `pageToken` for a single participant, or `conversationPageToken` if you hit the conversation-discovery safety cap. Timezone: `createdAfter`/`createdBefore` are treated as UTC — pass ISO 8601 with a 'Z' suffix or an explicit offset — and every timestamp in results is UTC. When the user asks in relative terms (e.g. 'yesterday', 'this week'), scope the window to THEIR local timezone and convert to the matching UTC instants before calling; if you don't know their timezone, ask. Present returned times in the user's local timezone. When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.

NameTypeRequiredDescription
inboxPhoneNumberstringrequiredYour Quo inbox number or phone-number ID to find transcripts for (E.164 like '+15555555555', or a PN... ID). Use list-inboxes to discover available numbers.
conversationPageTokenstringoptionalOptional: token to fetch older conversations when doing multi-participant discovery. Use this if the response shows 'More conversations available'. Only used when participantPhoneNumber is NOT specified.
createdAfterstringoptionalOptional: filter calls created after this ISO 8601 datetime with offset (e.g. '2024-01-01T00:00:00Z').
createdBeforestringoptionalOptional: filter calls created before this ISO 8601 datetime with offset (e.g. '2024-01-01T00:00:00Z').
maxResultsnumberoptionalMaximum number of calls to fetch transcripts for (default: 100, max: 100 when using pagination)
pageTokenstringoptionalOptional: token from previous response to fetch the next page of results. Can only be used with participantPhoneNumber (single-participant queries). Not supported when fetching across all participants.
participantPhoneNumberstringoptionalOptional: specific participant phone number to filter conversations (E.164 format). REQUIRED when using pageToken for pagination.
userIdstringoptionalOptional: filter calls by a specific team member's user ID (US… format). When provided, returns only calls handled by that user. Use `list-users` to look up user IDs.
quomcp_fetch_messages#Fetch message history for a Quo inbox. Two modes: • Single contact (`participantPhoneNumber` set) — DEPTH: returns that contact's full message history, most-recent-first, with pagination via `pageToken` (up to 100 per page). Each message is `id | participant | direction | timestamp` followed by the text; the leading `id` is the message's activity ID (AC…) — pass it to `create-task` as `activityId`. A message with MMS attachments is followed by one indented `media: <mime-type> <url>` line per attachment; text-only messages have none. A message may carry both text and attachments — when it does, the body is the text and the media lines follow it. ALWAYS pass the attachment URL through to the user as a clickable markdown link (e.g. [image/png](https://example.com/image.png)); stating that an attachment exists without giving its URL is not useful, since the user cannot open a link they were not shown. Never shorten, truncate, or omit the URL. When an attachment arrives with no accompanying text the body shows `(no text)`; describe that to the user as a photo or file, not as an empty message. • Whole inbox (`participantPhoneNumber` omitted) — BREADTH: returns the most-recent messages for EVERY contact active in the window, grouped by contact (up to 10 messages each, up to 50 contacts), so a daily-summary query never silently drops a contact. Each contact's conversation ID (CN…) is on its header for `create-task` linking. A contact with more than 10 in-window messages is flagged (`[more than 10 …]`) — re-query that contact with `participantPhoneNumber` for the full thread. If more than 50 contacts were active, an `[incomplete: …]` line reports how many were left out; narrow the date range or query specific contacts. `maxResults` is ignored in this mode. Set `createdAfter` to bound the window — the tool filters conversation discovery by that time server-side, so a contact with a recent message is found even when their conversation is old. Without `createdAfter`, discovery falls back to the most recent conversations. Timezone: `createdAfter`/`createdBefore` are treated as UTC — pass ISO 8601 with a 'Z' suffix or an explicit offset — and every timestamp in results is UTC. When the user asks in relative terms (e.g. 'yesterday', 'this week'), scope the window to THEIR local timezone and convert to the matching UTC instants before calling; if you don't know their timezone, ask. Present returned times in the user's local timezone. When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.8 params

Fetch message history for a Quo inbox. Two modes: • Single contact (`participantPhoneNumber` set) — DEPTH: returns that contact's full message history, most-recent-first, with pagination via `pageToken` (up to 100 per page). Each message is `id | participant | direction | timestamp` followed by the text; the leading `id` is the message's activity ID (AC…) — pass it to `create-task` as `activityId`. A message with MMS attachments is followed by one indented `media: <mime-type> <url>` line per attachment; text-only messages have none. A message may carry both text and attachments — when it does, the body is the text and the media lines follow it. ALWAYS pass the attachment URL through to the user as a clickable markdown link (e.g. [image/png](https://example.com/image.png)); stating that an attachment exists without giving its URL is not useful, since the user cannot open a link they were not shown. Never shorten, truncate, or omit the URL. When an attachment arrives with no accompanying text the body shows `(no text)`; describe that to the user as a photo or file, not as an empty message. • Whole inbox (`participantPhoneNumber` omitted) — BREADTH: returns the most-recent messages for EVERY contact active in the window, grouped by contact (up to 10 messages each, up to 50 contacts), so a daily-summary query never silently drops a contact. Each contact's conversation ID (CN…) is on its header for `create-task` linking. A contact with more than 10 in-window messages is flagged (`[more than 10 …]`) — re-query that contact with `participantPhoneNumber` for the full thread. If more than 50 contacts were active, an `[incomplete: …]` line reports how many were left out; narrow the date range or query specific contacts. `maxResults` is ignored in this mode. Set `createdAfter` to bound the window — the tool filters conversation discovery by that time server-side, so a contact with a recent message is found even when their conversation is old. Without `createdAfter`, discovery falls back to the most recent conversations. Timezone: `createdAfter`/`createdBefore` are treated as UTC — pass ISO 8601 with a 'Z' suffix or an explicit offset — and every timestamp in results is UTC. When the user asks in relative terms (e.g. 'yesterday', 'this week'), scope the window to THEIR local timezone and convert to the matching UTC instants before calling; if you don't know their timezone, ask. Present returned times in the user's local timezone. When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.

NameTypeRequiredDescription
inboxPhoneNumberstringrequiredYour Quo inbox number or phone-number ID to fetch messages for (E.164 like '+15555555555', or a PN... ID). Use list-inboxes to discover available numbers.
conversationPageTokenstringoptionalOptional: token to fetch older conversations when doing multi-participant discovery. Use this if the response shows 'More conversations available'. Only used when participantPhoneNumber is NOT specified.
createdAfterstringoptionalOptional: filter messages created after this ISO 8601 datetime with offset (e.g. '2024-01-01T00:00:00Z').
createdBeforestringoptionalOptional: filter messages created before this ISO 8601 datetime with offset (e.g. '2024-01-01T00:00:00Z').
maxResultsnumberoptionalMaximum number of messages to fetch (default: 100, max: 100). Only applies to single-contact queries (participantPhoneNumber set). Ignored for whole-inbox queries, which return up to 10 messages per contact across up to 50 contacts.
pageTokenstringoptionalOptional: token from previous response to fetch the next page of results. Can only be used with participantPhoneNumber (single-participant queries). For multi-participant aggregation, pagination is not supported.
participantPhoneNumberstringoptionalOptional: specific participant phone number to filter conversations (E.164 format). REQUIRED when using pageToken for pagination.
userIdstringoptionalOptional: filter to messages sent by a specific team member's user ID (US… format). Incoming messages are excluded when this filter is set, since the API does not associate them with a sender user ID. Use `list-users` to look up user IDs.
quomcp_fetch_missed_calls#Fetch missed incoming calls for a Quo inbox, each enriched with the voicemail the caller left (transcript + recording URL) when there is one. Only returns incoming calls whose status is 'missed', 'no-answer', or 'abandoned' — this filter is fixed and cannot be changed or broadened. Use it for questions like 'what calls did I miss yesterday?' or 'any voicemails this week?'. Each result is a row `id | status | direction | participants | createdAt | duration | conversationId`; the leading `id` is the call's activity ID (AC…) — pass it to `create-task` as `activityId` to link a follow-up task to that specific call. The trailing `conversationId` (CN…) is for thread-level task linking and is populated only when discovering across multiple participants (single-participant queries leave it blank since the per-call `activityId` is already precise). Rows whose call has a voicemail are followed by an indented voicemail block (status, duration, recordingUrl, transcript). Voicemails are processed asynchronously — a voicemail with status 'in-progress' has null duration/transcript/recordingUrl, so retry in a few seconds. Missed calls where the caller hung up without leaving a message are still listed, just marked '(no voicemail)'. When `participantPhoneNumber` is omitted, the tool aggregates calls across all participants active in your `createdAfter` window — the tool filters conversation discovery by that time server-side, so a missed call whose conversation is old but had recent activity is still found. Without `createdAfter`, discovery falls back to the most recent conversations. For exhaustive single-contact pulls, use `participantPhoneNumber` + `pageToken`; if you hit the conversation-discovery safety cap, use `conversationPageToken` to continue. Timezone: `createdAfter`/`createdBefore` are treated as UTC — pass ISO 8601 with a 'Z' suffix or an explicit offset — and every timestamp in results is UTC. When the user asks in relative terms (e.g. 'yesterday', 'this week'), scope the window to THEIR local timezone and convert to the matching UTC instants before calling; if you don't know their timezone, ask. Present returned times in the user's local timezone. When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.7 params

Fetch missed incoming calls for a Quo inbox, each enriched with the voicemail the caller left (transcript + recording URL) when there is one. Only returns incoming calls whose status is 'missed', 'no-answer', or 'abandoned' — this filter is fixed and cannot be changed or broadened. Use it for questions like 'what calls did I miss yesterday?' or 'any voicemails this week?'. Each result is a row `id | status | direction | participants | createdAt | duration | conversationId`; the leading `id` is the call's activity ID (AC…) — pass it to `create-task` as `activityId` to link a follow-up task to that specific call. The trailing `conversationId` (CN…) is for thread-level task linking and is populated only when discovering across multiple participants (single-participant queries leave it blank since the per-call `activityId` is already precise). Rows whose call has a voicemail are followed by an indented voicemail block (status, duration, recordingUrl, transcript). Voicemails are processed asynchronously — a voicemail with status 'in-progress' has null duration/transcript/recordingUrl, so retry in a few seconds. Missed calls where the caller hung up without leaving a message are still listed, just marked '(no voicemail)'. When `participantPhoneNumber` is omitted, the tool aggregates calls across all participants active in your `createdAfter` window — the tool filters conversation discovery by that time server-side, so a missed call whose conversation is old but had recent activity is still found. Without `createdAfter`, discovery falls back to the most recent conversations. For exhaustive single-contact pulls, use `participantPhoneNumber` + `pageToken`; if you hit the conversation-discovery safety cap, use `conversationPageToken` to continue. Timezone: `createdAfter`/`createdBefore` are treated as UTC — pass ISO 8601 with a 'Z' suffix or an explicit offset — and every timestamp in results is UTC. When the user asks in relative terms (e.g. 'yesterday', 'this week'), scope the window to THEIR local timezone and convert to the matching UTC instants before calling; if you don't know their timezone, ask. Present returned times in the user's local timezone. When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.

NameTypeRequiredDescription
inboxPhoneNumberstringrequiredYour Quo inbox number or phone-number ID to list calls for (E.164 like '+15555555555', or a PN... ID). Use list-inboxes to discover available numbers.
conversationPageTokenstringoptionalOptional: token to fetch older conversations when doing multi-participant discovery. Use this if the response shows 'More conversations available'. Only used when participantPhoneNumber is NOT specified.
createdAfterstringoptionalOptional: filter calls created after this ISO 8601 datetime with offset (e.g. '2026-05-19T00:00:00Z').
createdBeforestringoptionalOptional: filter calls created before this ISO 8601 datetime with offset (e.g. '2026-05-20T00:00:00Z').
maxResultsnumberoptionalMaximum number of calls to return after filtering (default: 100, max: 100 when using pagination).
pageTokenstringoptionalOptional: token from previous response to fetch the next page of results. Can only be used with participantPhoneNumber (single-participant queries). Not supported when fetching across all participants.
participantPhoneNumberstringoptionalOptional: specific other-party phone number to filter calls (E.164 format). REQUIRED when using pageToken for pagination.
quomcp_get_contact#Fetch a single Quo contact by ID, including its default fields (name, company, role, email, phone) and any custom fields configured on the workspace. Use `list-contacts` first if you need to discover contact IDs. When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.1 param

Fetch a single Quo contact by ID, including its default fields (name, company, role, email, phone) and any custom fields configured on the workspace. Use `list-contacts` first if you need to discover contact IDs. When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.

NameTypeRequiredDescription
contactIdstringrequiredThe Quo contact ID to retrieve.
quomcp_list_contacts#List contacts in the Quo workspace, optionally filtered by `externalIds` or `sources`. Returns a compact pipe-separated table (id | name | company | role | email | phone) and supports pagination via `pageToken` (1–50 results per page). When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.4 params

List contacts in the Quo workspace, optionally filtered by `externalIds` or `sources`. Returns a compact pipe-separated table (id | name | company | role | email | phone) and supports pagination via `pageToken` (1–50 results per page). When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.

NameTypeRequiredDescription
externalIdsarrayoptionalOptional: filter by a list of external identifiers from an external system.
maxResultsintegeroptionalMaximum contacts to return per page (1-50, default 10).
pageTokenstringoptionalOptional: token from a previous response to fetch the next page.
sourcesarrayoptionalOptional: filter by contact source (origin/creation method).
quomcp_list_inboxes#List the phone numbers (inboxes) available in the Quo workspace, including assigned users. Use this first to discover the correct `from` number for `send-message` or the `inboxPhoneNumber` for `fetch-messages` / `fetch-call-transcripts`. When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.1 param

List the phone numbers (inboxes) available in the Quo workspace, including assigned users. Use this first to discover the correct `from` number for `send-message` or the `inboxPhoneNumber` for `fetch-messages` / `fetch-call-transcripts`. When showing a phone number to the user, render it as a click-to-call link, e.g. [(555) 555-5555](tel:+15555555555). Pass the bare E.164 value (not a tel: URI) into tool parameters.

NameTypeRequiredDescription
userIdstringoptionalOptional: filter inboxes by a specific Quo user ID (US... format).
quomcp_list_tasks#List tasks in the Quo workspace. Returns compact rows with task ID, status, title, due date, assignee, linked phone number/conversation/activity, creation time, and revision. Supports pagination via `pageToken` (1-100 results per page).2 params

List tasks in the Quo workspace. Returns compact rows with task ID, status, title, due date, assignee, linked phone number/conversation/activity, creation time, and revision. Supports pagination via `pageToken` (1-100 results per page).

NameTypeRequiredDescription
maxResultsintegeroptionalMaximum tasks to return per page (1-100, default 50).
pageTokenstringoptionalOptional: token from a previous response to fetch the next page.
quomcp_list_users#List the users (members) in the Quo workspace. Returns each user's ID, name, email, and role. Use the returned `id` (US… format) to filter other tools like `list-inboxes` by user. Supports pagination via `pageToken` (1–50 results per page, max 50).2 params

List the users (members) in the Quo workspace. Returns each user's ID, name, email, and role. Use the returned `id` (US… format) to filter other tools like `list-inboxes` by user. Supports pagination via `pageToken` (1–50 results per page, max 50).

NameTypeRequiredDescription
maxResultsintegeroptionalMaximum users to return per page (1–50, default 10).
pageTokenstringoptionalOptional: token from a previous response to fetch the next page.
quomcp_send_bulk_messages#Send SMS to up to 40 recipients as SEPARATE individual (1:1) messages — a broadcast. Two modes: for the SAME text to everyone, pass `to` (2–40 numbers) + `content`; to personalize per recipient, pass `messages` as [{to, content}] instead. Provide one mode or the other, never both. Prefer `to` + `content` when the text is identical — it guarantees everyone receives exactly the same message. Each recipient gets their own private thread and does NOT see the other recipients; replies come back individually. Use this for announcements or blasts. This is different from send-group-message, which puts everyone in ONE shared thread that exposes their numbers to each other — use that only when recipients should see one another. For a single recipient use send-message. Sends cannot be undone. The `from` number must belong to the user's Quo workspace — use `list-inboxes` to discover available numbers. Recipients must be valid phone numbers in E.164 format (international supported).4 params

Send SMS to up to 40 recipients as SEPARATE individual (1:1) messages — a broadcast. Two modes: for the SAME text to everyone, pass `to` (2–40 numbers) + `content`; to personalize per recipient, pass `messages` as [{to, content}] instead. Provide one mode or the other, never both. Prefer `to` + `content` when the text is identical — it guarantees everyone receives exactly the same message. Each recipient gets their own private thread and does NOT see the other recipients; replies come back individually. Use this for announcements or blasts. This is different from send-group-message, which puts everyone in ONE shared thread that exposes their numbers to each other — use that only when recipients should see one another. For a single recipient use send-message. Sends cannot be undone. The `from` number must belong to the user's Quo workspace — use `list-inboxes` to discover available numbers. Recipients must be valid phone numbers in E.164 format (international supported).

NameTypeRequiredDescription
fromstringrequiredYour Quo number to send from. Accepts E.164 (e.g. '+15551234567'), a phone-number ID, or a recognizable local format. Must belong to your Quo workspace — use list-inboxes to discover available numbers.
contentstringoptionalSAME-MESSAGE mode. The single message body, sent identically to every recipient in `to`. REQUIRED together with `to`, unless you are using `messages` instead. Omit this entirely when using `messages` — supplying both modes is an error.
messagesarrayoptionalPERSONALIZED mode. One entry per recipient (2–40), each with its own `to` and `content` — e.g. [{"to": "+15551234567", "content": "Hi John, you're confirmed for 2pm"}, {"to": "+15559876543", "content": "Hi Sarah, you're confirmed for 3pm"}]. REQUIRED unless you are using `to` + `content` instead. Use this ONLY when the text differs per recipient; if everyone gets the same text, use `to` + `content`, which guarantees an identical message. Each recipient still receives a SEPARATE private message and cannot see the others. A phone number may appear only once. Omit this entirely when using `to` + `content` — supplying both modes is an error.
toarrayoptionalSAME-MESSAGE mode. The recipients' phone numbers (2–40), each in E.164 format (e.g. '+15551234567'). REQUIRED together with `content`, unless you are using `messages` instead. Each recipient receives a SEPARATE private message and cannot see the others. Omit this entirely when using `messages` — supplying both modes is an error. For one shared group thread, use send-group-message instead.
quomcp_send_group_message#Send a single SMS group message from a Quo inbox to 2–10 recipients in one shared thread. IMPORTANT: this creates a group conversation — every recipient can see all the other recipients' phone numbers and all replies, and it cannot be undone once sent. Use `send-message` instead when you want to text one person, or to text several people privately without exposing them to each other (call `send-message` once per recipient). The `from` number must belong to the user's Quo workspace — use `list-inboxes` to discover available numbers. Recipients must be valid phone numbers in E.164 format (international supported).3 params

Send a single SMS group message from a Quo inbox to 2–10 recipients in one shared thread. IMPORTANT: this creates a group conversation — every recipient can see all the other recipients' phone numbers and all replies, and it cannot be undone once sent. Use `send-message` instead when you want to text one person, or to text several people privately without exposing them to each other (call `send-message` once per recipient). The `from` number must belong to the user's Quo workspace — use `list-inboxes` to discover available numbers. Recipients must be valid phone numbers in E.164 format (international supported).

NameTypeRequiredDescription
contentstringrequiredThe message content
fromstringrequiredYour Quo number to send from. Accepts E.164 (e.g. '+15551234567'), a phone-number ID, or a recognizable local format. Must belong to your Quo workspace — use list-inboxes to discover available numbers.
toarrayrequiredThe recipients' phone numbers (2–10), each in E.164 format (e.g. '+15551234567'). All recipients share one thread and can see each other. For a single recipient, use send-message instead.
quomcp_send_message#Send an SMS text message from a Quo inbox to a single recipient. The `from` number must belong to the user's Quo workspace — use `list-inboxes` to discover available numbers. Recipient must be a valid phone number in E.164 format (international supported).3 params

Send an SMS text message from a Quo inbox to a single recipient. The `from` number must belong to the user's Quo workspace — use `list-inboxes` to discover available numbers. Recipient must be a valid phone number in E.164 format (international supported).

NameTypeRequiredDescription
contentstringrequiredThe message content
fromstringrequiredYour Quo number to send from. Accepts E.164 (e.g. '+15551234567'), a phone-number ID, or a recognizable local format. Must belong to your Quo workspace — use list-inboxes to discover available numbers.
tostringrequiredThe recipient's phone number. Format as E.164 before sending (e.g. '+15551234567', '+447911123456'). International numbers are supported.
quomcp_update_contact#Update fields on an existing Quo contact. Omit fields you want to leave unchanged; pass `null` for any field you want to clear. Use `get-contact` first if you need to inspect current values before updating.7 params

Update fields on an existing Quo contact. Omit fields you want to leave unchanged; pass `null` for any field you want to clear. Use `get-contact` first if you need to inspect current values before updating.

NameTypeRequiredDescription
contactIdstringrequiredThe Quo contact ID to update
companystringoptionalUpdated company name. Set to null to remove.
emailstringoptionalUpdated email address, RFC-5322 format (e.g., 'jane@example.com'). Set to null to remove.
firstNamestringoptionalUpdated first name. Set to null to remove.
lastNamestringoptionalUpdated last name. Set to null to remove.
phoneNumberstringoptionalUpdated phone number. Format as E.164 before sending (e.g. '+15551234567', '+447911123456'). International numbers are supported. Set to null to remove.
rolestringoptionalUpdated role/title. Set to null to remove.
quomcp_update_task#Update a Quo task. Performs exactly one change per call, selected by which parameter is provided: title/description (counted as one change), assignToUserId, unassignUserId, dueDate, removeDueDate, completed (true marks the task done, false reopens it), linkConversationId, or unlinkConversationId. To make several changes, call this tool once per change.10 params

Update a Quo task. Performs exactly one change per call, selected by which parameter is provided: title/description (counted as one change), assignToUserId, unassignUserId, dueDate, removeDueDate, completed (true marks the task done, false reopens it), linkConversationId, or unlinkConversationId. To make several changes, call this tool once per change.

NameTypeRequiredDescription
taskIdstringrequiredThe Quo task ID to update (TK... format).
assignToUserIdstringoptionalOptional Quo user ID (US... format) to assign to the task.
completedbooleanoptionalSet to true to mark the task as completed, or false to reopen a completed task.
descriptionstringoptionalOptional new task description.
dueDatestringoptionalOptional due date as ISO 8601 datetime with timezone (e.g. '2024-01-01T00:00:00Z').
linkConversationIdstringoptionalOptional conversation ID (CN... format) to link to the task, as returned by fetch-messages / fetch-call-transcripts / fetch-missed-calls.
removeDueDatebooleanoptionalSet to true to clear the task due date.
titlestringoptionalOptional new task title.
unassignUserIdstringoptionalOptional Quo user ID (US... format) to unassign from the task.
unlinkConversationIdstringoptionalOptional conversation ID (CN... format) to unlink from the task.