MCP tools reference

This article documents every tool exposed by the LiveAgent MCP server, including the exact parameters each tool accepts and the exact fields it returns. The same tool set is available for both personal MCP connections and AI agent MCP connections.

Every tool returns a single JSON object. A call that succeeds returns the documented response, while a tool that has nothing to return answers with {"success": true}. A call that fails returns an error object, e.g. {"success": false, "error": "Not authorized to read this ticket"}.

Ticket read tools

Get ticket messages (get_ticket_messages)

Retrieves messages of a ticket, including notes by default. Limited to 20 messages per call — page through the rest with nextCursor.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d
sinceNoCursor from a previous tool call response, used to return next messages
typesNoReturn only selected message types: email, chat, whatsapp, instant_message, note, or legacy_message.
dateFromNoFilter only messages added at or after specified time using RFC 3339 timestamp in UTC, e.g. 2026-07-08T10:00:00Z
dateToNoFilter only messages added at or before specified time using RFC 3339 timestamp in UTC, e.g. 2026-07-08T10:00:00Z
orderNoSort response records, use desc (default) to list newest records first, or asc to list oldest records first. When since is used, the cursor's own sorting direction applies, and a conflicting order is rejected.

Returns

FieldDescription
messages[].idMessage identifier.
messages[].textMessage body as plain text.
messages[].authorWho added the message: agent, customer, ai_agent, rule, or external_app.
messages[].authorIdIdentifier of the author.
messages[].typeMessage type: email, chat, whatsapp, instant_message, note or legacy_message.
messages[].createdAtDatetime when the message was added, as an RFC 3339 timestamp, e.g. 2026-07-08T10:00:00+00:00.
messages[].attachments[]Attachments of the ticket messages, each with id, fileName, contentType, size (bytes) and downloadUrl.
The attachment content is never inlined in the result. downloadUrl is a short-lived, single-use link valid for 3 hours, consumed by the first successful download.
nextCursorCursor referring to the last returned message. Pass this as since parameter to retrieve next messages. Returns null when there are no more messages.

Get ticket metadata (get_ticket_metadata)

Reads a ticket's properties.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d

Returns

FieldDescription
idInternal ticket ID.
codeShort human-readable ticket code, e.g. ABC-DEFGH-123, commonly shown in the agent panel.
subjectTicket subject.
statusCurrent ticket status: new, open, answered, resolved, postponed, chatting, calling, closed, deleted or spam.
channelChannel the ticket was created from: email, contact_button, contact_form, invitation, call, call_button, facebook, facebook_message, twitter, forum, suggestion, instagram, instagram_mention, viber, whatsapp, telegram.
departmentIdID of the department the ticket belongs to.
departmentNameName of the department the ticket belongs to.
assignedAgentIdID of the agent the ticket is assigned to. null when the ticket is unassigned.
assignedAgentNameAssigned agent's display name. null when the ticket is unassigned.
tagsNames of the tags currently attributed to the ticket.
createdAtDatetime when the ticket was created, as an RFC 3339 timestamp, e.g. 2026-07-08T10:00:00+00:00.
lastActivityAtDatetime when the ticket last changed, as an RFC 3339 timestamp, e.g. 2026-07-08T10:00:00+00:00.

Get ticket notes (get_ticket_notes)

Retrieves the internal notes of a ticket, newest first. Limited to 20 notes per call — page through the rest with nextCursor.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d
sinceNoCursor from a previous tool call response, used to return next notes

Returns

FieldDescription
notes[].noteIdNote identifier.
notes[].textNote body as plain text.
notes[].author.idIdentifier of the author.
notes[].author.nameAuthor display name.
notes[].author.typeWho added the note: agent, ai_agent, rule or external_app.
notes[].createdAtDatetime when the note was added, as an RFC 3339 timestamp, e.g. 2026-07-08T10:00:00+00:00.
nextCursorCursor referring to the last returned note. Pass this as since parameter to retrieve next notes. Returns null when there are no more notes.

Get tags (get_tags)

Lists every available tag in the account.

Parameters: none.

Returns

FieldDescription
tags[].idTag identifier, a 4-character alphanumeric code.
tags[].nameTag name as shown in the agent panel.
tags[].isPublicDenotes if the tag is visible outside the agent panel: true for public tags, false for internal ones.

