Skip to main content
Seven tools. Six read, one writes a draft. Clients discover them through the standard tools/list, so nothing here needs a custom integration. Every summary carries as_of. A queue changes while an agent is reading a recap of it, and a figure with no timestamp is a figure someone quotes in a meeting an hour later.

get_support_summary

How the queue looks right now. Input: none.
open_conversations counts new, open, and pending together. resolved and closed have left the queue, so they appear in by_status but not in the total.

list_oldest_unanswered

Conversations with no reply since the customer’s last message, oldest first. Input: limit, 1 to 50, default 10.
“Unanswered” is not the same as status = "new". A ticket someone opened, read, and left is unanswered in every sense a customer cares about, and its status is open. This checks whether there has been a public reply since the requester’s last message.

get_agent_workload

How many open conversations each active member is assigned. Input: none.
Active members only. A deactivated colleague keeps their message history but does not count as capacity.

get_ticket

One conversation and its public messages. Input: ticket_id, required.
Internal notes are not filtered out of the result; they are never fetched in the first place. An MCP client is an AI agent whose output a person may paste anywhere, and an internal note reaching one is the same leak as it reaching a customer, one step removed. An unknown or cross-workspace id returns { "error": "not_found" }.

search_knowledge

Find the workspace’s own reference documents by topic. Input: query (an empty query lists everything), limit 1 to 25, default 10.
Titles and sizes only, not the text. A search that returned full documents would spend the context window on the four the model did not want. tokens is there so it can tell a one-line rule from a handbook before asking for it.

read_document

The full text of one reference document. Input: document_id, required. Get it from search_knowledge first.
Documents are read whole, up to 80,000 characters. Past that, complete is false and a note says how much was returned:
The cut is announced rather than silent, because a silent cut reads as the complete text and the reply then states a policy that the unread half qualifies. Passing something that is not a document id returns a message telling the model to search first, rather than a database error. Models otherwise tend to guess a filename from a title.

create_draft_reply

The only write. It writes a draft. Input: ticket_id, required.
delivered: false and the note are returned every single time, on purpose, so a connected agent cannot tell its user that a reply was sent. The draft is stored for review in the dashboard, with the calling model recorded and an audit log row written in the same transaction. Possible errors:

Tools that do not exist

There is no send_reply, update_ticket, assign_ticket, or resolve_ticket. Their absence is the security model, not an oversight. The reasoning is here.