get_support_conversation
Read one support conversation with its message history and the member context a reply needs.
Open a single conversation. Returns the thread's state, its message history, and a flattened snapshot of who the member is — subscription status, current plan, member-since date, how many messages they have sent — so a reply can be written without a second round of lookups.
Names, emails and message bodies are returned verbatim. This is the most PII-dense tool in the set. Do not forward its output anywhere outside the conversation with the creator.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
It reads and never changes anything.
Arguments
conversation_id*stringUUID of the support conversation to read.
message_limitintegeroptionalHow many of the most recent messages to return (1..200, default 50). Returned oldest-first.
1max200include_internalbooleanoptionalInclude creator-only internal notes. Requires the support-conversation:update ability.
What it returns
{ "data": { "conversation": { "id": "9e042b6f-5d81-4c37-a920-7b3e18cf6d45", "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13", "channel": "telegram", "status": "open", "assigned_to_user_id": null, "unread_count": 2, "blocked": false, "first_response_at": null, "resolved_at": null }, "member": { "project_user_id": "2a91c4e7-6f38-4b52-8e0d-9c1a7b3f5d80", "name": "Jane Doe", "email": "jane@example.com", "status": "active", "member_since": "2026-03-02T09:00:00Z", "plan_name": "Premium Monthly", "subscription_status": "active", "subscription_ends_at": "2026-09-02T09:00:00Z", "subscription_count": 1, "inbound_message_count": 4, "first_contact_at": "2026-08-20T10:05:00Z" }, "messages": [ { "id": "6c18f7a3-2e95-4d60-b47a-c093e5182b7f", "direction": "inbound", "author_kind": "contact", "type": "text", "delivery_status": "sent", "internal": false, "body": "My invite link expired before I could join", "attachment_kinds": [], "created_at": "2026-08-20T10:05:00Z" } ] }, "meta": { "message_count": 1, "message_limit": 50, "internal_included": false }}How it fails
TOKEN_MISSING_ABILITYtoken lacks support-conversation:view.
No support conversation found with that id. — unknown id, or the conversation belongs to a project outside the token's scope.
Reading internal notes requires the support-conversation:update ability. — include_internal was true on a read-only token.
Caveats
- Internal notes are gated behind a write ability on purpose. Reading a private remark about a member takes the same permission as writing one, so a read-only token cannot see them.
- Attachments are described by kind only (
attachment_kinds: ["photo"]). Platformfile_idvalues are effectively download credentials and are never returned. Fetch files through the dashboard or the REST API. messagesis the newestmessage_limitmessages, returned oldest-first so it reads as a transcript. A long thread is truncated at the start, not the end.member.statusis the project-scoped member status — it can beleadfor someone who has never paid. Anyone who can reach the bot can open a conversation.first_response_at: nullmeans nobody has replied yet. It is stamped once, on the first human reply ever, and is not reset by a reopen.
How is this guide?
Last updated on