Search tickets (search_tickets)

Retrieves a list of tickets. Results are ordered by last change, newest first. Limited to 50 tickets per call.

Parameters

ParameterRequiredDescription
statusNoFilter only tickets in the selected statuses: new, open, answered, resolved, postponed, chatting or calling. Several statuses can be combined. When omitted, everything except deleted, closed and spam tickets is returned.
departmentIdNoReturn only tickets in the selected department, as returned by list_departments. When omitted, tickets of every department are returned.
agentIdNoReturn only tickets assigned to the selected agent, as returned by list_agents. When omitted, tickets of every agent are returned, assigned or not.
queryNoReturn only tickets whose content matches this full-text phrase. When omitted, no text matching is applied.
limitNoMaximum number of tickets to return, 10 by default, up to a maximum of 50. A higher value is quietly reduced to 50 rather than rejected.
cursorNoCursor from a previous tool call response, used to return the next page of results.

Returns

FieldDescription
tickets[].idInternal ticket ID.
tickets[].codeShort human-readable ticket code, e.g. ABC-DEFGH-123, commonly shown in the agent panel.
tickets[].subjectTicket subject.
tickets[].statusCurrent ticket status. Any status can come back here, including the four the status filter does not accept: init, closed, deleted and spam.
tickets[].departmentIdID of the department the ticket belongs to.
tickets[].assignedAgentIdID of the agent the ticket is assigned to. null when the ticket is unassigned.
totalCountTotal number of matching tickets, not just those on this page.
nextCursorCursor referring to the last returned ticket, pass as cursor to retrieve the next page. Returns null when there are no more tickets.

Note: there is no date, tag, customer or channel filter, and the sort order cannot be changed. See Known limitations for what to do instead. Note also that the department and the assigned agent come back as IDs only — resolve them with list_departments and list_agents.

List agents (list_agents)

Lists the agents in the account. Use it to resolve an agent ID before assigning a ticket, or to turn an assignedAgentId into a name and e-mail address.

Parameters

ParameterRequiredDescription
searchNoReturn only agents whose name or e-mail address contains this text. When omitted, all agents are returned.

Returns

FieldDescription
agents[].idAgent identifier — this is what assign_ticket expects as agentId.
agents[].nameAgent display name.
agents[].emailAgent e-mail address. null when the agent has none.

List departments (list_departments)

Lists the departments in the account, for routing and transfer decisions.

Parameters

ParameterRequiredDescription
searchNoReturn only departments whose name contains this text. When omitted, all departments are returned.

Returns

FieldDescription
departments[].idDepartment identifier — this is what transfer_ticket expects as departmentId.
departments[].nameDepartment name.

Ticket field tools

Get ticket field definitions (get_ticket_field_definitions)

Returns the custom ticket fields configured for the account, with the metadata needed to fill them in correctly. Archived definitions are excluded.

Parameters: none.

Returns

FieldDescription
definitions[].definitionIdNumeric definition ID, one of the two ways to address the field when writing a value.
definitions[].codeStable string code of the field, usable as definitionCode instead of the numeric ID.
definitions[].nameField label as shown in the agent panel.
definitions[].typeField type, which decides the value parameter you use when writing: BOOLEAN, STRING, POSTAL_ADDRESS, LIST_SINGLE_VALUED or LIST_MULTI_VALUED.
definitions[].descriptionHelp text configured for the field, as shown beside it in the agent panel. An empty string when none is set.
definitions[].checkboxDescriptionLabel shown next to the checkbox. Present on BOOLEAN definitions only.
definitions[].validationRule a value has to satisfy, present on STRING definitions only. Either {"kind":"PREDEFINED","format":…} with one of ALPHANUMERIC, ALPHANUMERIC_SPACE, DATE, DATE_REVERSE, DECIMAL, EMAIL, WHOLE_NUMBER, NUMERIC_STRING, INTERNATIONAL_PHONE, US_PHONE, IP_ADDRESS, TEXT, TIME, URL; or {"kind":"CUSTOM","regex":…} carrying a regular expression of your own.
definitions[].availableValuesOption labels a value can be chosen from. Present on LIST_SINGLE_VALUED and LIST_MULTI_VALUED definitions only.

Get ticket field values (get_ticket_field_values)

Reads all custom field values stored on one ticket, each returned together with its definition metadata. Values whose definition has since been archived are still returned.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d

