> ## Documentation Index
> Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Supported tools

> Review the current tools, limits, and usage patterns available through Quo MCP.

Quo MCP currently exposes the same complete toolset to Claude, ChatGPT, and other connected MCP clients. A client can call several tools in one task—for example, discover an inbox, fetch its recent messages, and create follow-up tasks from the results.

Tool names and parameters are stable identifiers. How you select or approve a tool call depends on your MCP client.

## Workspace discovery

| Tool | What it does | Key notes |
| - | - | - |
| `list-users` | Lists workspace members with their ID, name, email, and role. | Supports `pageToken`; 1–50 results per page. Use the returned `US…` ID in tools that accept a `userId`. |
| `list-inboxes` | Lists Quo phone numbers with their phone-number ID, E.164 number, inbox name, and assigned users. | Optionally filter by `userId`. Use this before a fetch or send tool when you do not know the inbox number. |

Example prompts:

* “Which Quo numbers can I use, and who is assigned to each one?”
* “Find Jamie's user ID and show the inboxes assigned to them.”

## Inbox settings

| Tool | What it does | Key notes |
| - | - | - |
| `get-inbox-settings` | Shows an inbox's name, business hours, and call recording settings. | Business hours include whether they are enforced, the timezone, and each day's open window. Call recording includes whether calls are recorded automatically and how inbound and outbound callers are told a call may be recorded. |
| `update-inbox-settings` | Renames an inbox, or changes its business hours or call recording. | Only the settings you pass change; everything else keeps its current value. Only the inbox's owners and workspace admins can make changes. Returns the saved settings. |

Both tools take `inbox` as an E.164 number, a `PN…` phone-number ID, or a recognizable local format. Run `list-inboxes` to find it.

**Business hours**

* `enabled` turns enforcement on or off. It has no effect until the inbox has a schedule, so an inbox with enforcement on starts enforcing hours as soon as a schedule is added.
* `timezone` is the IANA timezone the schedule is read in, such as `America/Toronto`.
* `schedule` sets the open window for the days you name, in 24-hour `HHMM` local time. Times such as `9:00` or `5:30pm` are also accepted.
  * A day you leave out keeps its current window.
  * A day set to `null` is closed.
  * `{ "start": "0000", "end": "0000" }` is open all day.
  * `schedule: null` removes the schedule, so business hours stop being enforced.

**Call recording**

* `autoRecord` records every call on the inbox. The workspace's plan must include automatic call recording.
* `callDisclosure` sets how callers are told a call may be recorded, separately for `inbound` and `outbound` calls: `voice` plays a spoken announcement, `audioTone` plays a tone, and `disabled` plays nothing.

Before changing anything, the client reads the current settings, tells you exactly what will change, and confirms it with you. Clients that support it show a Quo confirmation prompt; otherwise the client must ask you in the chat. The name and business hours are saved separately from call recording. If one save fails after the other succeeded, the result says which change was saved.

> [!WARNING]
>
> Changes apply to live calls right away. Telling callers that a call may be recorded can be a legal requirement where you operate, so don't turn off a recording disclosure unless you are sure you can.

Example prompts:

* “What are the business hours and recording settings on our support line?”
* “Close the sales line on Saturdays and open it 9am to 5pm on weekdays, Toronto time.”
* “Turn on automatic call recording for the support line and play a spoken disclosure on inbound calls.”

## Carrier registration (A2P 10DLC)

