Microsoft Teams MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TEAMS_MCP_CLIENT_ID | Yes | The application (client) ID from Azure AD app registration. | |
| TEAMS_MCP_TENANT_ID | Yes | The directory (tenant) ID from Azure AD app registration, or 'organizations' for multi-tenant. | |
| TEAMS_MCP_TOKEN_CACHE | No | Path to the token cache file. | ~/.teams-mcp-token-cache.json |
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| teams_whoamiA | Return the Microsoft 365 identity the server is authenticated as (delegated). Use this to confirm which account the Teams MCP is acting on behalf of before sending messages or creating meetings. Args: none. Returns: JSON { id, displayName, userPrincipalName, mail, jobTitle }. |
| teams_list_joined_teamsA | List the Microsoft Teams the signed-in user is a member of. Use this first to discover team IDs needed by channel/message tools. Args:
Returns: JSON { count, teams: [{ id, displayName, description }] }. |
| teams_list_channelsA | List channels within a given team. Args:
Returns: JSON { count, channels: [{ id, displayName, description, membershipType, webUrl }] }. |
| teams_list_team_membersA | List members of a team, including their roles (e.g. 'owner'). Note: requires the delegated scope TeamMember.Read.All, which may need a one-time Entra admin consent. Args:
Returns: JSON { count, members: [{ id, displayName, email, roles }] }. |
| teams_create_channelA | Create a new channel in a team. This MODIFIES the team. Args:
Returns: JSON { id, displayName, webUrl }. |
| teams_list_chatsA | List the user's recent 1:1 and group chats (not channel conversations). Use this to find the chat_id for reading or sending chat messages. Args:
Returns: JSON { count, chats: [{ id, topic, chatType, members }] }. |
| teams_get_chat_messagesA | Read recent messages from a 1:1 or group chat, newest first. Args:
Returns: JSON { count, messages: [{ id, from, createdDateTime, text, webUrl }] }. |
| teams_send_chat_messageA | Send a message to a 1:1 or group chat. This POSTS a message as the signed-in user. Args:
Returns: JSON { id, webUrl } of the created message. |
| teams_list_channel_messagesA | Read recent top-level messages from a team channel, newest first. Args:
Returns: JSON { count, messages: [{ id, from, createdDateTime, text, webUrl }] }. |
| teams_send_channel_messageA | Post a new top-level message to a team channel as the signed-in user. Args:
Returns: JSON { id, webUrl } of the created message. |
| teams_reply_channel_messageA | Reply to an existing top-level channel message (adds to its thread). Args:
Returns: JSON { id, webUrl } of the created reply. |
| teams_create_meetingA | Create a Microsoft Teams meeting as a calendar event on the user's calendar, with a Teams join link and (optionally) invited attendees. This CREATES an event and sends invitations. Args:
Returns: JSON { id, subject, joinUrl, webLink }. |
| teams_list_eventsA | List the user's upcoming calendar events (ordered by start time). Args:
Returns: JSON { count, events: [{ id, subject, start, end, joinUrl, attendees }] }. |
| teams_get_eventA | Get full details for a single calendar event, including the Teams join link and body preview. Args:
Returns: JSON event object with subject, start, end, joinUrl, attendees, body preview. |
| teams_search_messagesA | Search across the user's Teams chat and channel messages using the Microsoft Search API. Returns matching messages with a snippet and a deep link. Note: relevance-ranked full-text search; exact phrasing and recency affect hits. Args:
Returns: JSON { total, count, moreResultsAvailable, hits: [{ id, from, createdDateTime, snippet, webUrl }] }. |
| teams_list_channel_filesA | List files and folders stored in a channel's Files tab (the channel's SharePoint-backed document folder). Args:
Returns: JSON { count, items: [{ id, name, type, size, webUrl, lastModifiedDateTime }] }. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 16 tools
Every tool serves a distinct purpose: creating channels, meetings, sending/receiving messages in channels and chats, listing resources, etc. No two tools overlap in functionality, so an agent can easily select the correct one.
All tools follow the exact pattern `teams_verb_noun` in snake_case. Verbs are uniformly imperative (create, get, list, reply, search, send, whoami), making the set predictable and easy to navigate.
With 16 tools, the server covers the core Teams operations (team/channel management, messaging, meetings, events, files) without unnecessary bloat. The number is well-proportioned to the domain.
The surface enables most everyday workflows: reading and writing messages in channels and chats, listing teams/channels/members/events/files, creating channels and meetings, and searching. Minor gaps like updating or deleting messages or channels are absent, but the core is solid.