Returns

FieldDescription
values[].fieldIdID of this stored value — the handle delete_ticket_field_value expects.
values[].definitionIdNumeric ID of the definition this value belongs to.
values[].codeString code of the definition this value belongs to.
values[].nameField label as shown in the agent panel.
values[].typeField type, using the same values as get_ticket_field_definitions.
values[].valueThe stored value, typed after the field: boolean for BOOLEAN; string for STRING and LIST_SINGLE_VALUED; array of strings for LIST_MULTI_VALUED; object with street, district, city, state, postalCode, country for POSTAL_ADDRESS.

Set ticket field value (set_ticket_field_value)

Idempotent upsert of one custom field value: creates it when missing, updates it when present and different, does nothing when it already matches.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d
definitionIdOne of the twoNumeric definition ID, as returned by get_ticket_field_definitions. Supply either this or definitionCode — never both, never neither.
definitionCodeOne of the twoStable string code of the field, as returned by get_ticket_field_definitions.
booleanValueExactly oneValue to store on a BOOLEAN field: true or false.
stringValueValue to store on a STRING field, up to 255 characters. It also has to satisfy the definition's validation rule.
singleValueValue to store on a LIST_SINGLE_VALUED field: one label from the definition's availableValues.
multiValueValues to store on a LIST_MULTI_VALUED field: any number of labels from the definition's availableValues.
postalAddressValue to store on a POSTAL_ADDRESS field: an object with the keys street, district, city, state, postalCode and country.

Returns

FieldDescription
fieldIdID of the value that was created or already existed — the handle delete_ticket_field_value expects.
actionWhat the call did: created, updated or unchanged.

Note: the value parameter must match the field's type, and archived definitions are rejected. If a ticket somehow holds more than one value for the same definition, the call fails and asks you to clean up with delete_ticket_field_value first.

Delete ticket field value (delete_ticket_field_value)

Removes one stored custom field value from a ticket. Works even when the underlying definition has been archived.

Parameters

ParameterRequiredDescription
fieldIdYesID of the stored value, as returned by get_ticket_field_values. This is the value's own ID, not the definition ID.

Returns

FieldDescription
fieldIdID of the value that was deleted.

Ticket write tools

Add note (add_note)

Adds an internal note to a ticket. Notes are visible to agents only, never to the customer.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d
textYesNote body to store, as plain text.
reopenTicketNoReopen the ticket when it is already resolved. false by default, so a resolved ticket stays resolved.

Returns

FieldDescription
noteIdID of the created note.

Note: attachments cannot be added through this tool.

Add tags (add_tags_to_ticket)

Applies one or more existing tags to a ticket.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d
tagsYesOne or more tag IDs (4-character alphanumeric) or tag names, as returned by get_tags. Unknown tags are rejected — the tool does not create them.

Returns: {"success": true}.

Remove tags (remove_tags_from_ticket)

Removes one or more tags from a ticket.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d
tagsYesOne or more tag IDs or tag names to remove, in the same form add_tags_to_ticket accepts.

Returns: {"success": true}.

Assign ticket (assign_ticket)

Assigns a ticket to an agent, or clears the assignment.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d
agentIdYesID of the agent to assign the ticket to, as returned by list_agents. Must be present, but may be null to unassign.

Returns: {"success": true}.

Transfer ticket (transfer_ticket)

Moves a ticket to a different department.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d
departmentIdYesID of the department to move the ticket to, as returned by list_departments.
reopenTicketNoReopen the ticket after the transfer. false by default, so a resolved ticket stays resolved.

Returns: {"success": true}.

Note: for an AI agent this is a final action — the agent's run finishes once the transfer succeeds.

Resolve ticket (resolve_ticket)

Marks a ticket as resolved.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d

Returns: {"success": true}.

Note: for an AI agent this is a final action — the run finishes once the ticket is resolved. Add any tags or notes before calling it.

Reopen ticket (reopen_ticket)

Reopens a resolved ticket.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d

Returns: {"success": true}, or the error Ticket is already open when there was nothing to reopen.

Mark as spam (mark_as_spam)

Marks a ticket as spam.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d

Returns: {"success": true}, or {"note": "Ticket was already marked as spam"} when the ticket was already in that state.

Note: for an AI agent this is a final action — the run finishes here, so add any tags or notes first.

