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
Thryv Endpoints
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.

MCP 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

Parameters: list_clients
NameTypeDescription
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

read

MCP 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

Parameters: get_client
NameTypeDescription
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
}

MCP 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
}

MCP 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

Parameters: list_appointments
NameTypeDescription
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
}

MCP 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

Parameters: list_invoices
NameTypeDescription
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
}

MCP 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

Parameters: list_conversations
NameTypeDescription
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
}

MCP 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

Parameters: list_reviews
NameTypeDescription
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

write

MCP 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

Parameters: add_client
NameTypeDescription
first_name required string First name.
last_name string Last name.
email 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
}

Book appointment

write Confirm

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

Parameters: book_appointment
NameTypeDescription
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
}

Mark no-show

write Confirm

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

Parameters: mark_no_show
NameTypeDescription
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
}

Create estimate

write Confirm

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

Parameters: create_estimate
NameTypeDescription
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
}

Create invoice

write Confirm

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

Parameters: create_invoice
NameTypeDescription
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
}

Send message

write Confirm

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

Parameters: send_message
NameTypeDescription
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
}

Reply to review

write Confirm

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

Parameters: reply_to_review
NameTypeDescription
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
}