MCP tools reference
Thryv MCP tools
14 tools for Thryv on the Cotlet MCP server. Your agent picks them from tools/list.
- MCP server
- https://cotlet.dev/mcp/v1
- Connects with
- Your own Thryv Business Center account (primary admin for full access)
- Integration page
- Thryv
| Endpoint | Access | Description |
|---|---|---|
| thryv_list_clients | read | Clients with contact details and tags, newest first. |
| thryv_get_client | read | Client card: contact details, tags, notes, client details, appointments, invoices and message history. |
| thryv_list_services | read | Services from your services menu, with their saved prices. |
| thryv_list_appointments | read | Calendar appointments in a date range, with client, service, staff and price. |
| thryv_list_invoices | read | Invoices from the Sales tab with client, total, balance due and dates. |
| thryv_list_conversations | read | Inbox conversations with the latest messages, across email, text and other connected channels. |
| thryv_list_reviews | read | Reviews from the Reputation dashboard, from every connected site, with rating and whether you replied. |
| thryv_add_client | write | New client card. Nothing is sent to the client. |
| thryv_book_appointment | write | New calendar appointment. Thryv emails the client a booking confirmation. |
| thryv_mark_no_show | write | Mark an appointment as a no-show, before its end time. May send your missed appointment email. |
| thryv_create_estimate | write | Itemized estimate on the client card, saved or sent for approval in the client portal. |
| thryv_create_invoice | write | Invoice on the client card, saved to send later or sent with an online payment link. |
| thryv_send_message | write | Message one or more clients, the same as Send Message on your dashboard. |
| thryv_reply_to_review | write | Post a public reply to a review from the Reputation dashboard. |
List clients
readMCP tool thryv_list_clients
Lists the clients on your account, newest first. Filter by name, email or tag to find a group such as everyone tagged "spring". Pages hold up to 100 clients; pass next_cursor back as cursor for the next page.
Parameters
| Name | Type | Description |
|---|---|---|
| search | string | Name or email. |
| tag | string | Only clients with this tag. |
| limit | integer | 1 to 100. Default: 50. |
| cursor | string | Next page cursor from the previous call. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_list_clients",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"clients": [
{
"client_id": "cl_8f2a91",
"name": "Sample Client",
"email": "client@example.com",
"phone": "+1 555 0100",
"tags": [
"spring"
]
},
{
"client_id": "cl_20b4d7",
"name": "Jordan Hale",
"email": "jordan@example.com",
"phone": "+1 555 0101",
"tags": [
"spring",
"lawn"
]
}
],
"next_cursor": null
},
"isError": false
} Get client
readMCP tool thryv_get_client
Returns one client card with contact details, tags, internal notes, appointments, invoices and the message history. Use it before replying or invoicing so your agent sees everything about the client.
Parameters
| Name | Type | Description |
|---|---|---|
| client_id required | string | Client ID from list_clients. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_get_client",
"arguments": {
"client_id": "client_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"client_id": "cl_8f2a91",
"name": "Sample Client",
"email": "client@example.com",
"tags": [
"spring"
],
"notes": "Prefers morning visits.",
"appointments": [
{
"appointment_id": "ap_40b2d8",
"service": "Lawn treatment",
"start": "2026-09-29T09:00:00-05:00"
}
],
"invoices": [
{
"invoice_id": "inv_2041",
"total": "85.00",
"balance_due": "0.00"
}
],
"messages": 3
},
"isError": false
} List services
readMCP tool thryv_list_services
Returns the services on your services menu with their saved prices. Use the name as the service parameter of book_appointment.
Parameters
No parameters.
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_list_services",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"services": [
{
"name": "Lawn treatment",
"price": "85.00"
},
{
"name": "Edging",
"price": "25.00"
}
]
},
"isError": false
} List appointments
readMCP tool thryv_list_appointments
Lists calendar appointments between two dates, with client, service, staff and price. The range is at most 31 days. Filter by staff member to see one person's calendar.
Parameters
| Name | Type | Description |
|---|---|---|
| from required | date | First day. |
| to required | date | Last day, at most 31 days after from. |
| staff | string | Only this staff member. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_list_appointments",
"arguments": {
"from": "2026-10-01",
"to": "2026-10-01"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"appointments": [
{
"appointment_id": "ap_40b2d8",
"client": "Sample Client",
"client_id": "cl_8f2a91",
"service": "Lawn treatment",
"start": "2026-10-13T09:00:00-05:00",
"end": "2026-10-13T10:00:00-05:00",
"staff": "Alex",
"price": "85.00"
},
{
"appointment_id": "ap_40b2d9",
"client": "Jordan Hale",
"client_id": "cl_20b4d7",
"service": "Edging",
"start": "2026-10-13T11:00:00-05:00",
"end": "2026-10-13T11:30:00-05:00",
"staff": "Alex",
"price": "25.00"
}
]
},
"isError": false
} List invoices
readMCP tool thryv_list_invoices
Lists invoices from the Sales tab with client, total, balance due and dates. Set unpaid_only to skip invoices paid in full. Pages hold up to 100 invoices.
Parameters
| Name | Type | Description |
|---|---|---|
| client_id | string | Only this client. |
| unpaid_only | boolean | Skip invoices paid in full. |
| limit | integer | 1 to 100. Default: 50. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_list_invoices",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"invoices": [
{
"invoice_id": "inv_2044",
"client": "Jordan Hale",
"client_id": "cl_20b4d7",
"total": "110.00",
"balance_due": "110.00",
"issued": "2026-10-05",
"due": "2026-10-19"
}
]
},
"isError": false
} List conversations
readMCP tool thryv_list_conversations
Lists inbox conversations with the latest messages, across email, text and the other channels you connected in Thryv. Filter by client to see one thread. Pages hold up to 50 conversations.
Parameters
| Name | Type | Description |
|---|---|---|
| client_id | string | Only this client. |
| limit | integer | 1 to 50. Default: 20. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_list_conversations",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"conversations": [
{
"conversation_id": "cv_77d2",
"client": "Sample Client",
"client_id": "cl_8f2a91",
"channel": "text",
"last_message": "Can we move Tuesday to 10:00?",
"updated_at": "2026-10-10T16:02:00-05:00"
}
]
},
"isError": false
} List reviews
readMCP tool thryv_list_reviews
Lists reviews from the Reputation dashboard, from every site you connected, with rating, text and whether you replied. Use unanswered_only to see what needs a reply. Pass review_id to reply_to_review.
Parameters
| Name | Type | Description |
|---|---|---|
| unanswered_only | boolean | Skip reviews you already answered. |
| since | date | Only reviews posted on or after this date. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_list_reviews",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"reviews": [
{
"review_id": "rv_3b90c1",
"site": "Google",
"rating": 5,
"author": "Dana K.",
"text": "The lawn looks great.",
"posted": "2026-10-08",
"replied": false
}
]
},
"isError": false
} Add client
writeMCP tool thryv_add_client
Creates a client card. Nothing is sent to the client, and the card can be edited or removed in Thryv, so the call skips confirmation. Only the first name is required.
Parameters
| Name | Type | Description |
|---|---|---|
| first_name required | string | First name. |
| last_name | string | Last name. |
| string | Email address. | |
| phone | string | Phone number. |
| tags | string[] | Tags to add. |
| notes | string | Internal notes, not shown to the client. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_add_client",
"arguments": {
"first_name": "first name"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"client_id": "cl_8f2a91",
"name": "Sam Lee",
"email": "client@example.com",
"tags": [
"spring"
],
"status": "created"
},
"isError": false
} MCP tool thryv_book_appointment
Books an appointment on your calendar for a client. Thryv emails the client a booking confirmation, plus any extra recipients you add. End time defaults to the service length and staff to the primary admin. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| client_id required | string | Client ID from list_clients. |
| service required | string | Service name from list_services, or a custom title. |
| start required | datetime | ISO 8601 with time zone. |
| end | datetime | End time. Default: the service length. |
| staff | string | Staff member. Default: the primary admin. |
| price_type | enum | fixed, custom or no_fee. Default: the service setting. |
| price | string | Price for a fixed-price appointment. |
| additional_recipients | string[] | More emails that get the booking email. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_book_appointment",
"arguments": {
"client_id": "cl_8f2a91",
"service": "Lawn treatment",
"start": "2026-10-13T09:00:00-05:00",
"staff": "Alex",
"price_type": "fixed",
"price": "85.00"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"appointment_id": "ap_51c7e0",
"client": "Sample Client",
"service": "Lawn treatment",
"start": "2026-10-13T09:00:00-05:00",
"end": "2026-10-13T10:00:00-05:00",
"staff": "Alex",
"price": "85.00",
"confirmation_sent_to": [
"client@example.com"
]
},
"isError": false
} MCP tool thryv_mark_no_show
Marks one appointment as a no-show, before its end time. If you set up a missed appointment email in Thryv, it may go out to the client. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| appointment_id required | string | Appointment ID from list_appointments. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_mark_no_show",
"arguments": {
"appointment_id": "appointment_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"appointment_id": "ap_40b2d9",
"status": "no_show"
},
"isError": false
} MCP tool thryv_create_estimate
Creates an itemized estimate on the client card. With send false it is only saved; with send true it goes to the client for approval in the client portal. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| client_id required | string | Client ID from list_clients. |
| line_items required | object[] | List of items, each with description, quantity and unit_price. |
| notes | string | Notes shown on the estimate. |
| send | boolean | Send it to the client now. Default: false. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_create_estimate",
"arguments": {
"client_id": "cl_8f2a91",
"line_items": [
{
"description": "Gutter cleaning",
"quantity": 1,
"unit_price": "140.00"
},
{
"description": "Tree trimming",
"quantity": 2,
"unit_price": "95.00"
}
],
"notes": "Based on your message of 10 Oct. Final price confirmed on site.",
"send": false
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"estimate_id": "est_1180",
"client_id": "cl_8f2a91",
"total": "110.00",
"status": "saved"
},
"isError": false
} MCP tool thryv_create_invoice
Creates an invoice on the client card from line items. With send false it is saved to send later; with send true it goes to the client with an online payment link. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| client_id required | string | Client ID from list_clients. |
| line_items required | object[] | List of items, each with description, quantity and unit_price. |
| send | boolean | Send it to the client now. Default: false. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_create_invoice",
"arguments": {
"client_id": "client_8c41d2",
"line_items": [
"line items"
]
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"invoice_id": "inv_2051",
"client_id": "cl_8f2a91",
"line_items": [
{
"description": "Lawn treatment",
"quantity": 1,
"unit_price": "85.00"
},
{
"description": "Edging",
"quantity": 1,
"unit_price": "25.00"
}
],
"total": "110.00",
"balance_due": "110.00",
"status": "draft"
},
"isError": false
} MCP tool thryv_send_message
Sends a message to one or more clients, the same as Send Message on your dashboard. Subject and message text are required. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| client_ids required | string[] | Client IDs from list_clients. |
| subject required | string | Subject line. |
| message required | string | Message text. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_send_message",
"arguments": {
"client_ids": [
"client ids"
],
"subject": "subject",
"message": "message"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"sent_to": [
"cl_8f2a91",
"cl_20b4d7"
],
"subject": "Open slots next week",
"status": "sent"
},
"isError": false
} MCP tool thryv_reply_to_review
Posts a public reply to one review from the Reputation dashboard. The reply is visible to anyone who reads the review. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| review_id required | string | Review ID from list_reviews. |
| text required | string | Reply text. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "thryv_reply_to_review",
"arguments": {
"review_id": "rv_3b90c1",
"text": "Thank you, Dana! Glad the lawn came back green after the fall treatment. See you in the spring."
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"review_id": "rv_3b90c1",
"status": "published"
},
"isError": false
}