Mark as not spam (mark_as_not_spam)

Clears the spam mark and returns the ticket to the queue. Unlike mark_as_spam, this is not a final action.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d

Returns: {"success": true}, or {"note": "Ticket was already not marked as spam"}.

Reply via WhatsApp (reply_via_whatsapp)

Sends a text reply to the customer on a WhatsApp ticket. This is the only MCP tool that writes a customer-visible message.

Requires the WhatsApp addon — on accounts without it the tool is neither offered nor callable.

Parameters

ParameterRequiredDescription
ticketIdYesTicket identifier, e.g. 1a2b3c4d. Its channel must be whatsapp.
textYesReply text. WhatsApp enforces a maximum message length; an over-length reply is rejected with an error stating the limit.

Returns

FieldDescription
messageIdID of the reply that was queued for delivery.

Conditions and caveats:

  • The ticket's channel (from get_ticket_metadata) must be whatsapp. Anything else is rejected.
  • The reply must fall inside the 24-hour WhatsApp customer service window — that is, within 24 hours of the customer's last message. Outside it, the call fails and the fallback is an approved WhatsApp template sent by a human agent, or an internal note.
  • Text only — attachments are not supported.
  • A successful result means the reply was stored and queued. Actual delivery to WhatsApp happens afterwards and its outcome is not reported by this tool.
  • For AI agents the tool is locked to the ticket the run was started for; it cannot post to a different ticket found via search_tickets.

Knowledge base tools

None of these tools assume a default knowledge base, so start with list_knowledge_bases and pass the knowledgeBaseId you get from it.

List knowledge bases (list_knowledge_bases)

Parameters: none.

Returns

FieldDescription
knowledgeBases[].idKnowledge base identifier — this is what every other knowledge base tool expects as knowledgeBaseId.
knowledgeBases[].nameKnowledge base name.
knowledgeBases[].isActiveDenotes whether the knowledge base is switched on: true for an active one, false for a disabled one.

List knowledge base categories (list_kb_categories)

Returns categories as a nested tree — the full subtree under a parent, or the whole knowledge base when no parent is given.

Parameters

ParameterRequiredDescription
knowledgeBaseIdYesID of the knowledge base to read, as returned by list_knowledge_bases.
parentCategoryIdNoRoot of the subtree to return. Omit (or pass 0) for the whole tree.

Returns

FieldDescription
categories[].idCategory identifier — this is what the article tools expect as categoryId.
categories[].nameCategory name.
categories[].parentCategoryIdParent category ID (0 at root level).
categories[].visibilityWho can see the category: public or internal.
categories[].position0-based position among its siblings.
categories[].children[]Nested child categories, same shape.
countTotal number of category nodes returned, children included.

Search knowledge base articles (search_kb_articles)

Full-text search across a knowledge base — for finding an article that answers a customer's question, or checking whether one already exists.

Parameters

ParameterRequiredDescription
queryYesReturn only articles whose title or content matches this keyword or phrase.
knowledgeBaseIdYesID of the knowledge base to search, as returned by list_knowledge_bases.
categoryIdNoReturn only articles in this category and its sub-categories, as returned by list_kb_categories. When omitted, the whole knowledge base is searched.
limitNoMaximum number of articles to return, 10 by default, up to a maximum of 50. A higher value is quietly reduced to 50 rather than rejected.

Returns

FieldDescription
articles[].idArticle identifier — this is what get_kb_article and update_kb_article expect as articleId.
articles[].titleArticle title.
articles[].urlPublic article URL.
articles[].summaryFirst ~300 characters of the article as plain text, truncated on a word boundary with an ellipsis.
articles[].descriptionThe article's meta description, as shown in search engine results.
articles[].categoryIdID of the category the article sits in.
articles[].knowledgeBaseIdID of the knowledge base the article belongs to.
articles[].statusPublication state: published or draft.
articles[].visibilityWho can see the article: public or internal.

Note: the full article body is not returned — fetch it with get_kb_article. There is no cursor or offset, so limit caps the result set at 50.

Get knowledge base article (get_kb_article)

Retrieves an article's full content, by ID or by the 6-digit code in its URL.

Parameters

ParameterRequiredDescription
articleIdOne of the twoThe article's numeric ID, as returned by search_kb_articles.
urlCodeOne of the twoThe 6-digit code in the article URL — for example 397021 in .../397021-article-title.

