Version
READ

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.

The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.

The REST endpoint and this tool share one action, so validation, permissions and events are identical.

Annotations

Read-only

It reads and never changes anything.

Arguments

conversation_id*string

UUID of the support conversation to read.

message_limitintegeroptional

How many of the most recent messages to return (1..200, default 50). Returned oldest-first.

min1max200
include_internalbooleanoptional

Include 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_ABILITY

token 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"]). Platform file_id values are effectively download credentials and are never returned. Fetch files through the dashboard or the REST API.
  • messages is the newest message_limit messages, returned oldest-first so it reads as a transcript. A long thread is truncated at the start, not the end.
  • member.status is the project-scoped member status — it can be lead for someone who has never paid. Anyone who can reach the bot can open a conversation.
  • first_response_at: null means 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