US carriers require a business to register before it texts US numbers from local numbers. This is called A2P 10DLC registration. A workspace has one registration, and once carriers approve it, every number in the workspace can text US numbers. See [Carrier registration](https://support.quo.com/getting-started/carrier-registration/carrier-registration) for how registration works in Quo.

| Tool | What it does | Key notes |
| - | - | - |
| `get-a2p-registration` | Shows the workspace's registration: where it stands, any carrier messages, the business details and use case carriers review, and the next step. | Read-only. A workspace with no registration yet gets a plain answer, not an error. |
| `create-a2p-registration` | Creates the workspace's registration as a draft. | Free, and sends nothing to carriers. Every field is required; `alternateName`, `address.line2`, `ticker`, and `exchange` can be `null`. Fails if the workspace already has a registration. |
| `update-a2p-registration` | Changes fields on the draft registration. | Free. Only the fields you pass change. Only a draft can be changed. |
| `submit-a2p-registration` | Submits the draft registration to carriers. | Billed, and cannot be undone. Always takes two calls: a review, then the submission. |

Only workspace owners and admins can use these tools, and the workspace needs an active paid subscription. Free trials cannot register.

### Registration details

Carriers check the business against its tax registration, so the details must match it exactly. The client asks you for them rather than guessing. It can also offer to read them from a document you share in the chat, such as an IRS EIN letter (CP 575 or 147C), articles of incorporation or organization, a state business registration, or a Canadian business number confirmation. This is optional. The client reads only what the document shows, usually the legal name, legal structure, tax ID, and registered address, shows you what it read, and asks you for the rest.

`messageTypes` says what the business texts people about. Use one or more of `appointments_scheduling`, `transactional_notifications`, `customer_support`, `verification_security`, and `promotions_announcements`.

Quo writes the messaging details that carriers review, such as the description, sample messages, and opt-in flow, from the business details and `messageTypes`, in the form carriers look for. This works the same way as in the Quo app. The tools show the use case but not the rest of the messaging, and you cannot supply your own wording. To change what Quo writes, correct the business details or `messageTypes` with `update-a2p-registration`; a change to the name, alternate name, business type, website, or contact name must include `messageTypes`, and Quo writes the messaging again.

### Submitting

Submitting is billed:

* A one-time \$19.50 registration fee, paid to the Carrier Registry on the workspace's behalf. It is not a Quo fee.
* A monthly fee of $1.50, or $3 for non-profits.
* \$15 for each resubmission after carriers reject the registration.

By submitting, you also confirm that the workspace will not send messages about forbidden topics. Read the [forbidden-topics policy](https://support.quo.com/getting-started/carrier-registration/carrier-registration#registration-process) before you submit.

`submit-a2p-registration` always takes two calls:

1. **Review.** Called without a `confirmationToken`, it submits and charges nothing. It returns the registration, the billing, forbidden-topics, compliance, and irreversibility notices, and a `confirmationToken`. The client shows you all of it and asks you to confirm.
2. **Submit.** Only after you confirm, the client calls it again with the `confirmationToken`, `billingAcknowledged: true`, and `forbiddenMessageTopicsAcknowledged: true`. Without both acknowledgments, nothing is sent to Quo.

The token is tied to the registration as you reviewed it. Any change after the review cancels it, and the review must run again.

> [!WARNING]
>
> If a submission times out or returns a server error, it may have gone through and been charged. Do not submit again. Run `get-a2p-registration` to check whether the registration was submitted.

### After you submit

Carrier review can take several days. Check its progress with `get-a2p-registration`.

* If carriers reject the business details, the registration returns to a draft. Fix the fields the carrier messages name with `update-a2p-registration`, then submit again.
* If carriers reject the campaign, the registration cannot be resubmitted through Quo MCP. Correct and resubmit it in the Quo app.
* A submitted registration cannot be changed or canceled while carriers review it.

Example prompts:

* “Is our carrier registration approved yet?”
* “Help me register our business so we can text US customers. Here's our EIN letter.”
* “Carriers rejected our registration. What do they want us to fix?”

## Messages and conversations

| Tool | What it does | Key notes |
| - | - | - |
| `fetch-messages` | Fetches message history for an inbox: one contact, one group thread, or across the inbox. | Returns message text and any MMS attachments with their media type and URL. Group threads show who sent each message. Filter by participant or group members, date range, sending team member, or conversation status. See [Fetch modes and pagination](#fetch-modes-and-pagination). |
| `send-message` | Sends an SMS from a Quo inbox to one recipient. | The send is irreversible. The recipient must be a valid phone number; international E.164 numbers are supported. |
| `send-group-message` | Starts one shared SMS thread with 2–10 recipients. | Every recipient can see every other recipient's phone number and all replies. |
| `send-bulk-messages` | Sends SMS to 2–40 recipients as separate one-to-one messages, with identical or recipient-specific content. | Recipients do not see one another. The tool reports per-recipient failures and may partially succeed. |
| `mark-conversations` | Marks 1–50 conversations as read, done, or open, the same as in the Quo app. | `read` clears the unread indicator, `done` moves a conversation out of the inbox, and `open` returns a done conversation to the inbox. Nothing is sent to anyone. Each conversation succeeds or fails on its own, and the result lists any to retry. |

### Choose the correct send tool

| Desired result | Tool | Recipients see one another? |
| - | - | - |
| Text one person | `send-message` | Not applicable |
| Put 2–10 people in one shared thread | `send-group-message` | Yes |
| Broadcast the same text privately to 2–40 people | `send-bulk-messages` | No |
| Send personalized text privately to 2–40 people | `send-bulk-messages` | No |
| Have Sona text one person and handle their replies | `start-agent-conversation` | Not applicable |

### Bulk message modes

`send-bulk-messages` accepts one of two input modes:

* **Same message:** Provide `to` as an array of 2–40 phone numbers and `content` as the message sent to every recipient.
* **Personalized messages:** Provide `messages` as an array of 2–40 objects, each containing that recipient's `to` phone number and `content`.

Use exactly one mode per call. Do not combine `messages` with `to` or `content`, and include each recipient only once. Use `send-message` when sending to one person.

All three send tools:

* Require a `from` number that belongs to the connected Quo workspace. The tool accepts its E.164 number or `PN…` phone-number ID.
* Accept message content up to 1,600 characters.
* Use prepaid messaging credits and count as API-powered messages. See [API pricing](https://www.quo.com/docs/mdx/pricing-support/pricing-overview.md).
* Cannot undo or recall a message after it is sent.

> [!WARNING]
>
> Confirm the sender, recipients, message content, and whether the recipients should share a thread before sending. In particular, never substitute `send-group-message` for a private broadcast.

Example prompts:

* “Show me yesterday's messages across the support inbox and summarize the open questions.”
* “Summarize this week's support inbox, but skip conversations we already marked done.”
* “Show the full group thread with Priya and Sam from the sales line.”
* “Draft a reply to +14165550100, but ask me to approve it before sending.”
* “Send this service notice privately to these 12 customers so none of them can see the other numbers.”
* “Send each attendee their own confirmation time from this list as a private message.”
* “Mark the support conversations I replied to today as done.”

## Calls and voicemail

| Tool | What it does | Key notes |
| - | - | - |
| `fetch-call-transcripts` | Fetches completed call transcripts for a Quo inbox. | Requires the Quo Business plan and calls where transcription was enabled. Filter by participant, date range, team member, or conversation status. See [Fetch modes and pagination](#fetch-modes-and-pagination). |
| `fetch-missed-calls` | Fetches missed incoming calls and includes voicemail status, transcript, and recording URL when a voicemail exists. | Returns only incoming calls with status `missed`, `no-answer`, or `abandoned`; this filter cannot be changed. |

To have Sona place a call for you, see [Phone calls](#phone-calls).

Voicemail processing is asynchronous. If a voicemail has an `in-progress` status, its duration, transcript, and recording URL may be empty; retry after processing completes. A missed call with no voicemail is still returned.

Call and message results include activity IDs (`AC…`). Multi-contact results can also include conversation IDs (`CN…`). Use these IDs to link a follow-up task to the exact call, message, or conversation, or pass conversation IDs to `mark-conversations`.

Example prompts:

* “What calls did we miss yesterday, and which callers left a voicemail?”
* “Summarize this week's completed call transcripts for the sales inbox.”
* “Find Pat's call from this morning and create a task linked to that call.”

## Contacts

| Tool | What it does | Key notes |
| - | - | - |
| `list-contacts` | Lists contacts with their ID, name, company, role, email, and phone number. | Optionally filter by external IDs or sources. Supports `pageToken`; 1–50 results per page. |
| `get-contact` | Fetches one contact by ID. | Includes default fields, source metadata, and workspace custom fields. |
| `create-contact` | Creates a contact and returns its new contact ID. | `firstName` is required. Last name, company, role, email, phone number, and custom fields are optional. |
| `update-contact` | Updates an existing contact's default and custom fields. | Omit a field to leave it unchanged; pass `null` to clear it. Use `get-contact` first when the current value matters. |

Phone numbers are normalized to E.164. Email values must be valid email addresses.

> [!NOTE]
>
> `update-contact` only works on contacts created in Quo, through the API, or through Quo MCP. Contacts created by an integration cannot be updated — use `get-contact` to check a contact's source, and make the change in the system that created it.

Example prompts:

* “Look up the contact with +14165550100 and show their custom fields.”
* “Create a contact for Priya Shah at Northwind, then show me the new contact ID.”
* “Clear the outdated role on this contact without changing any other field.”

### Contact notes

| Tool | What it does | Key notes |
| - | - | - |
| `list-contact-notes` | Lists a contact's notes with their ID, text, author, timestamps, and any attachment URLs. | Supports `pageToken`; 1–50 results per page. |
| `create-contact-note` | Adds a note to a contact and returns the new note ID. | Text must be 1–2,000 characters. To mention a teammate, include `@` followed by their user ID from `list-users`, such as `@USabc123`. |
| `update-contact-note` | Replaces the text of an existing note. | The new text replaces the whole note. To add to a note, include its current text. |

Adding or editing a note doesn't send anything to the contact. Notes can't be deleted through Quo MCP.

Example prompts:

* “Add a note to Priya's contact summarizing today's call, and mention Jamie so they follow up.”
* “What notes do we have on Northwind's main contact?”
* “Fix the typo in the last note on this contact.”

## Tasks

| Tool | What it does | Key notes |
| - | - | - |
| `list-tasks` | Lists workspace tasks with status, title, due date, assignee, linked record, creation time, and revision. | Supports `pageToken`; 1–100 results per page. |
| `create-task` | Creates a task linked to an inbox, conversation, or specific activity. | Title and description are required. Provide exactly one link target: `inboxPhoneNumber`, `conversationId`, or `activityId`. |
| `update-task` | Changes a task's content, assignee, due date, completion status, or conversation link. | Performs one change type per call. Call it again for each additional change. |

When creating a task, use the most specific link available:

1. Use an `activityId` (`AC…`) for one particular call or message.
2. Use a `conversationId` (`CN…`) for the whole thread with a contact.
3. Use an inbox number or `PN…` ID only when the task is not about a specific activity or conversation.

`update-task` can update the title and description together as one change. Assignment, unassignment, due-date changes, completion or reopening, and conversation linking or unlinking are separate change types.

Example prompts:

* “List the open tasks and show who each is assigned to.”
* “Create a follow-up task for tomorrow linked to this missed call and assign it to Alex.”
* “Mark task `TK…` complete.”

## Sona (beta)

Sona is Quo's AI agent. These tools let your AI client have Sona place a phone call or handle an SMS conversation for you, and talk to Sona to check or change what Quo's AI agents know about your business. They are in beta.

> [!NOTE]
>
> If you connected Quo MCP before October 16, 2026, disconnect it and connect it again to use these tools. They need permissions that earlier connections did not request.

### Phone calls

| Tool | What it does | Key notes |
| - | - | - |
| `start-agent-call` | Has Sona place a real phone call from one of your Quo numbers to get something done, such as booking an appointment or confirming an order. | Takes `from`, `to`, a `task` of up to 2,000 characters, and an `idempotencyKey`. Optionally set what happens if voicemail answers and the longest the call may last. Returns an agent call ID (`AR…`) right away while the call runs. |
| `get-agent-call` | Gets a Sona call's status. Once the call has ended, also returns its title, summary, and collected data. | A call usually takes 30–90 seconds, so the client checks about every 10 seconds. Its status is final when it is `completed`, `failed`, `no-answer`, `busy`, `voicemail`, `voicemail-left`, or `canceled`. `completed` does not mean a person answered or the task succeeded; read the summary. |
| `cancel-agent-call` | Stops a Sona call, hanging up if it is in progress. | A call that already ended is returned unchanged. |

Sona speaks as your business. It already knows your business from its [business knowledge](#business-knowledge), so the `task` only needs what is specific to this call: the goal, what counts as done, and the details Sona needs to get there. For scheduling, include the acceptable dates, times, and timezone, and say what Sona should do if none of them work.

Before placing the call, the client confirms the `from` number, the number to call, and the task with you, because a call cannot be undone. Clients that support it show a Quo confirmation prompt; otherwise the client must ask you in the chat. The client makes up an `idempotencyKey` for each call and sends it again on every retry, so a retried request never places a second call.

* If voicemail answers, Sona hangs up by default. Set `voicemail` to `leave-message` to have Sona leave a message, and `voicemailMessage` (up to 1,000 characters) to choose what it says; without one, Sona leaves a short request to call back.
* `maxDurationSeconds` caps how long the call may last once answered: up to 600 seconds, 300 by default.
* Each call uses 50 of your workspace's automation credits. A call that ends within 15 seconds is free. If your workspace is out of credits, the call fails without dialing.
* You must be a member of the `from` number.
* Quo limits how many Sona calls run at once, how many are placed each day, and how many go to one number.

### SMS conversations

| Tool | What it does | Key notes |
| - | - | - |
| `start-agent-conversation` | Hands an SMS conversation with one person to Sona to get something done, such as confirming an appointment or following up on a lead. | Takes `from`, `to`, a `task` of up to 2,000 characters, and an `idempotencyKey`. Returns an agent conversation ID (`AR…`) right away. |
| `get-agent-conversation` | Gets a Sona conversation's status and why it failed or ended. Once Sona has summarized it, also returns its title, summary, and collected data. | A conversation can run for minutes or hours, so check back every few minutes. Its status is final when it is `completed`, `failed`, or `canceled`. `completed` does not mean the task succeeded; read the summary. |
| `cancel-agent-conversation` | Stops a Sona conversation. | Texts already sent stay sent. A conversation that already ended is returned unchanged. |

Sona texts as your business. It writes the first text, reads each reply, and keeps replying on its own until one of these happens:

* It reaches the goal and hands the conversation back.
* The person replies STOP.
* Someone on your team replies in the conversation. Sona stops straight away.
* The conversation is canceled, marked done, or reaches its maximum length.

Sona already knows your business from its [business knowledge](#business-knowledge), so the `task` only needs what is specific to this conversation: the goal, what counts as done, and details about the person, such as what was already agreed and the times to offer.

Before starting, the client confirms the `from` number, the person to text, and the task with you, because texts cannot be unsent. Clients that support it show a Quo confirmation prompt; otherwise the client must ask you in the chat. The client makes up an `idempotencyKey` for each conversation and sends it again on every retry, so a retried request never starts a second conversation.

* You must be a member of the `from` number, and AI agent conversations must be turned on for your workspace.
* Quo limits how many Sona conversations run at once, how many start each day, and how many go to one number.
* A conversation can fail before any text is sent, for example when the person has opted out or your carrier registration does not allow the text. `get-agent-conversation` gives the reason.
* Read the texts themselves with `fetch-messages`.

### Business knowledge

| Tool | What it does | Key notes |
| - | - | - |
| `ask-knowledge-agent` | Talks to Sona to check or change what Quo's AI agents know about your business: its services, prices, hours, service area, policies, and FAQs. | One conversation spans several calls. Pass `message` without `interviewId` to start, `interviewId` and `message` to reply, and `interviewId` alone to get Sona's latest turn. Only workspace admins and owners can use it. |
| `decide-knowledge-save` | Approves or declines a knowledge draft that Sona proposed. | For clients that cannot show Quo's approval prompt. Approving requires `userConfirmed`. Declining saves nothing, and the conversation continues. |

The business knowledge is the one document every Quo AI agent in your workspace reads to understand your business, including the agent that answers new leads. Use `ask-knowledge-agent` to update it, or to correct how an agent described your business, such as a wrong price or outdated hours.

Sona leads the conversation and asks follow-up questions. The client should pass on Sona's messages and your answers as they are, and should not answer Sona's questions for you. Sona keeps the knowledge to information about your one business and does not invent prices or policies.

Nothing is saved until you approve Sona's draft. Before you approve, you see the full draft and any new or changed prices and policies. Clients that support it show a Quo approval prompt; otherwise the client shows you the draft and sends your decision with `decide-knowledge-save`.

If Sona takes too long to reply, the response says Sona is still working and includes a `messageId`. The client then calls `ask-knowledge-agent` with the `interviewId` and that `messageId` to get the reply, instead of sending the message again.

Example prompts:

* “Have Sona call Lakeview Dental at +14165550188 and book a cleaning for me next Tuesday or Wednesday afternoon, Toronto time.”
* “Did Sona's call to the dentist work? What time did it book?”
* “Have Sona text Jane at +14165550100 to move her Saturday 11am appointment to Tuesday 2pm or Thursday 10am, and confirm the one she picks.”
* “How is Sona's conversation with Mike going?”
* “Stop Sona's conversation with Mike.”
* “We don't open on Sundays anymore. Update what our AI agents know.”
* “The agent quoted the wrong price for a haircut. Fix it.”

## Feedback

| Tool | What it does | Key notes |
| - | - | - |
| `submit-feedback` | Sends feedback about your Quo phone-line or communications experience to the Quo product team. | Requires `content` and `userConfirmed`. The client must set `userConfirmed` to `true`, and only after you explicitly ask for the feedback to be sent or accept an offer to send it. |

Sona's tools are in beta. When you comment on how Sona performed, the client can offer to send your feedback with `submit-feedback`, including the agent call, agent conversation, or interview ID so the Quo team can find it.

This tool is opt-in. A client should not run it as a routine survey or raise it in an unrelated conversation, and it should offer to send feedback at most once — after trying to help — when you ask to share feedback or hit a limitation it cannot work around. Frustration alone is not consent.

A submission cannot be edited or withdrawn, and Quo does not promise a reply. Review the summary before approving it, and keep credentials, unrelated personal details, and protected health information out of the feedback.

Example prompts:

* “Send Quo my feedback that I need to schedule a message for a future date.”
* “Yes, please pass that along to the product team.”

## Fetch modes and pagination

The fetch tools can search a specific contact deeply or discover activity across an inbox broadly.

### One contact or group thread

Set `participantPhoneNumber` to query one contact. To query a group thread with `fetch-messages`, set `participantPhoneNumbers` instead: a list of every other member of the group, up to 10, not including your inbox. A group thread is matched by its exact member list, so take the list from the group's header in a whole-inbox result.

* `fetch-messages`, `fetch-call-transcripts`, and `fetch-missed-calls` return up to 100 matching records per page.
* If the response includes a next-page token, call the same tool with the same filters plus `pageToken`.
* A `pageToken` can be used only when `participantPhoneNumber` is set, or `participantPhoneNumbers` for a group thread.
* These queries always return the full history, including conversations marked done or snoozed.

### Whole inbox

Omit the participant filters to work across the inbox. By default this includes conversations marked done or snoozed.

* `fetch-messages` returns up to 10 of the most recent messages for every conversation with messages in the window, including group threads. Set `createdAfter` to read every message in the window. Without it, the tool reads only the inbox's 1,000 most recent messages.
* Group threads are listed with their members, and each message shows its sender. A conversation with more than 10 messages in the window is flagged with the exact parameters to fetch its full thread.
* If `fetch-messages` stops early, because `createdAfter` was omitted or the window is too large to read in one call, the response says where it stopped and includes a `conversationPageToken` to continue.
* `maxResults` applies to single-contact and group-thread message queries and is ignored by the whole-inbox message view.
* `fetch-messages` and `fetch-call-transcripts` accept `excludeDoneConversations`. Set it to `true` to skip conversations that are currently marked done or snoozed; it defaults to `false`, which includes every conversation. `fetch-missed-calls` does not accept this filter.
* Call tools aggregate matching calls across discovered participants, up to the requested result limit. If a call-tool response indicates that older conversations remain, continue discovery with the returned `conversationPageToken`.

The tool response includes the token and guidance needed for the next call. Treat page tokens as opaque and do not modify them.

## Dates, times, and phone numbers

* Pass `createdAfter`, `createdBefore`, and task due dates as ISO 8601 datetimes with `Z` or an explicit offset, such as `2026-08-21T14:00:00-04:00`.
* Fetch results use UTC timestamps. A client should convert relative requests such as “yesterday” from the user's local timezone to the corresponding UTC range, then present results in the user's timezone.
* Use E.164 for external phone numbers, such as `+14165550100`. International numbers are supported.
* When a tool accepts an inbox, use either its E.164 number or its `PN…` ID. Run `list-inboxes` to discover valid values.

## Related guidance

* [Connect to Quo MCP](https://www.quo.com/docs/mcp/connect.md)
* [Security best practices](https://www.quo.com/docs/mcp/security.md)
