Skip to main content
Glama

@anupam365/ms-teams-mcp

MCP server for Microsoft Teams via the Graph API. Exposes 73 tools for managing teams, channels, chats, messages, meetings, planner, calendar, apps, tabs, scheduling, search, and authentication.

Prerequisites

  • Node.js 18+

  • Microsoft 365 subscription with Teams enabled

  • Azure AD app registration with appropriate Graph API permissions

Related MCP server: Outlook Assistant

Setup

1. Create an Azure AD App

  1. Go to Azure Portal → App Registrations → New registration

  2. Name it (e.g., Teams MCP), leave redirect URI blank, click Register

  3. Copy the Application (client) ID and Directory (tenant) ID

2. Add API Permissions

API Permissions → Add a permission → Microsoft Graph

Application permissions (for client-credentials auth):

Permission

Type

Required for

Channel.Create

Application

Creating channels

Channel.Delete.All

Application

Deleting channels

Channel.ReadBasic.All

Application

Reading channel metadata

ChannelMessage.Read.All

Application

Reading channel messages

ChannelMessage.UpdatePolicyViolation.All

Application

Message policy

Calendars.ReadWrite

Application

Creating calendar events

Group.Create

Application

Creating teams

Group.Read.All

Application

Listing teams

Group.ReadWrite.All

Application

Updating teams

Member.Read.Hidden

Application

Reading hidden memberships

OnlineMeetings.ReadWrite.All

Application

Creating online meetings

Team.Create

Application

Creating teams

Team.ReadBasic.All

Application

Reading team metadata

User.Read.All

Application

Reading user info

User.ReadBasic.All

Application

Basic user info

Click Grant admin consent → Yes

Delegated permissions (for device-code auth):

  • Team.ReadBasic.All, Channel.ReadBasic.All, ChannelMessage.Send, ChannelMessage.Read.All, Member.Read.All, OnlineMeetings.ReadWrite.All, Calendars.ReadWrite, User.Read.All

3. Create a Client Secret

Certificates & secrets → Client secrets → New client secret → Copy the Value

Configuration

Via environment variables

TEAMS_TENANT_ID=your-tenant-id
TEAMS_CLIENT_ID=your-client-id
TEAMS_CLIENT_SECRET=your-client-secret
TEAMS_AUTH_MODE=client-credentials

For device-code auth (interactive):

TEAMS_AUTH_MODE=device-code
# No TEAMS_CLIENT_SECRET needed

For direct token (bypasses OAuth flows):

TEAMS_AUTH_TOKEN=eyJ...
# TEAMS_TENANT_ID and TEAMS_CLIENT_ID not required

Read-only mode (reduced scopes):

TEAMS_READ_ONLY=true

MCP Client Config (opencode.json)

{
  "mcpServers": {
    "microsoft-teams": {
      "command": "npx",
      "args": ["-y", "@anupam365/ms-teams-mcp"],
      "env": {
        "TEAMS_TENANT_ID": "...",
        "TEAMS_CLIENT_ID": "...",
        "TEAMS_CLIENT_SECRET": "...",
        "TEAMS_AUTH_MODE": "client-credentials"
      }
    }
  }
}

Run

npx -y @anupam365/ms-teams-mcp

Tools

Teams (8)

Tool

Description

list_teams

List all teams

get_team

Get team details

create_team

Create a new team

update_team

Update team metadata

delete_team

Delete a team

archive_team

Archive a team

unarchive_team

Restore an archived team

clone_team

Clone an existing team

Channels (7)

Tool

Description

list_channels

List channels in a team

get_channel

Get channel details

create_channel

Create a new channel

update_channel

Update channel settings

delete_channel

Delete a channel

archive_channel

Archive a channel

unarchive_channel

Restore an archived channel

Channel Members (3)

Tool

Description

list_channel_members

List channel members

add_channel_member

Add a user to a channel

remove_channel_member

Remove a user from a channel