Returns

FieldDescription
idArticle ID.
titleArticle title.
urlPublic article URL.
bodyFull article body as HTML.
plainTextThe same body content as plain text.
descriptionMeta description, as shown in search engine results.
keywordsMeta keywords set on the article.
categoryIdID of the category the article sits in.
knowledgeBaseIdID of the knowledge base the article belongs to.
statusPublication state: published or draft.
visibilityWho can see the article: public or internal.
position0-based position within its category.
createdAtDatetime when the article was created, as an RFC 3339 timestamp, e.g. 2026-07-08T10:00:00+00:00.
changedAtDatetime when the article was last changed, in the same RFC 3339 format.
attachments[]Attachments of the article, each with id, fileName, contentType, size (bytes), isInline and downloadUrl.

Note: as with ticket attachments, downloadUrl is single-use and expires after roughly 3 hours.

Create knowledge base article (create_kb_article)

Parameters

ParameterRequiredDescription
titleYesArticle title (max 255 characters).
bodyYesArticle body in HTML.
categoryIdYesID of the category to place the article in, as returned by list_kb_categories.
knowledgeBaseIdYesID of the knowledge base to create the article in, as returned by list_knowledge_bases.
statusYesPublication state: published or draft.
visibilityYesWho can see the article: public or internal.
descriptionNoMeta description, shown in search engine results.
keywordsNoMeta keywords for SEO.
positionNo0-based position within the category. Omit to append at the end.

Returns

FieldDescription
articleIdID of the article that was created — this is what get_kb_article and update_kb_article expect as articleId.
messageConfirmation text naming the article and its status.

Note: attachments cannot be uploaded through this tool. Images referenced inline in the HTML body are picked up from the body itself.

Update knowledge base article (update_kb_article)

Changes an existing article. Only the fields you supply are changed; everything else keeps its current value.

Parameters

ParameterRequiredDescription
articleIdYesID of the article to update, as returned by search_kb_articles.
titleNoNew title (max 255 characters).
bodyNoNew body in HTML.
statusNoNew publication state: published or draft.
visibilityNoNew visibility: public or internal.
descriptionNoNew meta description.
keywordsNoNew meta keywords.
categoryIdNoID of the category to move the article to, as returned by list_kb_categories. When omitted, the article stays where it is.
knowledgeBaseIdNoIf supplied, must match the article's current knowledge base — moving an article between knowledge bases is not supported.
positionNo0-based position within the category.

Returns

FieldDescription
messageConfirmation text naming the updated article.

Create knowledge base category (create_kb_category)

Parameters

ParameterRequiredDescription
nameYesCategory name (max 255 characters).
knowledgeBaseIdYesID of the knowledge base to create the category in, as returned by list_knowledge_bases.
visibilityYesWho can see the category: public or internal.
parentCategoryIdNoID of the parent category, as returned by list_kb_categories. Omit for a root-level category.
keywordsNoMeta keywords for SEO.
positionNo0-based position among siblings.

Returns

FieldDescription
categoryIdID of the category that was created — this is what the article tools expect as categoryId.
messageConfirmation text naming the created category.

Update knowledge base category (update_kb_category)

Renames, moves, reorders or changes the visibility of a category. Only the fields you supply are changed.

Parameters

ParameterRequiredDescription
categoryIdYesID of the category to update, as returned by list_kb_categories.
nameNoNew name (max 255 characters).
visibilityNoNew visibility: public or internal.
keywordsNoNew meta keywords; pass an empty string to clear them.
parentCategoryIdNoMove the category under this parent, as returned by list_kb_categories; 0 moves it to root level. Moving a category under one of its own descendants is rejected.
knowledgeBaseIdNoIf supplied, must match the category's current knowledge base.
positionNo0-based position among siblings.

Returns

FieldDescription
messageConfirmation text naming the updated category.

Known limitations and gotchas

These are the boundaries people most often run into. Knowing them up front saves a lot of guessing when a prompt does not produce the result you expected.

Attachments

  • File content is never inlined. get_ticket_messages and get_kb_article return a downloadUrl per attachment instead.
  • Those links are single-use and expire in about 3 hours. Re-reading a link from an earlier response will usually fail — call the tool again to mint a fresh one.

×