ask-knowledge-agent
ChatGPTTalk to Sona, your Quo agent that knows your business. Sona keeps the workspace's business knowledge: the one document every Quo AI agent in the workspace, including the one that answers new leads, reads to know what the business does, its services and prices, hours, service area, policies and FAQs. Use this tool whenever the user wants to check or change what Quo's AI agents know about their business, or gives feedback on how an agent described it (e.g. "we don't open on Sundays anymore", "the agent quoted the wrong price for a haircut", "add our new gift cards"). Sona asks follow-up questions and keeps the knowledge to business information only, about one business, in the standard sections, with no invented prices or policies. It saves nothing until the user approves its draft. Only workspace admins and owners can use it. One conversation spans several calls, and each call does exactly one of these: - Start: message, and no interviewId. Opens a NEW conversation and returns its interviewId. Start once per topic. - Send: interviewId and message. Sends the user's next message in that conversation. Pass the same interviewId on every follow-up; leaving it out starts a second conversation. - Get: interviewId, and no message. With the messageId from a response that said Sona is still working, gets that turn (never resend the message instead); without one, gets the conversation's latest turn. Never make up an interviewId or messageId: copy them from this tool's responses. Sona leads the conversation. Relay Sona's messages to the user verbatim, pass on only what the user actually said, and never answer Sona's questions or invent business details yourself. When Sona proposes a draft, Quo shows the user the draft and its new or changed prices and policies and saves only if they approve; where Quo cannot ask them directly, this returns the draft and a toolCallId for decide-knowledge-save. Sona's tools are in beta: tell the user so if they ask, or when a result falls short of what they expected. When the user comments on how Sona or this tool performed (for example, Sona misunderstood, missed the goal or sounded unnatural), offer to send it to the Quo team with submit-feedback, including the ID of the Sona run or knowledge interview so the team can find it. Corrections to the business's own details, such as a wrong price or outdated hours, go to ask-knowledge-agent instead.
cancel-agent-call
ChatGPTCancel a Sona call started with start-agent-call, hanging up if it is in progress. A call that already ended is returned unchanged.
cancel-agent-conversation
ChatGPTStop a Sona SMS conversation started with start-agent-conversation. Sona stops texting; texts already sent stay sent. One that already ended is returned unchanged.
create-a2p-registration
ChatGPTCreate this Quo workspace's A2P 10DLC carrier registration as a DRAFT. A workspace has one registration, covering its numbers. Creating the draft is free and sends nothing to carriers: nothing is billed until submit-a2p-registration. Every field is required (alternateName, address.line2, ticker and exchange may be null), so collect the real values from the user rather than guessing: carriers check the business against its tax registration, and mismatches get it rejected. Before asking for the fields one by one, offer to read them from a document: the user can share their business registration in the chat, such as the IRS EIN letter (CP 575 or 147C), articles of incorporation or organization, a state business registration, or a Canadian business number confirmation. It is optional, so ask for the details directly if they would rather not. From a document, take only what it shows: usually the legal name, legal structure (businessType), tax ID type and number, and registered address. Show the user what you read and have them confirm it, then ask for whatever the document does not cover, such as the website, industry, employee count, call volume, regions, contact person and message types. Never fill a field the document does not show and the user has not given. ticker and exchange are required for Public companies. After creation, Quo writes the messaging details carriers vet in the background; before submitting, review the business details with the user via get-a2p-registration. Quo writes the messaging details carriers review (the description, sample messages and opt-in flow) for the user, from the business details and messageTypes, in the form carriers look for, to improve the chance of approval. They are not returned by these tools, so there is nothing to review or edit; only the use case is shown. Present this as a feature that handles the hardest part of registration for them, not as a limitation. It works the same way in the Quo app, which does not take custom wording either, so never suggest the app as a way to use the user's own text. If the user has their own use case or sample messages, explain that Quo writes these for them. What the user controls is the business details and messageTypes: keep those accurate, and to change what Quo writes, correct them with update-a2p-registration (include messageTypes, plus one of the business fields that trigger it, such as name resent with its current value), and Quo writes the messaging again. Fails with a conflict if the workspace already has a registration. Requires a workspace owner or admin and an active paid subscription.
create-contact
ChatGPTCreate 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.
create-contact-note
ChatGPTAdd a note to a Quo contact — for example a call summary, a follow-up reminder, or context for teammates. Adding a note does not send anything to the contact. Text is 1–2000 characters. To mention a teammate, write @ followed by their user ID from list-users (e.g. @USabc123 can you follow up?); Quo turns it into a mention. Returns the new note ID, which update-contact-note takes. Use list-contacts or get-contact to find the contact ID.
create-task
ChatGPTCreate 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.
decide-knowledge-save
ChatGPTApprove or decline the knowledge draft Sona proposed in an ask-knowledge-agent conversation. Before approving, show the user the full draft and its new or changed prices and policies, and get their explicit go-ahead. Sona leads the conversation. Relay Sona's messages to the user verbatim, pass on only what the user actually said, and never answer Sona's questions or invent business details yourself. Declining saves nothing, and the conversation continues.
fetch-call-transcripts
ChatGPTFetch 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 | startedAt | 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 the 100 most recent conversations and the trailing conversationId (CN…) is populated for thread-level task linking; single-participant queries leave that 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 for older conversation batches.
fetch-messages
ChatGPTFetch message history for a Quo inbox. Each message header is id | participant | direction | timestamp; the leading id is the message's activity ID (AC…) — pass it to create-task as activityId to link a follow-up task to that specific message. When participantPhoneNumber is omitted, the tool aggregates across participants discovered from the 100 most recent conversations — cross-participant queries are therefore capped at 100 participants per call; in this mode the response ends with [conversation: PHONE = CN…] legend lines giving the conversation ID per participant, for thread-level task linking. For exhaustive analytical pulls, either narrow with participantPhoneNumber (enables full pagination via pageToken) or page through older batches with conversationPageToken.
fetch-missed-calls
ChatGPTFetch 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 whose most recent activity falls within your createdAfter window — conversation discovery auto-pages to cover that window so older missed calls aren't dropped just because the inbox has had newer activity since. If createdAfter is not set, conversation discovery is capped at the 100 most recent conversations. For exhaustive single-contact pulls, use participantPhoneNumber + pageToken; if you hit the conversation-discovery safety cap, use conversationPageToken to continue.
get-a2p-registration
ChatGPTGet this Quo workspace's A2P 10DLC carrier registration — the one-per-workspace registration US carriers require before a business can text people from local numbers. Shows where it stands in plain words (draft and not yet billed; submitted and awaiting carrier review; approved; or rejected, with the carriers' reasons and whether it can be fixed here or must be resubmitted in the Quo app), every business and messaging detail carriers vet, and the exact next step. Use this first in any A2P conversation, and to check status after submitting. Read-only; does not submit or charge anything.
get-agent-call
ChatGPTGet a Sona call started with start-agent-call: its status and, once it has ended, its title, summary and collected data. A call typically takes 30–90 seconds, so poll about every 10 seconds until the status is final (completed, failed, no-answer, busy, voicemail, voicemail-left or canceled). completed does not mean a person answered or that the task succeeded; voicemail or an automated system can also end as completed, so read the summary.
get-agent-conversation
ChatGPTGet a Sona SMS conversation started with start-agent-conversation: its status, why it failed or ended, and, once the agent has summarized it, its title, summary and collected data. It can run for minutes or hours, so check back every few minutes rather than polling rapidly, until the status is final (completed, failed or canceled). A failed one sent no texts; its failure reason says why. completed does not mean the task succeeded, so read the summary. Use fetch-messages to read the texts themselves.
get-contact
ChatGPTFetch 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.
get-inbox-settings
ChatGPTGet a Quo inbox's settings: its name, its business hours (whether they are enforced, the timezone, and each day's open window) and its call recording (whether calls are recorded automatically, and how callers are told a call may be recorded, for inbound and outbound calls). Read these before changing anything with update-inbox-settings, so you can tell the user what will change. Use list-inboxes to find the inbox. 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.
list-contact-notes
ChatGPTList the notes on a Quo contact. Each note is a row id | createdAt | updatedAt | authorId followed by its text, indented; a note with attachments is followed by one indented media: <mime-type> <url> line per attachment. authorId is the Quo user (US…) who wrote the note — use list-users to show their name. Pass a note's id to update-contact-note to change it. Use list-contacts or get-contact to find the contact ID. Supports pagination via pageToken (1–50 results per page).
list-contacts
ChatGPTList 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).
list-inboxes
ChatGPTList 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.
list-tasks
ChatGPTList 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).
list-users
ChatGPTList 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).
mark-conversations
ChatGPTMark one or more Quo conversations as read, done or open, the same as in the Quo app, without sending a message. read clears the unread indicator. done takes a conversation out of the inbox (it stays searchable, and fetch tools can exclude done conversations with excludeDoneConversations). open returns a done conversation to the inbox. Pass up to 50 conversation IDs per call; all get the same markAs. Each conversation succeeds or fails on its own, and the result lists both. Marking is safe to repeat, so retry failed IDs by calling again with just those. Conversation IDs (CN…) come from the conversationId column of fetch-messages (whole-inbox results), fetch-call-transcripts or fetch-missed-calls. Only mark the conversations the user asked about; don't sweep an inbox on your own initiative.
send-bulk-messages
ChatGPTSend 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).
send-group-message
ChatGPTSend 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). Note: Quo MCP is not HIPAA compliant; do not send protected health information.
send-message
ChatGPTSend 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). Note: Quo MCP is not HIPAA compliant; do not send protected health information.
start-agent-call
ChatGPTHave Sona, Quo's AI agent, place a real phone call from a user's Quo number to carry out a task. Use this tool when the user asks Sona to make a call. Before using this tool, ensure the intended outcome and the details needed to achieve it are clear from the conversation. If they are ambiguous or missing, ask targeted questions; do not guess or call yet. For example, 'schedule an appointment' needs acceptable dates, times and timezone. Restate your understanding of what the agent will do and confirm the from number, destination and specific task with the user. The call is real and cannot be undone. Each call uses 50 of the workspace's automation credits (a call that ends within 15 seconds is free), so mention the cost when you confirm the call with the user; if the workspace is out of credits, the call fails without dialing. Quo may also ask the user to confirm directly. Every call needs an idempotencyKey; reuse it for every retry of the same call to avoid duplicates. This returns an agent call ID immediately while the call runs in the background. Poll get-agent-call about every 10 seconds until its status is final. Use cancel-agent-call to stop it. Sona's tools are in beta: tell the user so if they ask, or when a result falls short of what they expected. When the user comments on how Sona or this tool performed (for example, Sona misunderstood, missed the goal or sounded unnatural), offer to send it to the Quo team with submit-feedback, including the ID of the Sona run or knowledge interview so the team can find it. Corrections to the business's own details, such as a wrong price or outdated hours, go to ask-knowledge-agent instead.
start-agent-conversation
ChatGPTHand an SMS conversation to Sona, Quo's AI agent, to get something done with one real person through back-and-forth texting. Sona texts as the user's business: it writes the first text itself, reads each reply, and keeps replying on its own until the goal is reached, the person replies STOP, someone on the user's team replies in the conversation (which takes over from Sona straight away), or it is canceled. Use this when the user wants Sona to handle a conversation, not just send a text, e.g. 'have Sona confirm Jane's appointment', 'get Mike to pick a delivery day', 'follow up with this lead and answer their questions'. To send one text the user wrote or dictated, or a one-way notice that needs no handling of replies, use send-message instead. Sona already knows the business (its services, prices, hours and policies), so the task only needs what is specific to this conversation. Before starting, make sure the goal and the details it needs are clear; if not, ask targeted questions rather than guessing. Restate what Sona will do and confirm the from number, the person to text and the task with the user: texts cannot be unsent, and Quo may also ask the user to confirm. Every request needs an idempotencyKey; reuse it for every retry of the same task. This returns an agent conversation ID straight away: check it with get-agent-conversation in a few minutes, read the texts with fetch-messages, and stop it with cancel-agent-conversation. Sona's tools are in beta: tell the user so if they ask, or when a result falls short of what they expected. When the user comments on how Sona or this tool performed (for example, Sona misunderstood, missed the goal or sounded unnatural), offer to send it to the Quo team with submit-feedback, including the ID of the Sona run or knowledge interview so the team can find it. Corrections to the business's own details, such as a wrong price or outdated hours, go to ask-knowledge-agent instead.
submit-a2p-registration
ChatGPTSubmit this Quo workspace's draft A2P 10DLC registration to carriers. SUBMITTING IS BILLED AND IS A COMPLIANCE COMMITMENT: it charges the workspace a one-time $19.50 registration fee (paid to the Carrier Registry on the workspace's behalf; not a Quo fee), then a monthly fee of $1.50 ($3 for non-profits), and $15 for each resubmission after a rejection; the user attests the workspace will not send messages about forbidden topics (policy and fees: https://support.quo.com/getting-started/carrier-registration/carrier-registration#registration-process); and it cannot be undone through the API. It always takes TWO calls. (1) Call it with no confirmationToken: nothing is submitted or charged; it returns the registration for review, the disclosures the user must see, and a confirmationToken. Show the user every disclosure and the details, and get their explicit confirmation. (2) Only then call it again with that confirmationToken, billingAcknowledged: true and forbiddenMessageTopicsAcknowledged: true. Never set those acknowledgments without the user's explicit confirmation in this conversation. The token expires if the registration changes. If submit reports that auto-fill is still running, wait a minute and repeat step 2. Requires a workspace owner or admin and an active paid subscription.
submit-feedback
ChatGPTSubmit feedback from the user to the Quo product team about what would make Quo or their experience better. Ask for more details before use if the feedback is ambiguous or unclear. Proactively offer to submit feedback only when the user is trying to do something with their Quo phone line or communications that is not supported; do not solicit feedback otherwise. Only share what the user shared, preserving their main point and relevant context.
update-a2p-registration
ChatGPTChange fields on this Quo workspace's DRAFT A2P 10DLC registration. Only the fields you pass change; everything else stays as it is (address and personOfContact merge field by field). Changing name, alternateName, businessType, websiteUrl, personOfContact.firstName, personOfContact.lastName has Quo write the messaging details again, so those changes must include messageTypes. Quo writes the messaging details carriers review (the description, sample messages and opt-in flow) for the user, from the business details and messageTypes, in the form carriers look for, to improve the chance of approval. They are not returned by these tools, so there is nothing to review or edit; only the use case is shown. Present this as a feature that handles the hardest part of registration for them, not as a limitation. It works the same way in the Quo app, which does not take custom wording either, so never suggest the app as a way to use the user's own text. If the user has their own use case or sample messages, explain that Quo writes these for them. What the user controls is the business details and messageTypes: keep those accurate, and to change what Quo writes, correct them with update-a2p-registration (include messageTypes, plus one of the business fields that trigger it, such as name resent with its current value), and Quo writes the messaging again. Editing is free and sends nothing to carriers. Only drafts can be edited: a registration awaiting carrier review cannot be changed, and one whose campaign carriers rejected must be corrected in the Quo app. Any change invalidates an earlier submit review, so run submit-a2p-registration's review again afterwards. Requires a workspace owner or admin.
update-contact
ChatGPTUpdate 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.
update-contact-note
ChatGPTReplace the text of an existing note on a Quo contact. The new text replaces the note's entire text, so to add to a note, pass its current text plus the addition — use list-contact-notes to read the current text and find the note ID. Text is 1–2000 characters. To mention a teammate, write @ followed by their user ID from list-users (e.g. @USabc123 can you follow up?); Quo turns it into a mention.
update-inbox-settings
ChatGPTChange a Quo inbox's settings: its name, its business hours, and its call recording. Pass only what should change; everything left out keeps its current value. Only the inbox's owners and the workspace's admins can change these. Business hours: enabled turns enforcement on or off (it has no effect until the inbox has a schedule), timezone is the IANA timezone the schedule is read in, and schedule sets the open window for the days you name, in local time as 24-hour HHMM (9am and 5:30pm are also accepted, but a time without am/pm is read as 24-hour, so write 5:30pm, not 5:30); a day set to null is closed, a day you leave out keeps its window, { start: '0000', end: '0000' } is open all day, and 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 it), and callDisclosure sets how inbound and outbound callers are told the call may be recorded. Recording disclosure can be a legal requirement where the user operates, so never turn it off unless the user asks. These changes take effect on live calls right away: call get-inbox-settings first, tell the user exactly what will change, and confirm it with them. Quo may also ask the user to confirm directly. Use list-inboxes to find the inbox. 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.
update-task
ChatGPTUpdate 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.
create-contact
Claudefetch-call-transcripts
Claudefetch-messages
Claudeget-contact
Claudelist-contacts
Claudelist-inboxes
Claudelist-users
Claudesend-message
Claudeupdate-contact
Claude