Skip to main content
Glama
adkins-amdg

Microsoft Teams MCP Server

by adkins-amdg

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
TEAMS_MCP_CLIENT_IDYesThe application (client) ID from Azure AD app registration.
TEAMS_MCP_TENANT_IDYesThe directory (tenant) ID from Azure AD app registration, or 'organizations' for multi-tenant.
TEAMS_MCP_TOKEN_CACHENoPath to the token cache file.~/.teams-mcp-token-cache.json

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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:

  • limit (number, 1-50): max teams to return (default 20)

  • response_format ('markdown' | 'json'): output format (default markdown)

Returns: JSON { count, teams: [{ id, displayName, description }] }.

teams_list_channelsA

List channels within a given team.

Args:

  • team_id (string): the team ID (from teams_list_joined_teams)

  • limit (number, 1-50): max channels (default 20)

  • response_format ('markdown' | 'json'): output format (default markdown)

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:

  • team_id (string): the team ID

  • limit (number, 1-50): max members (default 20)

  • response_format ('markdown' | 'json'): output format (default markdown)

Returns: JSON { count, members: [{ id, displayName, email, roles }] }.

teams_create_channelA

Create a new channel in a team. This MODIFIES the team.

Args:

  • team_id (string): the team ID

  • display_name (string): channel name (1-50 chars)

  • description (string, optional): channel description

  • membership_type ('standard' | 'private'): default 'standard'

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:

  • limit (number, 1-50): max chats (default 20)

  • response_format ('markdown' | 'json'): output format (default markdown)

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:

  • chat_id (string): the chat ID (from teams_list_chats)

  • limit (number, 1-50): max messages (default 20)

  • response_format ('markdown' | 'json'): output format (default markdown)

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:

  • chat_id (string): the chat ID (from teams_list_chats)

  • content (string): the message body (max 28000 chars)

  • content_type ('text' | 'html'): body format (default text)

Returns: JSON { id, webUrl } of the created message.

teams_list_channel_messagesA

Read recent top-level messages from a team channel, newest first.

Args:

  • team_id (string): the team ID

  • channel_id (string): the channel ID (from teams_list_channels)

  • limit (number, 1-50): max messages (default 20)

  • response_format ('markdown' | 'json'): output format (default markdown)

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:

  • team_id (string): the team ID

  • channel_id (string): the channel ID

  • content (string): the message body (max 28000 chars)

  • content_type ('text' | 'html'): body format (default text)

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:

  • team_id (string): the team ID

  • channel_id (string): the channel ID

  • message_id (string): the parent message ID (from teams_list_channel_messages)

  • content (string): the reply body (max 28000 chars)

  • content_type ('text' | 'html'): body format (default text)

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:

  • subject (string): meeting title

  • start (string): ISO local date-time, e.g. '2026-07-02T14:00:00'

  • end (string): ISO local date-time, must be after start

  • time_zone (string): IANA/Windows time zone (default 'America/Chicago')

  • attendees (string[], optional): attendee email addresses

  • body (string, optional): meeting description / agenda

Returns: JSON { id, subject, joinUrl, webLink }.

teams_list_eventsA

List the user's upcoming calendar events (ordered by start time).

Args:

  • limit (number, 1-50): max events (default 20)

  • days_ahead (number, 1-90): look-ahead window in days (default 14)

  • response_format ('markdown' | 'json'): output format (default markdown)

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:

  • event_id (string): the event ID (from teams_list_events)

  • response_format ('markdown' | 'json'): output format (default markdown)

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:

  • query (string): the search text (e.g. 'Plaid key', 'HIPAA BAA')

  • limit (number, 1-50): max hits (default 20)

  • response_format ('markdown' | 'json'): output format (default markdown)

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:

  • team_id (string): the team ID

  • channel_id (string): the channel ID

  • limit (number, 1-50): max items (default 20)

  • response_format ('markdown' | 'json'): output format (default markdown)

Returns: JSON { count, items: [{ id, name, type, size, webUrl, lastModifiedDateTime }] }.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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