Channel Messages (5)

Tool

Description

send_channel_message

Send a message (supports format, importance, @mentions)

list_channel_messages

List recent channel messages

reply_to_channel_message

Reply to a channel message

update_channel_message

Edit an existing channel message

delete_channel_message

Delete a channel message

Chats (8)

Tool

Description

list_chats

List 1-on-1 and group chats

get_chat

Get chat details

create_chat

Create a new 1-on-1 or group chat

send_chat_message

Send a chat message (supports format, importance)

list_chat_messages

List chat messages

list_chat_members

List chat members

add_chat_member

Add a user to a group chat

list_chat_tabs

List tabs in a chat

Chat Messages (2)

Tool

Description

update_chat_message

Edit an existing chat message

delete_chat_message

Delete a chat message

Apps & Tabs (7)

Tool

Description

list_available_apps

List tenant app catalog

list_team_installed_apps

List apps installed in a team

install_app_in_team

Install an app in a team

uninstall_app_from_team

Remove an app from a team

list_channel_tabs

List tabs in a channel

add_channel_tab

Add a tab to a channel

remove_channel_tab

Remove a tab from a channel

Planner (4)

Tool

Description

list_team_plans

List plans in a team

list_plan_buckets

List buckets in a plan

list_plan_tasks

List tasks in a plan

create_planner_task

Create a new task

Calendar & Meetings (7)

Tool

Description

list_team_events

List team calendar events

create_event

Create a team calendar event

create_user_event

Create event on a user's calendar

get_event

Get event details

create_online_meeting

Create a Teams meeting

get_online_meeting

Get meeting details

list_online_meetings

List upcoming meetings

Presence & Settings (4)

Tool

Description

get_user_presence

Get user presence status

get_team_settings

Get team settings

update_team_member_settings

Update team settings

list_team_members

List all team members

Tags (3)

Tool

Description

list_team_tags

List tags in a team

create_tag

Create a new tag

delete_tag

Delete a tag

Scheduling (6)

Tool

Description

list_scheduling_groups

List scheduling groups

list_shifts

List shifts

create_shift

Create a shift

list_time_off_reasons

List time-off reasons

list_time_off

List time-off entries

list_time_off_requests

List time-off requests

Subscriptions (3)

Tool

Description

create_subscription

Create a webhook subscription

list_subscriptions

List active subscriptions

delete_subscription

Delete a subscription

Search & Users (3)

Tool

Description

search_users

Search users in the organization

search_messages

Search across all Teams messages

get_my_mentions

Get messages where you are @mentioned

Files (1)

Tool

Description

list_channel_files

List files in a channel's folder

Auth Management (2)

Tool

Description

check_auth

Check authentication status and mode

logout

Clear cached tokens and log out

Auth Modes

Mode

Description

Best for

token

Direct AUTH_TOKEN env var

Testing, CI

client-credentials

App-only, no user interaction

Automated/headless use

device-code

Interactive browser login with persistent token cache

Personal/local use

Token Persistence

In device-code mode, the auth record is saved to ~/.microsoft-teams-mcp/auth-record.json. On subsequent starts, the token is silently refreshed without re-prompting. If the refresh fails, the device-code prompt appears again.

Read-Only Mode

Set TEAMS_READ_ONLY=true to restrict Graph scopes to User.Read.All and Group.Read.All only. Write operations will fail.

Development

git clone <repo>
cd ms-teams-mcp
npm install
npm run dev   # watch mode
npm run build # compile

License

MIT

Available Tools

73 tools
add_channel_memberC

Add a user to a channel

Inputs: team_id (required), user_id (required), channel_id (required), role.

add_channel_tabC

Add a tab to a channel

Inputs: team_id (required), channel_id (required), display_name (required), teams_app_id (required), +1 more.

add_chat_memberB

Add a user to a group chat

Inputs: chat_id (required), user_id (required).

archive_channelA

Archive a channel (read-only)

