# Quo — how to use (mcp.ai)

Connect your Quo account and use 36 tools for phone and SMS straight from your AI agent. Connect with your own API key. Quo, formerly OpenPhone, is a business phone platform for managing calls, messages, contacts, conversations, tasks, users, and webhooks.

## Option A — via MCP (recommended)
Remote MCP endpoint (HTTP, streamable): `https://api.mcp.ai/p_quo?ms=1787293500000`
Add it as a custom/remote MCP connector in your client (Claude, Cursor, VS Code…), then authenticate when prompted. Once connected, ask the agent to use the server's tools (e.g. `quo_create_contact`).

## Option B — via direct REST API
Base URL: `https://api.mcp.ai/api/quo`
Auth: `Authorization: Bearer sk_live_…` — create a workspace API key at https://mcp.ai/settings/api-keys
Discover endpoints: `GET https://api.mcp.ai/api/quo/_endpoints`

### Endpoints
- `POST https://api.mcp.ai/api/quo/create/contact` — Create a Quo contact with standard fields, optional custom fields, and external source metadata.
  - body: { role?: string, emails?: object[], source?: string, company?: string, last_name?: string, first_name: string, source_url?: string, external_id?: string, custom_fields?: object[], phone_numbers?: object[], created_by_user_id?: string }
- `POST https://api.mcp.ai/api/quo/create/task` — Create a task linked to exactly one phone number, conversation, or activity.
  - body: { title: string, due_date?: string, activity_id?: string, assigned_to?: string, description: string, conversation_id?: string, phone_number_id?: string }
- `POST https://api.mcp.ai/api/quo/create/webhook` — Create one unified webhook subscription for selected Quo events and return its signing secret, which must be stored securely.
  - body: { url: string, label?: string, events: string[], status?: string, resource_ids?: string[] }
- `POST https://api.mcp.ai/api/quo/delete/contact` — Permanently delete one Quo contact by ID.
  - body: { contact_id: string }
- `POST https://api.mcp.ai/api/quo/delete/task` — Permanently delete one Quo task by ID.
  - body: { task_id: string }
- `POST https://api.mcp.ai/api/quo/delete/webhook` — Permanently delete one unified Quo webhook and revoke its signing secret.
  - body: { webhook_id: string }
- `POST https://api.mcp.ai/api/quo/get/call` — Get one call and its routing, participants, status, and timing details by ID.
  - body: { call_id: string }
- `POST https://api.mcp.ai/api/quo/get/call/voicemail` — Get voicemail processing status, transcript, duration, and recording URL for a Quo call. Returns a not-found error when the call has no voicemail.
  - body: { call_id: string }
- `POST https://api.mcp.ai/api/quo/get/contact` — Get one contact with default and custom fields by Quo contact ID.
  - body: { contact_id: string }
- `POST https://api.mcp.ai/api/quo/get/message` — Get one message by Quo message ID, including its content, related IDs, participants, delivery status, and timestamps.
  - body: { message_id: string }
- `POST https://api.mcp.ai/api/quo/get/phone/number` — Get one Quo phone number and its assignments and restrictions by ID.
  - body: { phone_number_id: string }
- `POST https://api.mcp.ai/api/quo/get/task` — Get one task and its current links, assignee, due date, and completion state.
  - body: { task_id: string }
- `POST https://api.mcp.ai/api/quo/get/user` — Get one workspace user by Quo user ID.
  - body: { user_id: string }
- `POST https://api.mcp.ai/api/quo/get/webhook` — Get one unified Quo webhook by its numeric ID.
  - body: { webhook_id: string }
- `POST https://api.mcp.ai/api/quo/get/webhook/delivery` — Get the payload and attempt details for one Quo webhook delivery event.
  - body: { event_id: string, webhook_id: string }
- `POST https://api.mcp.ai/api/quo/list/call/recordings` — List recording segments for a Quo call in chronological order.
  - body: { call_id: string }
- `POST https://api.mcp.ai/api/quo/list/calls` — List calls between a Quo number and one external participant with optional user and creation-time filters. Returns one page and a cursor for the next.
  - body: { limit?: integer, cursor?: string, user_id?: string, participant: string[], created_after?: string, created_before?: string, phone_number_id: string }
- `POST https://api.mcp.ai/api/quo/list/contact/custom/fields` — List the workspace's contact custom-field definitions for constructing valid contact values.
- `POST https://api.mcp.ai/api/quo/list/contacts` — List contacts, optionally filtered by external IDs or source, with stable-v1 phone and custom fields. Returns one page and a cursor for the next page.
  - body: { limit?: integer, cursor?: string, sources?: string[], external_ids?: string[] }
