MCP data structures ​
These are the application result models exposed by the 70 MCP tools. Names such as McpChatInfo are .NET model names; tables use their JSON field names (camelCase). Requests consist of the tool arguments listed in the tool reference, not separate request-object types. Message and notification payloads use the shared ExternalMessage shape.
Identifiers and primitive values ​
| Value | Meaning |
|---|---|
| User ID | Opaque string identifying an account. Obtain it from get_me, list_members or list_peer_chats. |
| Chat ID | Opaque string identifying a group, direct or place chat. Obtain it from a chat-list result and reuse it unchanged. |
| Place ID | Opaque string identifying a place, obtained from list_places. It is not the ID of a chat inside the place. |
Message ID / LID / entryId | 64-bit integer local to one chat. The pair (chatId, id) identifies a message. IDs can have gaps. |
| Author ID | String identifying an author within a chat (or a place's root chat). It is not interchangeable with a user ID. |
| Avatar ID, Invite ID, Upload ID, Stream ID, Conversation ID | Opaque strings returned by the tool that creates or lists them. |
| Media ID | String identifying a media object, returned by uploads and attachments. Use returned URLs to retrieve content. |
| Version | 64-bit message version token for identifying changes. It is not a product release version or message ID. |
| Timestamps | Milliseconds since the Unix epoch (UTC), as 64-bit integers. |
Use a JSON implementation that preserves 64-bit integers when storing message IDs, versions and timestamps. Do not derive chronological ordering from opaque string IDs.
Account and avatars ​
McpAccount ​
| Field | Type | Meaning |
|---|---|---|
userId | string | Your user ID. |
name | string | Display name (the default avatar's name). |
avatarId | string | Default avatar ID. |
avatarName | string | Default avatar name. |
avatarUrl | string or null | Default avatar picture URL. |
McpAvatar ​
| Field | Type | Meaning |
|---|---|---|
id | string | Avatar ID. |
name | string | Avatar name. |
bio | string | Short bio; may be empty. |
pictureUrl | string or null | Picture URL. |
isDefault | boolean | This avatar is the account's default. |
Places and chats ​
McpListPlacesResult / McpPlaceInfo ​
McpListPlacesResult has places (McpPlaceInfo[]; may be empty).
McpPlaceInfo field | Type | Meaning |
|---|---|---|
id | string | Place ID. |
isPublic | boolean | Whether the place is public. |
title | string | Place title. |
McpListChatsResult / McpChatInfo ​
McpListChatsResult has chats (McpChatInfo[]; may be empty).
McpChatInfo field | Type | Meaning |
|---|---|---|
id | string | Chat ID. |
isPublic | boolean | Whether the chat is public. |
title | string | Chat title; direct chats can use the other person's display name as a fallback. |
Neither list wrapper includes a total count or a separate next-page token. Reuse the final item's id as the exclusive cursor, following the caveats in the tool reference.
McpChatDetails ​
| Field | Type | Meaning |
|---|---|---|
id | string | Chat ID. |
kind | string | Chat kind name (for example group, peer or place). |
title, description | string | Title and description. |
isPublic | boolean | Whether anyone can join. |
placeId | string or null | Place ID for a place chat; otherwise null. |
pictureUrl | string or null | Picture URL. |
memberCount | integer | Number of authors listed for the chat. |
permissions | string[] | Names of the permission flags the caller has, such as Invite or EditMembers. |
McpPlaceDetails ​
| Field | Type | Meaning |
|---|---|---|
id | string | Place ID. |
title, description | string | Title and description. |
isPublic | boolean | Whether the place is public. |
pictureUrl, backgroundUrl | string or null | Picture and background URLs. |
memberCount | integer | Number of authors listed for the place. |
permissions | string[] | Permission flag names the caller has. |
McpListMembersResult / McpMember ​
McpListMembersResult has members (McpMember[]).
McpMember field | Type | Meaning |
|---|---|---|
authorId | string | Author ID; also the paging cursor. |
userId | string or null | User ID; User ID. |
name | string | Author's avatar name. |
isOwner | boolean | The member is an owner. |
McpInviteLink ​
| Field | Type | Meaning |
|---|---|---|
id | string | Invite ID; pass to revoke_invite_link. |
url | string | Absolute invite URL. Treat as a secret. |
remaining | integer | Remaining uses. |
expiresOn | 64-bit integer | Expiry, Unix milliseconds. |
Messages ​
McpIdRange of long ​
| Field | Type | Meaning |
|---|---|---|
firstId | 64-bit integer | Inclusive first local message ID. |
lastId | 64-bit integer | Inclusive last local message ID. |
An empty range has lastId < firstId. The underlying .NET model is generic McpIdRange<T>; MCP tools use it only with long.
McpListMessagesResult ​
| Field | Type | Meaning |
|---|---|---|
range | McpIdRange<long> | Inclusive bounds of this returned page, or an empty range. |
fullRange | McpIdRange<long> | Chat's full local-ID range at the time of reading. |
messages | ExternalMessage[] | Returned messages in ascending local-ID order. |
ExternalMessage ​
| Field | Type | Meaning |
|---|---|---|
id | 64-bit integer | Message's local ID in its chat. |
version | 64-bit integer | Message version token. |
createdAt | 64-bit integer | Message beginning time, Unix milliseconds. |
author | ExternalAuthor | Author of the message. |
isSystem | boolean | This is a system entry. |
isStreaming | boolean | Content is currently streaming. |
isTranscribed | boolean | The entry has associated audio. This is derived from the audio flag, not a transcript-quality guarantee. |
isRemoved | boolean | Removal flag. Normal list_messages results omit removed entries. |
text | string or null | Stored message content; null while isStreaming is true. May contain Voxt text markup. In-progress transcription is never exposed. |
textTruncated | boolean or null | Set only by producers that truncate text; MCP leaves it null. |
attachments | ExternalAttachment[] | Attached media metadata; empty if there are none. |
repliedToId | 64-bit integer or null | Local ID of the message this one replies to. |
mentions | string[] | Author IDs mentioned in the text. |
url | string | Absolute link to the message. |
origin | ExternalOrigin | How the message was produced. |
The model does not contain a reaction list, a thread model or an audio stream; use list_reactions for reactions.
ExternalAuthor ​
| Field | Type | Meaning |
|---|---|---|
id | string | Chat-specific author ID. |
name | string | Author avatar name; empty if unavailable. |
avatarUrl | string or null | Avatar picture URL. |
ExternalOrigin ​
| Field | Type | Meaning |
|---|---|---|
kind | string | user, api (posted through an API key or MCP), webhook (posted through an incoming webhook) or bot. |
ExternalAttachment ​
| Field | Type | Meaning |
|---|---|---|
mediaId | string | Backing media ID. |
kind | string | image, video, audio or file, classified from content type. |
fileName | string | Stored filename. |
contentType | string | MIME content type. |
length | 64-bit integer | Media size in bytes. |
width, height | integer | Stored pixel size where applicable. |
url | string | Content URL. |
previewUrl | string or null | Image preview URL when the image proxy is available; otherwise null. |
thumbnailUrl | string or null | Thumbnail content URL when a thumbnail exists; otherwise null. |
Do not require dimensions or previews for every file type. To attach files to a new message, upload them and pass the returned media IDs to post_message.
McpReactionSummary ​
| Field | Type | Meaning |
|---|---|---|
emoji | string | The emoji. |
count | 64-bit integer | Number of reactions with this emoji. |
authorIds | string[] | The first reacting authors. |
McpFoundMessage / McpFoundContact ​
McpFoundMessage field | Type | Meaning |
|---|---|---|
chatId | string | Chat containing the match. |
entryId | 64-bit integer | Message local ID. |
text | string | Matched text. |
McpFoundContact field | Type | Meaning |
|---|---|---|
kind | string | user, place or chat. |
id | string | User ID, place ID or chat ID, per kind. |
title | string | Name or title. |
Streams ​
McpMessageStream ​
| Field | Type | Meaning |
|---|---|---|
streamId | string | Pass to append_message_stream and finish_message_stream. |
entryId | 64-bit integer | Local ID of the message being filled in. |
offset | integer | Characters of text the server has accepted. |
speechBacklog | number or null | Seconds of speech a listener still has to hear; null while nobody is listening. |
isFinished | boolean | The stream is closed. |
McpVoiceStream ​
| Field | Type | Meaning |
|---|---|---|
streamId | string | Pass to the other voice-stream tools. |
entryId | 64-bit integer or null | Null until finish_voice_stream returns it, and still null if nothing was posted. |
textOffset | integer | Characters of text the server has accepted. |
audioBytes | 64-bit integer | Audio bytes received. |
audioDuration | number | Seconds of audio the server has decoded. |
isFinished | boolean | The stream is closed. |
Uploads and chat content ​
McpUploadStatus ​
| Field | Type | Meaning |
|---|---|---|
uploadId | string | Upload ID. |
mediaId | string or null | Media ID reserved for the upload. Null after begin_import_upload, until finish_import_upload. |
offset | 64-bit integer | Bytes the server has received. After finish_upload reaches Ready, equals length. |
length | 64-bit integer | Total length in bytes. |
stage | string | Uploading, a processing stage name, or Ready. |
progress | number | Percent complete for the current stage. |
media | McpMediaRef or null | Set when stage is Ready. |
McpMediaRef ​
| Field | Type | Meaning |
|---|---|---|
mediaId | string | Media ID to pass to other tools. |
kind | string | image, video, audio or file. |
fileName, contentType | string | Stored name and MIME type. |
length | 64-bit integer | Size in bytes. |
width, height | integer | Pixel size where applicable. |
url | string | Content URL. |
previewUrl, thumbnailUrl | string or null | Preview and thumbnail URLs when available. |
McpContentPage of T ​
| Field | Type | Meaning |
|---|---|---|
periodKey | string | Period (month) this page belongs to. |
pageIndex | integer | Page within the period (0-based). |
pageCount | integer | Pages in the period. |
nextPeriodKey | string or null | Older period to request next; null if none. |
items | T[] | McpMediaItem, McpFileItem or McpLinkItem. |
McpMediaItem field | Type | Meaning |
|---|---|---|
entryId | 64-bit integer | Message the media belongs to. |
at | 64-bit integer | Time, Unix milliseconds. |
mediaId, kind, fileName, contentType | string | As in McpMediaRef. |
length | 64-bit integer | Size in bytes. |
url | string | Content URL. |
thumbnailUrl | string or null | Thumbnail URL. |
McpFileItem field | Type | Meaning |
|---|---|---|
entryId, at | 64-bit integer | Message and time. |
mediaId, fileName, contentType | string | File identity. |
length | 64-bit integer | Size in bytes. |
url | string | Content URL. |
McpLinkItem field | Type | Meaning |
|---|---|---|
entryId, at | 64-bit integer | Message and time. |
url | string | The link. |
title, description | string or null | Link preview text when available. |
Conversations ​
McpListConversationsResult / McpConversation ​
McpListConversationsResult has conversations (McpConversation[]) and nextBeforeId (string or null).
McpConversation field | Type | Meaning |
|---|---|---|
id | string | Conversation ID. |
chatId | string | Chat ID. |
startEntryId, endEntryId | 64-bit integer | First and last message local IDs. |
startsAt, endsAt | 64-bit integer | Start and end, Unix milliseconds. |
title, description, summary | string | Generated title, description and summary. |
messageCount, attachmentCount | integer | Counts of messages and attachments. |
authorIds | string[] | Participating author IDs. |
Notifications ​
McpListNotificationsResult / McpNotification ​
McpListNotificationsResult has items (McpNotification[]) and version (string): an identifier of the exact set, to pass to wait_for_notifications.
McpNotification field | Type | Meaning |
|---|---|---|
id | string | Notification ID; pass it to dismiss_notification. |
kind | string | Lowercase notification kind, such as message, reply, invitation, mention, reaction, attention, thread, conversation, incomingcall or speechstarted. |
at | 64-bit integer | Sent time, Unix milliseconds. |
chatId | string or null | Related chat. |
entryId | 64-bit integer or null | Related message local ID. |
authorId | string or null | Author who triggered it. |
title, text | string | Notification title and text. |
message | ExternalMessage or null | The message, if it exists and the chat is still accessible. |
Import ​
McpImportStatus / McpImportPendingMember ​
get_import returns McpImportStatus. When active is false, all other fields are null.
| Field | Type | Meaning |
|---|---|---|
active | boolean | An import is running for the chat. |
importId | string | Import ID for the other import tools. |
scope | string | chat, or place for a place-wide import. |
placeId | string or null | Place ID of a place-wide import. |
startedBy | string or null | User ID of the owner who started it. |
startedAt | 64-bit integer | Start time, Unix milliseconds. |
consentingCount, nonConsentingCount | integer | Members who have and have not consented. |
consentPercent | number | Share of consenting members, rounded to one decimal. |
myConsent | boolean | You have consented. |
pending | McpImportPendingMember[] or null | Owners only: a page of members who have not consented. |
McpImportPendingMember field | Type | Meaning |
|---|---|---|
userId | string | User ID. |
name | string | The member's avatar name. |
peerChatId | string or null | Your direct chat with the member, or null if there is none. |
McpImportSession / McpImportEndResult ​
start_import returns McpImportSession: importId, chatId, scope (chat or place), startedBy (user ID or null) and startedAt (Unix milliseconds). end_import returns McpImportEndResult with nonConsentingCount, the number of members who had not consented when the import ended.
McpImportMessage / McpImportMessagesResult ​
import_messages takes messages, an array of McpImportMessage:
| Field | Type | Meaning |
|---|---|---|
authorUserId | string | User ID of the author. |
sentAt | 64-bit integer | Original time, Unix milliseconds. |
text | string | Message text, up to 64 KB. |
replyToId | 64-bit integer or null | Local ID of a message already in the chat. |
uploadIds | string[] or null | Up to 10 upload IDs. |
It returns McpImportMessagesResult, whose items has one entry per message in input order: id (the new local message ID, or null) and error (the reason it was rejected, or null).
Model map ​
get_me → McpAccount
list_avatars / create_avatar / update_avatar → McpAvatar
list_places → McpListPlacesResult → McpPlaceInfo[]
list_group_chats / list_peer_chats / list_place_chats
→ McpListChatsResult → McpChatInfo[]
get_chat / create_chat / update_chat → McpChatDetails
get_place / create_place / update_place → McpPlaceDetails
list_members / list_place_members → McpListMembersResult → McpMember[]
create_invite_link / create_place_invite_link / list_*_invite_links → McpInviteLink
get_id_range → McpIdRange<long>
list_messages → McpListMessagesResult → range, fullRange; messages: ExternalMessage[]
ExternalMessage → ExternalAuthor, ExternalAttachment[], ExternalOrigin
list_pinned_messages → ExternalMessage[]
list_reactions → McpReactionSummary[]
post_message → long
start/append/finish_message_stream → McpMessageStream
start/append/finish_voice_stream → McpVoiceStream
begin/append/finish_upload, upload_from_url → McpUploadStatus → McpMediaRef
begin/finish_import_upload, import_upload_from_url → McpUploadStatus → McpMediaRef
get_import → McpImportStatus → McpImportPendingMember[]
start_import → McpImportSession
end_import → McpImportEndResult
import_messages → McpImportMessagesResult → items (id or error)
list_media / list_files / list_links → McpContentPage<McpMediaItem | McpFileItem | McpLinkItem>
list_conversations → McpListConversationsResult → McpConversation[]
get_conversation → McpConversation
search_messages → McpFoundMessage[]
search_contacts → McpFoundContact[]
list_notifications → McpListNotificationsResult → McpNotification[] → ExternalMessage
all other tools → no application result valueAll model leaves are strings, booleans, numbers or null; no further domain models are nested behind the structures above.
Source ​
At d2eee636e0f13804421d2864a9575fa21ab6c940: MCP models, conversion rules, ExternalMessage and its conversion.