Inputs: team_id (required), channel_id (required).

archive_teamA

Archive a team (makes it read-only)

Inputs: team_id (required).

check_authA

Check the current authentication status and show auth mode

Inputs: no named parameters.

clone_teamC

Clone an existing team

Inputs: team_id (required), display_name (required), visibility, description.

create_channelB

Create a new channel in a team

Inputs: team_id (required), display_name (required), description.

create_chatB

Create a new 1-on-1 or group chat

Inputs: user_ids (required), chat_type (required), topic.

create_eventB

Create a calendar event in a team

Inputs: subject (required), team_id (required), end_date_time (required), start_date_time (required), +1 more.

create_online_meetingC

Create an online meeting

Inputs: subject (required), end_date_time (required), start_date_time (required), organizer_id, +1 more.

create_planner_taskB

Create a new task in a Planner plan

Inputs: title (required), plan_id (required), bucket_id (required), due_date_time.

create_shiftC

Create a shift for a user

Inputs: team_id (required), user_id (required), end_date_time (required), start_date_time (required), +1 more.

create_subscriptionB

Create a webhook subscription for change notifications

Inputs: resource (required), change_type (required), notification_url (required), expiration_date_time.

create_tagC

Create a tag in a team

Inputs: team_id (required), display_name (required).

create_teamB

Create a new Microsoft Team

Inputs: display_name (required), visibility, description.

create_user_eventA

Create a calendar event on a user's personal calendar

Inputs: subject (required), user_id (required), end_date_time (required), start_date_time (required), +1 more.

delete_channelA

Delete a channel permanently

Inputs: team_id (required), channel_id (required).

delete_channel_messageC

Delete a channel message

Inputs: team_id (required), channel_id (required), message_id (required).

delete_chat_messageC

Delete a chat message

Inputs: chat_id (required), message_id (required).

delete_subscriptionB

Delete a webhook subscription

Inputs: subscription_id (required).

delete_tagB

Delete a tag from a team

Inputs: tag_id (required), team_id (required).

delete_teamB

Delete a Microsoft Team permanently

Inputs: team_id (required).

get_channelA

Get details of a specific channel

Inputs: team_id (required), channel_id (required).

get_chatB

Get details of a specific chat

Inputs: chat_id (required).

get_eventB

Get a specific calendar event

Inputs: team_id (required), event_id (required).

get_my_mentionsA

Get messages where the authenticated user is @mentioned

Inputs: no named parameters.

get_online_meetingB

Get details of an online meeting

Inputs: meeting_id (required).

get_teamC

Get details of a specific team

Inputs: team_id (required).

get_team_settingsB

Get a team's member, messaging, and fun settings

Inputs: team_id (required).

get_user_presenceB

Get a user's presence status (Available, Busy, etc.)

Inputs: user_id (required).

install_app_in_teamB

Install a Teams app in a team

Inputs: team_id (required), app_catalog_id (required).

list_available_appsA

List all Teams apps available in the tenant catalog

Inputs: no named parameters.

list_channel_filesC

List files in a channel's files folder

Inputs: team_id (required), channel_id (required).

list_channel_membersB

List all members of a channel

Inputs: team_id (required), channel_id (required).

list_channel_messagesC

List recent messages in a channel

Inputs: team_id (required), channel_id (required), top.

list_channelsB

List all channels in a team

Inputs: team_id (required).

list_channel_tabsC

List tabs in a channel

Inputs: team_id (required), channel_id (required).

list_chat_membersA

List members of a 1-on-1 or group chat

Inputs: chat_id (required).

list_chat_messagesC

List recent messages in a chat

Inputs: chat_id (required), top.

list_chatsA

List all 1-on-1 and group chats

Inputs: no named parameters.

list_chat_tabsB

List tabs in a chat

Inputs: chat_id (required).

list_online_meetingsB

List upcoming online meetings

Inputs: no named parameters.

list_plan_bucketsB

