Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
TEAMS_MCP_SCOPESNoOptional comma-separated scopes
TEAMS_MCP_CLIENT_IDYesApp registration client ID
TEAMS_MCP_TENANT_IDYesAzure AD tenant ID

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_teamsA

List all Microsoft Teams you are a member of.

Returns team id, name, and description for each team. Use a team_id with list_channels to see its channels.

list_channelsA

List channels in a Microsoft Teams team.

Use list_teams first to get the team_id. Returns channel id, name, description, and membership type.

list_team_tagsA

List TEAM-level tags of a team (id, name, member count).

Requires the TeamworkTag.Read delegated permission. These ids work as mention tag_ids in STANDARD channels. Shared channels have their own channel-scoped tags that Graph does not expose via any API - a team-level id posted there renders a phantom tag (no name, 0 members). For shared channels, reuse the tag id from the "mentions" entities of an existing message where a human @mentioned the tag.

list_chatsA

List recent chats with participant names.

Does NOT include channel conversations - use list_teams + list_channels for those. Returns chat id, topic, type, and member names.

list_channel_messagesA

List recent top-level messages in a Teams channel.

Use list_teams -> list_channels to get team_id and channel_id. Replies are not included - read a thread with list_thread_replies. Returns up to limit (1-200) messages, the threads with the latest activity first (a new reply moves its thread up); there is no cursor for older ones. Each message has id, sender, timestamp and plain-text content, plus attachments, hostedContents (inline image ids for download_attachment) and mention entities when present. System messages are excluded.

list_thread_repliesA

List replies in a channel message thread.

Use list_channel_messages to get the parent message_id (a top-level message). Returns the parent message followed by up to limit (1-200) replies, newest first. In a longer thread the oldest replies, the ones right after the parent, are left out and nothing marks the cut. System messages are excluded.

list_chat_messagesA

List messages in a chat, newest first, a page at a time.

Use list_chats to get the chat_id. Returns {"messages": [...], "next_before": ...} with up to limit (1-200) messages created after after and before before: ISO 8601 timestamps, both exclusive and optional; one without an offset is read as UTC. For the next older page call again with before=next_before and the same after; next_before is null when no older messages are left in that range. Pages come newest first, so after alone returns the newest messages of the chat, not the ones right after that time. Each message has id, sender, createdDateTime and plain-text content, plus attachments, hostedContents (inline image ids for download_attachment) and mention entities when present. System messages are left out, so a page can hold fewer than limit messages.

get_messageA

Get one chat or channel message by its Teams link or by ids.

link: a message link copied from Teams, shaped like https://teams.microsoft.com/l/message//?... Without a link, pass message_id with chat_id, or with team_id + channel_id (plus parent_message_id, the thread root id, for a reply in a channel thread). Returns where the message lives (chat_id, or team_id + channel_id and, for a reply, parent_message_id) and the message with id, sender, createdDateTime and content. To see what led up to a chat message, call list_chat_messages with before=. Pages come newest first, so for what followed pass after= together with a before a little later (an hour on, for example); after alone returns the newest messages of the chat.

send_channel_messageA

Send a message to a Teams channel.

Use list_teams -> list_channels to get team_id and channel_id. For replies to existing messages, use reply_to_channel_message instead.

content is plain text: newlines are kept and URLs become links; Markdown and HTML show literally. Each mention's "@" must appear in content exactly as given in name, or that mention is dropped without an error.

mentions: optional JSON array of users or team tags to @mention. Format: [{"user_id": "...", "name": "Display Name"} | {"tag_id": "...", "name": "TagName"}] Get tag_id from list_team_tags (tags work only in channel messages). Use @DisplayName in content where the mention should appear. Get user_id from list_team_members, list_channel_members, or get_user.

send_chat_messageA

Send a message to a Teams chat.

Use list_chats to get the chat_id. reply_to: optional message ID to reply to (shows as a quoted reply). Use list_chat_messages to get the message_id.

content is plain text: newlines are kept and URLs become links; Markdown and HTML show literally. Each mention's "@" must appear in content exactly as given in name, or that mention is dropped without an error.

mentions: optional JSON array of users to @mention: [{"user_id": "...", "name": "Display Name"}]. Team tags cannot be mentioned in chats. Get user_id from list_chat_members or get_user. Use @DisplayName in content where the mention should appear.

reply_to_channel_messageA

Reply to a message in a Teams channel thread.

Use list_channel_messages to get the message_id to reply to. For new top-level messages, use send_channel_message instead.

content is plain text: newlines are kept and URLs become links; Markdown and HTML show literally. Each mention's "@" must appear in content exactly as given in name, or that mention is dropped without an error.

mentions: optional JSON array of users or team tags to @mention. Format: [{"user_id": "...", "name": "Display Name"} | {"tag_id": "...", "name": "TagName"}] Get tag_id from list_team_tags (tags work only in channel messages). Use @DisplayName in content where the mention should appear.

create_chatA

Send a message in the 1:1 chat with a user, creating the chat if needed.

If a 1:1 chat with this user already exists, Graph returns it, so there is no need to look it up with list_chats first. Returns chat_id and the sent message. user_email: the user's sign-in address (userPrincipalName) or user id from get_user; a mail alias that differs from the sign-in address may not resolve.

list_team_membersA

List members of a Microsoft Teams team.

Returns member id, display name, email, and roles (owner/member). Use list_teams to get the team_id.

list_channel_membersA

List members of a specific channel.

Returns member id, display name, email, and roles. Use list_channels to get the channel_id.

list_chat_membersB

List members of a chat.

Returns member id, display name, email, and roles. Use list_chats to get the chat_id.

delete_messageA

Soft-delete a message you sent.

For channel messages: provide team_id + channel_id + message_id. For chat messages: provide chat_id + message_id. Works on top-level channel messages and on chat messages; channel thread replies are not supported (Graph addresses them under their parent message). Other members then see "This message has been deleted"; this server has no undo tool.

update_messageA

Edit a message you sent.

For channel messages: provide team_id + channel_id + message_id. For chat messages: provide chat_id + message_id. Works on top-level channel messages and on chat messages; channel thread replies are not supported (Graph addresses them under their parent message). Replaces the whole body with plain-text content; @mentions cannot be added on edit and existing ones become plain text. Only available in Global cloud (not GCC/DOD).

set_reactionA

React to a message with an emoji.

For channel messages: provide team_id + channel_id + message_id. For chat messages: provide chat_id + message_id. Works on top-level channel messages and on chat messages; channel thread replies are not supported (Graph addresses them under their parent message). Common reactions: like, angry, sad, laugh, heart, surprised. Custom reactions: any unicode emoji.

unset_reactionA

Remove a reaction from a message.

For channel messages: provide team_id + channel_id + message_id. For chat messages: provide chat_id + message_id. Works on top-level channel messages and on chat messages; channel thread replies are not supported (Graph addresses them under their parent message).

create_group_chatA

Create a new group chat with you and at least two other users.

For one other person use create_chat. Every call creates a new chat; Graph does not reuse an existing group chat with the same members. member_emails: comma-separated sign-in addresses of the other members (e.g. "a@org.com, b@org.com"). topic: optional chat topic/name. message: optional first message to send.

pin_messageA

Pin a message in a chat.

Only works in chats, not channels. Use list_chat_messages to get the message_id.

unpin_messageA

Unpin a message from a chat.

Use list_pinned_messages to get the pinned_message_info_id (NOT the message_id).

list_pinned_messagesB

List pinned messages in a chat.

Returns pinned message info including the message content. Use list_chats to get the chat_id.

mark_chat_readB

Mark a chat as read for the current user.

Use list_chats to get the chat_id.

mark_chat_unreadB

Mark a chat as unread for the current user.

last_message_read_date_time: ISO 8601 timestamp of the last message that should be considered as read (e.g. "2026-03-26T10:00:00Z"). Messages after this timestamp will appear as unread.

get_user_presenceA

Get the presence/availability status of a user.

Returns availability (Available, Busy, DoNotDisturb, Away, Offline, etc.) and activity (InACall, InAMeeting, Presenting, etc.). Get the user_id from list_team_members, list_chat_members, or get_user.

search_messagesA

Search Teams messages in all chats and channels the signed-in user can see.

Matches message content, including attachments (Microsoft Search). Returns up to size hits, newest first, with no further pages. Each hit has a snippet (summary, not the full body), sender name and email, timestamp, chatId or channelIdentity, and a webLink. Message ids are not returned - to reply to, react to or delete a hit, find it with list_chat_messages or list_channel_messages.

get_userA

Find users whose display name or email address starts with query.

Prefix match only (Graph startsWith on displayName or mail): a surname or a fragment from the middle of a name finds nothing. Returns up to limit users with id, display name, email (mail, else userPrincipalName) and job title. The id is what get_user_presence and mention user_id take; create_chat takes the email.

download_attachmentA

Download an inline image (hosted content) from a message.

For channel messages: provide team_id + channel_id + message_id. For content inside a channel REPLY: additionally pass parent_message_id (the thread root id) - Graph serves reply content only under /messages/{parent}/replies/{reply}. For chat messages: provide chat_id + message_id. hosted_content_id: from the hostedContents array in message data. Returns the local file path to the downloaded image. File attachments listed under attachments (SharePoint/OneDrive files) cannot be downloaded with this tool. The image is written to the system temp directory on the machine running this server and is not deleted afterwards.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 29 tools

Disambiguation4/5

Most tools target a distinct resource+action pair and descriptions actively guide selection (e.g. list_channel_messages vs list_thread_replies, send_channel_message vs reply_to_channel_message). The main overlap is create_chat vs send_chat_message, since create_chat is really a send-to-1:1 operation and could be confused with the general chat sender. Otherwise boundaries are clear.

Naming Consistency5/5

All 29 tools use a predictable snake_case verb_noun convention (list_*, get_*, send_*, create_*, delete_*, update_*, set_/unset_*, pin_/unpin_*, mark_*). Verb pairs like pin/unpin and set/unset are symmetric and readable. No camelCase or mixed conventions appear.

Tool Count3/5

29 tools is on the heavy side for a single server and pushes past the comfortable range, even though Teams is a genuinely broad domain. Each tool is fairly granular (separate read/unread, pin/unpin, set/unset reaction), so consolidation would be possible. The count is borderline rather than clearly wrong.

Completeness4/5

The messaging lifecycle is well covered: discovery, reading, sending, replying, editing, deleting, reactions, pins, read state, presence, members and attachment download. Minor gaps exist (edit/delete/reaction on channel thread replies are explicitly unsupported, and file/SharePoint attachments cannot be downloaded), but agents can work around them.

Maintenance

ActivityMaintained
ResponsivenessNo issues