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 |
Capabilities
Features and capabilities supported by this server
| 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 | |
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/adkins-amdg/teams-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server