List all buckets in a Planner plan

Inputs: plan_id (required).

list_plan_tasksA

List tasks in a Planner plan, optionally filtered by bucket

Inputs: plan_id (required), bucket_id.

list_scheduling_groupsB

List scheduling groups in a team

Inputs: team_id (required).

list_shiftsC

List shifts in a team, optionally by scheduling group

Inputs: team_id (required), group_id.

list_subscriptionsA

List all active webhook subscriptions

Inputs: no named parameters.

list_team_eventsB

List calendar events in a team

Inputs: team_id (required).

list_team_installed_appsB

List apps installed in a team

Inputs: team_id (required).

list_team_membersB

List all members of a team

Inputs: team_id (required).

list_team_plansA

List all Planner plans in a team

Inputs: team_id (required).

list_teamsA

List all Microsoft Teams the authenticated user belongs to

Inputs: no named parameters.

list_team_tagsB

List tags in a team

Inputs: team_id (required).

list_time_offC

List time-off entries in a team

Inputs: team_id (required).

list_time_off_reasonsB

List time-off reasons set up in a team

Inputs: team_id (required).

list_time_off_requestsB

List time-off requests in a team

Inputs: team_id (required).

logoutA

Log out and clear cached authentication tokens

Inputs: no named parameters.

remove_channel_memberC

Remove a user from a channel

Inputs: team_id (required), channel_id (required), membership_id (required).

remove_channel_tabB

Remove a tab from a channel

Inputs: tab_id (required), team_id (required), channel_id (required).

reply_to_channel_messageC

Reply to an existing channel message

Inputs: content (required), team_id (required), channel_id (required), parent_message_id (required).

search_messagesC

Search across all Teams messages using Microsoft Search

Inputs: query (required).

search_usersB

Search for users in the organization

Inputs: query (required).

send_channel_messageC

Send a message to a channel with optional format, importance, and mentions

Inputs: content (required), team_id (required), channel_id (required), format, +2 more.

send_chat_messageB

Send a message to a 1-on-1 or group chat with optional format and importance

Inputs: chat_id (required), content (required), format, importance.

unarchive_channelB

Restore an archived channel

Inputs: team_id (required), channel_id (required).

unarchive_teamB

Restore an archived team

Inputs: team_id (required).

uninstall_app_from_teamC

Remove an installed app from a team

Inputs: team_id (required), app_installation_id (required).

update_channelB

Update a channel's name or description

Inputs: team_id (required), channel_id (required), description, display_name.

update_channel_messageB

Edit an existing channel message

Inputs: content (required), team_id (required), channel_id (required), message_id (required).

update_chat_messageB

Edit an existing chat message

Inputs: chat_id (required), content (required), message_id (required).

update_teamC

Update a team's settings or metadata

Inputs: team_id (required), visibility, description, display_name.

update_team_member_settingsC

Update a team's member/messaging/fun settings

Inputs: team_id (required), member_settings, messaging_settings.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 73 tools

    Disambiguation4/5

    Most tools target distinct resources and actions, but some overlap exists between similar operations like create_event vs create_user_event or list_shifts vs list_time_off vs list_time_off_requests. The large number of tools increases the chance of misselection, though descriptions generally clarify.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun or verb_noun_noun pattern using snake_case (e.g., create_channel, list_team_members, send_channel_message). No mixing of conventions or vague verbs like 'process' or 'run'.

    Tool Count3/5

    With 73 tools, the server covers a wide range of Teams functionality, but the count feels slightly excessive for common use. While each tool serves a distinct purpose, a more focused subset could reduce complexity. Still within a reasonable range for a comprehensive integration.

    Completeness4/5

    The surface covers most CRUD operations for teams, channels, chats, messages, meetings, planner, shifts, time-off, apps, and tabs. Notable gaps include missing update operations for shifts and planner tasks, and no delete for chats or meetings. Overall, core workflows are well-supported.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers