0.27.2npm · msteams-mcp · current release
Observed 2026-08-18T23:55:16.447Z using mcpSecurity-inventory. Status: partial. Negotiated protocol: 2025-06-18.
{
"tools": {},
"resources": {}
}| Tool | Category | Annotations | Risk |
|---|---|---|---|
teams_add_favoriteAdd a conversation to the user's favourites/pinned list.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID to pin (e.g., \"19:abc@thread.tacv2\")"
}
},
"required": [
"conversationId"
]
} | — | — · — | — |
teams_add_reactionAdd an emoji reaction to a message. Common reactions: like (👍), heart (❤️), laugh (😂), surprised (😮), sad (😢), angry (😠). Use teams_search_emoji to find other emojis.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID containing the message"
},
"messageId": {
"type": "string",
"description": "The message ID to react to. Use: serverMessageId from teams_send_message, id from teams_get_thread, or messageId from teams_search. NOT the messageId from teams_send_message (that is client-generated and will fail)."
},
"emoji": {
"type": "string",
"description": "The emoji key (e.g., \"like\", \"heart\", \"laugh\"). Get from teams_search_emoji or use common ones directly."
}
},
"required": [
"conversationId",
"messageId",
"emoji"
]
} | — | — · — | — |
teams_create_group_chatCreate a new group chat with multiple people. Returns a conversation ID for use with teams_send_message. You are automatically included as a member. For 1:1 chats, use teams_get_chat instead.Input schema{
"type": "object",
"properties": {
"userIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of OTHER users to add (at least 2, not including yourself). Can be: MRI (8:orgid:guid), object ID with tenant (guid@tenantId), or raw GUID. Get these from teams_search_people or teams_get_frequent_contacts.",
"minItems": 2
},
"topic": {
"type": "string",
"description": "Optional chat name/topic. If omitted, Teams shows member names."
}
},
"required": [
"userIds"
]
} | — | — · — | — |
teams_delete_messageDelete one of your own messages (soft delete - the message remains but content becomes empty). You can only delete messages you sent, unless you are a channel owner/moderator.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID containing the message"
},
"messageId": {
"type": "string",
"description": "The message ID to delete. Use: serverMessageId from teams_send_message, id from teams_get_thread, or messageId from teams_search."
}
},
"required": [
"conversationId",
"messageId"
]
} | — | — · — | — |
teams_edit_messageEdit one of your own messages (same markdown and @mention rules as teams_send_message: people @[Name](mri), channel tags @[TagName](tag:tagId) from teams_get_tags). You can only edit messages you sent.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID containing the message"
},
"messageId": {
"type": "string",
"description": "The message ID to edit. Use: serverMessageId from teams_send_message, id from teams_get_thread, or messageId from teams_search."
},
"content": {
"type": "string",
"description": "New content in markdown (not raw HTML): **bold**, *italic*, lists, code, @[Person](mri), @[Tag](tag:id), [text](url) — same as teams_send_message."
},
"contentType": {
"type": "string",
"enum": [
"auto",
"text",
"html",
"markdown"
],
"description": "How to interpret content (default \"markdown\"). \"text\" sends verbatim without markdown interpretation; \"html\" is caller-supplied Teams HTML; \"auto\" converts only when markdown/mention syntax is present."
}
},
"required": [
"conversationId",
"messageId",
"content"
]
} | — | — · — | — |
teams_find_channelFind Teams channels by name. Searches both (1) channels in teams you're a member of (reliable) and (2) channels across the organisation (discovery). Results indicate whether you're already a member via the isMember field. Channel IDs can be used with teams_get_thread to read messages.Input schema{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Channel name to search for (partial match)"
},
"limit": {
"type": "number",
"description": "Maximum number of results (default: 10, max: 50)"
}
},
"required": [
"query"
]
} | — | — · — | — |
teams_get_activityGet the user's activity feed - mentions, reactions, replies, and other notifications. Returns recent activity items with sender, content, and source conversation context. Pass syncState from a previous response to get only newer items.Input schema{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Maximum number of activity items to return (default: 50, max: 200)"
},
"syncState": {
"type": "string",
"description": "Pagination token from a previous teams_get_activity response. When provided, returns only activity newer than the previous fetch."
}
}
} | — | — · — | — |
teams_get_chatGet the conversation ID for a 1:1 chat with a person. Use this to start a new chat or find an existing one. The conversation ID can then be used with teams_send_message to send messages.Input schema{
"type": "object",
"properties": {
"userId": {
"type": "string",
"description": "The user's identifier. Can be: MRI (8:orgid:guid), object ID with tenant (guid@tenantId), or raw object ID (guid). Get this from teams_search_people results."
}
},
"required": [
"userId"
]
} | — | — · — | — |
teams_get_favoritesGet the user's favourite/pinned conversations in Teams. Returns conversation IDs with display names (channel name, chat topic, or participant names) and type (Channel, Chat, Meeting).Input schema{
"type": "object",
"properties": {}
} | — | — · — | — |
teams_get_followed_threadsGet the list of threads the user is following in Teams. Returns references to followed threads with source conversation IDs and direct links. Use teams_get_message with sourceConversationId and sourcePostId to fetch the full post, or teams_get_thread for the full thread.Input schema{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Maximum number of followed threads to return (default: 50, max: 200)"
}
}
} | — | — · — | — |
teams_get_frequent_contactsGet the user's frequently contacted people, ranked by interaction frequency. Useful for resolving ambiguous names (e.g., "Rob" → which Rob?) by checking who the user commonly works with. Returns display name, email, job title, and department.Input schema{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Maximum number of contacts to return (default: 50)"
}
}
} | — | — · — | — |
teams_get_meGet the current user's profile information including email, display name, and Teams ID. Useful for finding @mentions or identifying the current user.Input schema{
"type": "object",
"properties": {}
} | — | — · — | — |
teams_get_meetingsGet meetings from your Teams calendar. Returns meetings with: subject, startTime, endTime, organizer (name/email), location, joinUrl (Teams link), threadId (use with teams_get_thread to read meeting chat), myResponse (None/Accepted/Tentative/Declined), showAs (Free/Busy), isOrganizer. Defaults to next 7 days from now. For past meetings (e.g., "summarise my last meeting"), set startDate to a past date. To find meetings with a person, get results and filter by organizer.email.Input schema{
"type": "object",
"properties": {
"startDate": {
"type": "string",
"description": "Start of date range (ISO 8601, e.g., \"2026-02-01T00:00:00.000Z\"). Defaults to now."
},
"endDate": {
"type": "string",
"description": "End of date range (ISO 8601). Defaults to 7 days from now."
},
"limit": {
"type": "number",
"description": "Maximum number of meetings to return (default: 50, max: 200)"
}
},
"required": []
} | — | — · — | — |
teams_get_messageGet a single message by ID with full content. Works for messages of any age - no retention limit. Includes reactions (individual reactors) and reactionSummary (counts per emoji) when present. Use this to resolve truncated search results, saved message stubs, or retrieve any specific message when you have the conversationId and messageId.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID containing the message (e.g., from search results, saved messages, or activity feed)"
},
"messageId": {
"type": "string",
"description": "The message ID to fetch (e.g., from search results, saved messages, or teams_get_thread)"
}
},
"required": [
"conversationId",
"messageId"
]
} | — | — · — | — |
teams_get_personGet one or more people's profiles by MRI (e.g. "8:orgid:uuid"). Returns display name, email, job title, department, and company. Useful for resolving MRIs (e.g. from reactions or activity) to real identities. Pass multiple MRIs for batch lookup.Input schema{
"type": "object",
"properties": {
"mris": {
"type": "array",
"items": {
"type": "string"
},
"description": "One or more MRIs to look up (e.g. [\"8:orgid:abc-123\", \"8:orgid:def-456\"]).",
"minItems": 1
}
},
"required": [
"mris"
]
} | — | — · — | — |
teams_get_saved_messagesGet the list of messages the user has saved (bookmarked) in Teams. Returns references to saved messages with source conversation IDs and direct links. Use teams_get_message with sourceConversationId and sourceMessageId to fetch the full message content.Input schema{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Maximum number of saved messages to return (default: 50, max: 200)"
}
}
} | — | — · — | — |
teams_get_shared_filesGet files and links shared in a Teams conversation. Returns file names, URLs, extensions, sizes, and who shared them. Works for channels, group chats, 1:1 chats, and meeting chats. Use the conversationId from other tools (teams_get_favorites, teams_search, teams_find_channel, teams_get_chat). Supports pagination via skipToken for conversations with many files.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID to get shared files for (e.g., \"19:abc@thread.tacv2\" for a channel, or a chat conversation ID)."
},
"pageSize": {
"type": "number",
"description": "Number of items per page (default: 25, max: 100)"
},
"skipToken": {
"type": "string",
"description": "Continuation token from a previous response to get the next page of results."
}
},
"required": [
"conversationId"
]
} | — | — · — | — |
teams_get_tagsGet tags for a Teams team. Returns tag IDs, display names, and member counts. Use the teamId from teams_find_channel results. Optionally filter by name with the query parameter.
To @mention a tag in a message, use the tag MRI format: @[TagName](tag:{tagId}). Example: after finding tag "engineering" with id "abc123", use @[engineering](tag:abc123) in teams_send_message content.Input schema{
"type": "object",
"properties": {
"teamId": {
"type": "string",
"description": "The team group ID (GUID). Get this from teams_find_channel results (teamId field)."
},
"query": {
"type": "string",
"description": "Optional: filter tags by name (case-insensitive partial match)."
}
},
"required": [
"teamId"
]
} | — | — · — | — |
teams_get_threadGet messages from a Teams conversation/thread. Default: newest-first (latest messages at top). For channels: messages include isThreadReply (true for replies) and threadRootId (ID of the post being replied to). Messages without threadRootId are top-level posts. Use threadRootId to group related messages. Messages include reactions (individual reactors, names resolved where possible) and reactionSummary (counts per emoji) when present. Each message includes a "when" field with the day of week (e.g., "Friday, January 30, 2026, 10:45 AM UTC"). Returns unread count and can optionally mark as read.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID to get messages from (e.g., \"19:abc@thread.tacv2\" from search results). Either this or fromUrl is required."
},
"fromUrl": {
"type": "string",
"description": "A Teams message deep link (https://teams.microsoft.com/l/message/...). Parsed into the conversation ID automatically, so you can paste a link directly. If it points to a channel thread reply, the thread is scoped automatically. Use instead of conversationId."
},
"threadRootId": {
"type": "string",
"description": "For channels: the message ID of a top-level post. When provided, returns only the replies to that specific thread instead of all channel messages."
},
"limit": {
"type": "number",
"description": "Maximum number of messages to return (default: 50, max: 200)"
},
"markRead": {
"type": "boolean",
"description": "If true, marks the conversation as read up to the latest message after fetching (default: false)"
},
"order": {
"type": "string",
"enum": [
"asc",
"desc"
],
"description": "Sort order: \"desc\" (newest-first, default) or \"asc\" (oldest-first for chronological reading)"
},
"since": {
"type": "string",
"description": "ISO 8601 timestamp (e.g., \"2026-02-26T00:00:00Z\"). When provided, only returns messages after this time."
}
}
} | — | — · — | — |
teams_get_transcriptGet the transcript of a Teams meeting. Requires the meeting's threadId (from teams_get_meetings). Returns formatted transcript text with timestamps and speaker names, ready for reading or summarization. The meeting must have had transcription enabled. Optionally pass meetingDate (ISO string, e.g. the startTime from teams_get_meetings) to narrow the search.Input schema{
"type": "object",
"properties": {
"threadId": {
"type": "string",
"description": "The meeting thread ID (from the threadId field of teams_get_meetings results, e.g., \"19:meeting_xxx@thread.v2\")."
},
"meetingDate": {
"type": "string",
"description": "Optional ISO date/time of the meeting (e.g., the startTime from teams_get_meetings). Helps narrow the search for recurring meetings."
}
},
"required": [
"threadId"
]
} | — | — · — | — |
teams_get_unreadGet unread status. Without conversationId: one bulk API call over your recent conversations (up to 200), returns separate lists of unread chats and channels (conversationId, displayName, lastMessageFrom) plus counts. With conversationId: unread count for that chat/channel using read horizon vs recent messages.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "Optional. If set, returns unreadCount (and related fields) for this conversation only. If omitted, returns bulk unreadChats/unreadChannels across recent conversations."
}
}
} | — | — · — | — |
teams_list_chatsList the user's recent conversations (1:1 chats, group chats, meetings and channels), newest activity first. Returns conversationId, chatType (oneOnOne/group/meeting/channel), topic, and a preview of the last message (sender, time, text). Use the returned conversationId with teams_get_thread to read messages or teams_send_message to reply. This is the fastest way to discover active chat IDs without a search.Input schema{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Maximum number of conversations to return (default: 50, max: 200)."
}
}
} | — | — · — | — |
teams_loginTrigger manual login flow for Microsoft Teams. Use this if the session has expired or you need to switch accounts.Input schema{
"type": "object",
"properties": {
"forceNew": {
"type": "boolean",
"description": "Force a new login even if a session exists (default: false)"
}
}
} | — | — · — | — |
teams_mark_readMark a conversation as read up to a specific message. This updates your read position so messages up to (and including) the specified message are marked as read.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID to mark as read"
},
"messageId": {
"type": "string",
"description": "The message ID to mark as read up to (all messages up to this point will be marked read)"
}
},
"required": [
"conversationId",
"messageId"
]
} | — | — · — | — |
teams_remove_favoriteRemove a conversation from the user's favourites/pinned list.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID to unpin"
}
},
"required": [
"conversationId"
]
} | — | — · — | — |
teams_remove_reactionRemove an emoji reaction from a message.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID containing the message"
},
"messageId": {
"type": "string",
"description": "The message ID to remove the reaction from. Use: serverMessageId from teams_send_message, id from teams_get_thread, or messageId from teams_search."
},
"emoji": {
"type": "string",
"description": "The emoji key to remove (e.g., \"like\", \"heart\")"
}
},
"required": [
"conversationId",
"messageId",
"emoji"
]
} | — | — · — | — |
teams_save_messageSave (bookmark) a message in Teams. Saved messages can be accessed later from the Saved view in Teams.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID containing the message"
},
"messageId": {
"type": "string",
"description": "The message ID to save. Use: serverMessageId from teams_send_message, id from teams_get_thread, or messageId from teams_search."
},
"rootMessageId": {
"type": "string",
"description": "For channel threaded replies only: the ID of the thread root post. Not needed for top-level posts or non-channel conversations."
}
},
"required": [
"conversationId",
"messageId"
]
} | — | — · — | — |
teams_searchSearch for messages in Microsoft Teams. Returns matching messages with sender, timestamp, content, conversationId (for replies), and pagination info. Supports operators: from:email, to:name, sent:YYYY-MM-DD, sent:today, is:Messages, is:Meetings, is:Channels, is:Chats, hasattachment:true, "Name" for @mentions. The in:channel operator only works reliably when combined with content (e.g., "meeting in:IT Support"). Combine with NOT to exclude. Results sorted by recency.Input schema{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query with optional operators. WORKING: from:email (or name), to:name (spaces not dots - \"to:rob macdonald\"), sent:YYYY-MM-DD, sent:>=YYYY-MM-DD, sent:today, is:Messages, is:Meetings, is:Channels, is:Chats (case-sensitive, plural required), hasattachment:true, \"Display Name\" for @mentions. CHANNEL FILTER: in:channel only works reliably WITH content terms (e.g., \"budget in:IT Support\"). NEVER quote channel names. NOT WORKING: mentions:, sent:lastweek, @me, from:me, is:meeting (must be is:Meetings). Use teams_get_me first to get email/displayName."
},
"maxResults": {
"type": "number",
"description": "Maximum number of results to return (default: 25)"
},
"from": {
"type": "number",
"description": "Starting offset for pagination (0-based, default: 0). Use this to get subsequent pages of results."
},
"size": {
"type": "number",
"description": "Page size (default: 25). Number of results per page."
}
},
"required": [
"query"
]
} | — | — · — | — |
teams_search_emailSearch emails in the user's mailbox. Returns matching emails with subject, sender, recipients, timestamp, preview, read status, and pagination info. Supports the same search operators as Outlook: from:email, to:name, subject:"text", hasattachment:true, sent:YYYY-MM-DD, sent:>=YYYY-MM-DD, sent:today, is:read, is:unread. Results sorted by recency. Uses the same authentication as Teams — no additional login required.Input schema{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query with optional operators. Supports: from:email, to:name, subject:\"text\", hasattachment:true, sent:YYYY-MM-DD, sent:>=YYYY-MM-DD, sent:today, is:read, is:unread. Plain text searches across subject and body."
},
"maxResults": {
"type": "number",
"description": "Maximum number of results to return (default: 25)"
},
"from": {
"type": "number",
"description": "Starting offset for pagination (0-based, default: 0). Use this to get subsequent pages of results."
},
"size": {
"type": "number",
"description": "Page size (default: 25). Number of results per page."
}
},
"required": [
"query"
]
} | — | — · — | — |
teams_search_emojiSearch for emojis by name or keyword. Returns both standard Teams emojis and custom organisation emojis, indicating which is which. Use the returned key with teams_add_reaction.Input schema{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search term (e.g., \"thumbs\", \"heart\", \"laugh\", \"cat\")"
}
},
"required": [
"query"
]
} | — | — · — | — |
teams_search_peopleSearch for people in Microsoft Teams by name or email. Returns matching users with display name, email, job title, and department. Useful for finding someone to message.Input schema{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search term - can be a name, email address, or partial match"
},
"limit": {
"type": "number",
"description": "Maximum number of results to return (default: 10)"
}
},
"required": [
"query"
]
} | — | — · — | — |
teams_send_messageSend a message to a Teams conversation. Use markdown for formatting (not HTML): **bold**, *italic*, ~~strikethrough~~, `code`, ```code blocks```, lists, and newlines. Supports @mentions: people with @[Name](mri) (MRI from teams_search_people) and channel tags with @[TagName](tag:tagId) (IDs from teams_get_tags). Markdown links [text](url) support http(s) and mailto. Defaults to self-notes (48:notes). For channel thread replies, provide replyToMessageId. For a new channel thread with a title, provide subject. To schedule for later, provide scheduleAt (ISO 8601). Set contentType to "text" to send content verbatim without markdown interpretation.Input schema{
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "The message content in markdown (not HTML). Supports: **bold**, *italic*, ~~strikethrough~~, `inline code`, ```code blocks```, bullet lists (- item), numbered lists (1. item), and newlines. Do NOT send raw HTML tags (unless contentType is \"html\"). For people @mentions use @[DisplayName](mri) (MRI from teams_search_people). For channel tag @mentions use @[DisplayName](tag:tagId) (tag IDs from teams_get_tags). Markdown links [text](url) are supported (http/https/mailto)."
},
"conversationId": {
"type": "string",
"description": "The conversation ID to send to. Use \"48:notes\" for self-chat (default), or a channel/chat conversation ID."
},
"replyToMessageId": {
"type": "string",
"description": "For channel thread replies: the message ID of the thread root. Use serverMessageId from teams_send_message, id from teams_get_thread, or messageId from teams_search."
},
"contentType": {
"type": "string",
"enum": [
"auto",
"text",
"html",
"markdown"
],
"description": "How to interpret content. \"markdown\" (default): convert markdown + @mentions + links. \"text\": send verbatim with no interpretation (use for content with literal * _ ` that should not be formatted). \"html\": caller-supplied Teams HTML. \"auto\": convert only when markdown/mention syntax is present."
},
"subject": {
"type": "string",
"description": "For channel posts only: a thread subject/title. Starts a new titled thread. Ignored for 1:1/group chats."
},
"scheduleAt": {
"type": "string",
"description": "Schedule the message for future delivery. ISO 8601 (e.g. \"2026-04-11T09:00:00Z\"); a timezone-less value is treated as UTC. Cannot be combined with @mentions or replyToMessageId."
}
},
"required": [
"content"
]
} | — | — · — | — |
teams_statusCheck the current authentication status and session state.Input schema{
"type": "object",
"properties": {}
} | — | — · — | — |
teams_unsave_messageRemove a saved (bookmarked) message in Teams.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID containing the message"
},
"messageId": {
"type": "string",
"description": "The message ID to unsave"
},
"rootMessageId": {
"type": "string",
"description": "For channel threaded replies only: the ID of the thread root post. Not needed for top-level posts or non-channel conversations."
}
},
"required": [
"conversationId",
"messageId"
]
} | — | — · — | — |
teams_wait_for_replyBlock until a new message arrives in a conversation, then return only the new messages. Polls server-side so you make one tool call instead of repeatedly reading the thread. Read-only and idempotent: it never posts (pair it with teams_send_message), and re-running with after=nextAfter resumes from the same point. The block is capped (~110s) to stay under client timeouts; on timeout it returns timedOut=true with nextAfter — just call again to keep waiting. By default the baseline is your most recent message, so after a teams_send_message you can call this with no "after" to wait for the reply.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID to watch. Either this or fromUrl is required."
},
"fromUrl": {
"type": "string",
"description": "A Teams message deep link (https://teams.microsoft.com/l/message/...) to watch, parsed into the conversation ID. Use instead of conversationId."
},
"after": {
"type": "string",
"description": "Only return messages newer than this message ID (the resume cursor). Defaults to your most recent message in the thread. Pass the nextAfter value from a previous timed-out response to continue waiting."
},
"maxWaitSeconds": {
"type": "number",
"description": "Maximum seconds to block before returning a timed-out result (default 60, max 110)."
},
"intervalSeconds": {
"type": "number",
"description": "Seconds between polls (default 5)."
},
"includeSelf": {
"type": "boolean",
"description": "Include your own messages in the result (default false, since you are usually waiting for someone else's reply)."
}
}
} | — | — · — | — |
Current authentication status for all Teams APIs
{
"resource_key": "teams://status",
"uri": "teams://status",
"name": "Authentication Status",
"description": "Current authentication status for all Teams APIs",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "868457e32e8accb55fe92daf199346eb52ca710c7c47c88398f33c89f88920dc"
}The authenticated user's Teams profile including email and display name
{
"resource_key": "teams://me/profile",
"uri": "teams://me/profile",
"name": "Current User Profile",
"description": "The authenticated user's Teams profile including email and display name",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "f519bbcc56a77d9577957f6d421dcaefffc9d6aa45e4c8b1734a3f300c657cb0"
}The user's favourite/pinned Teams conversations
{
"resource_key": "teams://me/favorites",
"uri": "teams://me/favorites",
"name": "Pinned Conversations",
"description": "The user's favourite/pinned Teams conversations",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "c83c2830eb49ebb71976c7e9ea6317141bc8e1fafb370a6fb42b337cfe20ab93"
}