- `POST https://api.mcp.ai/api/quo/list/conversations` — List inbox conversations with optional phone-number, user, creation-time, update-time, and inactive-state filters. Returns one page and a cursor for the next page.
  - body: { limit?: integer, cursor?: string, user_id?: string, created_after?: string, phone_numbers?: string[], updated_after?: string, created_before?: string, updated_before?: string, exclude_inactive?: boolean }
- `POST https://api.mcp.ai/api/quo/list/messages` — List messages exchanged by a Quo phone number and one or more participants, optionally filtered by sender or creation time. Returns one page and a cursor for the next page.
  - body: { limit?: integer, cursor?: string, user_id?: string, participants: string[], created_after?: string, created_before?: string, phone_number_id: string }
- `POST https://api.mcp.ai/api/quo/list/phone/numbers` — List Quo phone numbers and their assigned users, calling restrictions, and messaging restrictions.
  - body: { user_id?: string }
- `POST https://api.mcp.ai/api/quo/list/tasks` — List workspace tasks with cursor-controlled pagination.
  - body: { limit?: integer, cursor?: string }
- `POST https://api.mcp.ai/api/quo/list/users` — List workspace users and return one cursor-controlled page.
  - body: { limit?: integer, cursor?: string }
- `POST https://api.mcp.ai/api/quo/list/webhook/deliveries` — List one page of delivery events for a unified Quo webhook, optionally filtered by status, event type, or dispatch time.
  - body: { limit?: integer, cursor?: string, status?: string, webhook_id: string, event_types?: string[], created_after?: string, created_before?: string }
- `POST https://api.mcp.ai/api/quo/list/webhooks` — List unified Quo webhooks across call, message, contact, task, and integration event families.
- `POST https://api.mcp.ai/api/quo/send/message` — Send an irreversible text message from a Quo number to one or more recipients. This consumes messaging credits and may require carrier registration.
  - body: { to: string[], from: string, content: string, user_id?: string }
- `POST https://api.mcp.ai/api/quo/send/message/and/mark/conversation/done` — Send an irreversible text message from a Quo number and move the resulting inbox conversation to Done. This consumes messaging credits and may require carrier registration.
  - body: { to: string[], from: string, content: string, user_id?: string }
- `POST https://api.mcp.ai/api/quo/set/conversation/status` — Set a Quo conversation to read, done, or open.
  - body: { status: string, conversation_id: string }
- `POST https://api.mcp.ai/api/quo/set/task/assignee` — Assign or unassign a Quo user on a task.
  - body: { task_id: string, user_id: string, operation: string }
- `POST https://api.mcp.ai/api/quo/set/task/completion` — Complete or reopen a Quo task.
  - body: { state: string, task_id: string }
- `POST https://api.mcp.ai/api/quo/set/task/conversation/link` — Link or unlink a Quo task and conversation.
  - body: { task_id: string, operation: string, conversation_id: string }
- `POST https://api.mcp.ai/api/quo/set/task/due/date` — Set or remove a Quo task's due date.
  - body: { task_id: string, due_date?: string, operation: string }
- `POST https://api.mcp.ai/api/quo/update/contact` — Patch selected standard, custom, or source fields on an existing Quo contact. Omitted fields remain unchanged, while explicit null clears a field.
  - body: { role?: string, emails?: object[], source?: string, company?: string, last_name?: string, contact_id: string, first_name?: string, source_url?: string, external_id?: string, custom_fields?: object[], phone_numbers?: object[] }
- `POST https://api.mcp.ai/api/quo/update/task` — Replace both the title and description of an existing Quo task. Both fields are required because Quo treats this as a full textual update.
  - body: { title: string, task_id: string, description: string }
- `POST https://api.mcp.ai/api/quo/update/webhook` — Partially update a unified Quo webhook. Only explicitly supplied fields are changed; explicit null clears resource filters or the label where supported.
  - body: { url?: string, label?: string, events?: string[], status?: string, webhook_id: string, resource_ids?: string[] }

## Example prompts
- "What can I do in Quo?"
- "Show me a summary of my Quo account"

## More
- Page: https://mcp.ai/quo
- Agent spec (llms.txt): https://mcp.ai/quo/llms.txt
- Postman collection: https://mcp.ai/quo/postman.json
