Teaming messages MCP response
MCP tool response returned when agents read or send GovTribe teaming conversation messages through MCP tools.
- Returned by: Get teaming messages MCP tool; Send teaming message MCP tool
- Response type: Structured teaming conversation messages
Response Shape
Get_Teaming_Messages returns a conversation snapshot, one page of messages ordered oldest to newest, and paging flags. Messages with identical creation timestamps are ordered by message ID. Send_Teaming_Message returns only the single created message plus its conversation_id.
| Field | Type | Notes |
|---|---|---|
conversation | object | Conversation snapshot returned by the read tool. Includes the fields below. |
conversation.conversation_id | string | GovTribe ID for the conversation. |
conversation.name | string | Conversation display name. |
conversation.closed_at | string or null | When the conversation was closed. Closed conversations can still be read but no longer accept messages. |
conversation.participant_count | integer | Number of users in the conversation. |
conversation.last_message_at | string or null | Timestamp of the most recent message. |
conversation.viewer_last_read_at | string or null | When the viewer last marked the conversation read in the GovTribe app or through MCP with mark_read=true. |
messages | object array | One page of messages, oldest to newest. Includes user and system messages. |
messages[].message_id | string | GovTribe ID for the message. |
messages[].content | string | Message text. Deleted messages return [This message has been deleted] instead of their original text. |
messages[].kind | string | user for participant messages or system for team-hub lifecycle messages such as lock-in, partner departure, or disband. |
messages[].author_name | string | Abbreviated author name, for example Jordan B.. Empty when the author is unavailable. |
messages[].is_viewer | boolean | Whether the requesting user authored the message. |
messages[].created_at | string | Message creation timestamp in UTC, including the stored millisecond precision. The ISO-8601 value uses six fractional digits, with the last three set to zero. |
messages[].cursor | string | Opaque paging boundary for this message. Pass it unchanged as before_cursor or after_cursor to the read tool. |
messages[].edited_at | string or null | When the message was last edited, when edited. |
messages[].attachment | object or null | Attachment metadata when the message carries a file: name and content_type. The file itself is not downloadable through MCP. |
has_older | boolean | Whether older messages exist before this page. |
has_newer | boolean | Returned only for after_cursor requests. Whether newer messages exist after this forward page. |
conversation_id | string | Returned by the send tool alongside the created message's message_id, content, kind, and created_at. |
Follow-up Behavior
Reading messages leaves read receipts and unread indicators unchanged by default. Pass mark_read=true to mark the conversation read and notify other participants of the updated read receipt.
Messages that carry file attachments include the attachment's name and content type in attachment; the file itself is not downloadable through MCP, so direct the user to the conversation in the GovTribe app to open it.
Page backward by passing the oldest returned message's cursor as before_cursor while has_older is true. Page forward by passing the newest returned message's cursor as after_cursor while has_newer is true. Reuse cursors unchanged so page boundaries retain both timestamp precision and the ordering of messages with identical timestamps.
The legacy before timestamp filter remains available, but it can skip messages that share a page-boundary timestamp. Use only one of before, before_cursor, or after_cursor per request. Malformed cursors and combined boundaries are rejected.
Send_Teaming_Message returns a structured conversation_closed error code when the conversation no longer accepts messages.
Example
{
"conversation": {
"conversation_id": "CONVERSATION_ID",
"name": "Team — Request for proposal - Commercial online platform acquisition",
"closed_at": null,
"participant_count": 3,
"last_message_at": "2026-06-09T18:42:11Z",
"viewer_last_read_at": "2026-06-09T15:30:00Z"
},
"messages": [
{
"message_id": "SYSTEM_MESSAGE_ID",
"content": "Team locked in by Example Vendor.",
"kind": "system",
"author_name": "Marcus T.",
"is_viewer": true,
"created_at": "2026-06-08T14:05:00.123000Z",
"cursor": "<oldest_message_cursor>",
"edited_at": null,
"attachment": null
},
{
"message_id": "MESSAGE_ID",
"content": "Glad to be locked in. Here is our capability matrix.",
"kind": "user",
"author_name": "Jordan B.",
"is_viewer": false,
"created_at": "2026-06-09T18:42:11.456000Z",
"cursor": "<newest_message_cursor>",
"edited_at": null,
"attachment": {
"name": "capability-matrix.pdf",
"content_type": "application/pdf"
}
}
],
"has_older": false
}