100+ integrations are ready to connect to your AI.Connect your first MCP

Microsoft Teams MCP server for your AI

Catch up on the chats and channels you missed, reply in a thread or message a colleague by email address, pull the transcript of yesterday's meeting, and see who is free right now.

PopMCPMicrosoft Teams

What did I miss in my Teams chats since yesterday?

Supported Microsoft Teams tools

All of Microsoft Teams in Microsoft Graph for a signed-in work or school account, from teams, channels and chats to messages, meetings, transcripts, presence, tags, tabs, apps and Shifts schedules, plus the Teams events PopMCP can watch.

278 tools in the full catalog: 129 read and 149 write. 43 load by default, and the rest are found with tool search.

teams_get_channel_message

Get one channel message (a top-level post) with its text, sender, mentions, reactions and attachments.

teams_list_channel_message_replies

List the replies to a channel message, newest first, with text, sender and time.

teams_list_channel_messages

List a channel's messages (top-level posts, newest activity first; replies are separate).

teams_post_to_channel

Post in a Teams channel by team and channel name (or id or link): a new conversation (with an optional subject) or, with replyTo, a reply.

teams_read_channel

Read a Teams channel by team and channel name (or id or link): its conversations, latest activity first, each with its replies oldest first, as compact rows (who, when, text, mentions, files, reactions).

teams_reply_to_channel_message

Reply in a channel thread (under an existing message).

teams_send_channel_message

Post a new message (a new conversation) in a channel.

teams_list_chat_members

List the people in a chat: displayName, email, userId, roles.

teams_list_team_members

List a team's members and owners: displayName, email, userId, roles (owner, guest or empty for member).

teams_create_online_meeting

Create a Teams meeting link (not a calendar event): subject, startDateTime, endDateTime (ISO, e.g. 2026-11-02T15:00:00Z), participants, lobby and recording options.

teams_find_online_meeting

Find a Teams meeting by its join link or meeting ID: give joinWebUrl (the https://teams.microsoft.com/l/meetup-join/...

teams_get_meeting_transcript

A Teams meeting's transcript as plain speaker lines ("Ada Lovelace: we ship Friday"), from the meeting's join link, numeric meeting ID or online meeting id: finds the meeting, its latest transcript (or transcriptId) and reads it.

teams_get_meeting_transcript_content

The transcript text (WebVTT: who said what, with times).

teams_list_attendance_reports

List the attendance reports of a meeting (one per time it ran): id, meetingStartDateTime, meetingEndDateTime, totalParticipantCount.

teams_list_meeting_transcripts

List a meeting's transcripts: id, createdDateTime, endDateTime.

teams_meeting_attendance

Who attended a Teams meeting and for how long, from its join link, numeric meeting ID or online meeting id: the latest attendance report (or reportId) with each attendee's name, email, role, minutes present and join and leave times.

teams_create_channel

Create a channel in a team: displayName (required, up to 50 characters, no # % & * { } / \ : < > ? + | ' "), description, membershipType (standard default, private or shared; private and shared need members with an owner).

teams_create_chat

Start a chat: chatType oneOnOne (exactly two people: the signed-in user and one other; an existing one-on-one chat is returned instead of a new one) or group (three or more, optional topic).

teams_get_channel

Get one channel: displayName, description, membershipType, email, webUrl, isArchived, createdDateTime.

teams_get_chat

Get one chat: topic, chatType, members count, webUrl, onlineMeetingInfo (for meeting chats) and the signed-in user's viewpoint (hidden, last read time).

teams_list_channels

List a team's channels: id, displayName, description, membershipType (standard, private, shared), webUrl, isArchived.

teams_list_chats

List the signed-in user's chats (one-on-one, group and meeting chats), most recent first: id, topic, chatType, webUrl and the last message (lastMessagePreview: from, text, time) with whether it is unread.

teams_mark_chat_read

Mark a chat as read for the signed-in user.

teams_recent_chats

What is new in the signed-in user's Teams chats: their chats, most recent first, each with the latest message (who, what, when), whether it is unread, the people in it and its chat id.

teams_find_channels

Find teams and channels by name: the signed-in user's teams (filtered by team) with their channels (filtered by channel): ids, names, membershipType (standard, private, shared) and links.

teams_get_chat_message

Get one chat message with its text, sender, mentions, reactions, attachments and edit history.

teams_get_team

Get one team: displayName, description, visibility, isArchived, webUrl, and its member, messaging, fun and guest settings.

teams_list_chat_messages

List a chat's messages, newest first, with readable text, sender, time, mentions, reactions and attachments.

teams_list_my_teams

List the teams the signed-in user is a member of: id, displayName, description, webUrl, isArchived.

teams_react_to_chat_message

Add a reaction to a chat message: reactionType is an emoji (👍 ❤️ 😆 😮 😢 😡) or like, heart, laugh, surprised, sad, angry.

teams_read_chat

Read a Teams chat as compact rows, oldest first: who wrote what and when, with mentions, files and reactions.

teams_send_chat_message

Send a message in a chat (one-on-one, group or meeting chat).

teams_send_direct_message

Message people in Teams by email address: one person goes to your one-on-one chat with them (started if needed); several go to the group chat with exactly them, or a new group chat (topic names it).

teams_update_chat_message

Edit a chat message the signed-in user sent: give the new text, markdown or html.

teams_get_my_presence

The signed-in user's presence: availability (Available, Busy, DoNotDisturb, BeRightBack, Away, Offline) and activity (InACall, InAMeeting, Presenting...), plus the status message.

teams_get_user_presence

Someone's Teams presence by email address or user id: availability (Available, Busy, DoNotDisturb, BeRightBack, Away, Offline), activity and status message.

teams_set_status

Set how the signed-in user shows in Teams in one call: availability (Available, Busy, DoNotDisturb, BeRightBack, Away, Offline) for a duration (30m, 1h, 1 day), and/or the status message (with when it ends).

teams_find_people

Find people in the organization by name or email address, with their Teams presence (available, busy, away...) and status message: user id (what mentions and chats need), name, email, job title.

teams_get_profile

The signed-in user's profile: id (the user id mentions and chats use), displayName, mail, userPrincipalName, jobTitle.

teams_list_users

Find people in the organization by name or email address (for mentions, chats and team membership): id, displayName, mail, userPrincipalName, jobTitle.

teams_list_channel_files

The files in a Teams channel's Files tab, by team and channel name (or id or link), optionally a subfolder path: name, file or folder, size, link, last change and who made it.

teams_search_messages

Search the signed-in user's Teams messages (chats, and channels when the connection may read channel messages) with Microsoft Search: words, "an exact phrase", from:ada, sent>=2026-10-01.

teams_batch_read

Run up to 20 Teams read (GET) requests in one Microsoft Graph $batch, e.g. several chats' latest messages: [{ "url": "/chats/19:abc@thread.v2/messages?$top=5" }, ...].

teams_approve_offer_shift_request

A manager approves an offer shift request (body message: an optional note to the requester).

teams_approve_open_shift_change_request

A manager approves an open shift change request (body message: an optional note to the requester).

teams_approve_swap_shifts_change_request

A manager approves a swap shifts change request (body message: an optional note to the requester).

teams_approve_time_off_request

A manager approves a time off request (body message: an optional note to the requester).

teams_clock_in

Clock the signed-in user in (starts a time card): optional isAtApprovedLocation, notes, onBehalfOfUserId (a manager clocking someone in).

teams_clock_out

Clock out of a time card.

teams_confirm_time_card

Confirm a time card (the worker agrees it is right).

teams_create_day_note

Add a note to a day of the schedule: dayNoteDate (YYYY-MM-DD) and sharedDayNote { contentType, content }.

teams_create_offer_shift_request

Create an offer shift request in the schedule.

teams_create_open_shift

Create an open shift in the schedule.

teams_create_open_shift_change_request

Create an open shift change request in the schedule.

teams_create_scheduling_group

Create a scheduling group in the schedule.

teams_create_shift

Create a shift in the schedule.

teams_create_swap_shifts_change_request

Create a swap shifts change request in the schedule.

teams_create_time_card

Create a time card in the schedule.

teams_create_time_off

Create a time off in the schedule.

teams_create_time_off_reason

Create a time off reason in the schedule.

teams_create_time_off_request

Create a time off request in the schedule.

teams_create_workforce_integration

Register a workforce integration for Shifts (administrator): displayName, apiVersion, url, encryption, supportedEntities.

teams_decline_offer_shift_request

A manager declines an offer shift request (body message: an optional note to the requester).

teams_decline_open_shift_change_request

A manager declines an open shift change request (body message: an optional note to the requester).

teams_decline_swap_shifts_change_request

A manager declines a swap shifts change request (body message: an optional note to the requester).

teams_decline_time_off_request

A manager declines a time off request (body message: an optional note to the requester).

teams_delete_day_note

Delete a day note.

teams_delete_open_shift

Delete an open shift.

teams_delete_scheduling_group

Delete a scheduling group.

teams_delete_shift

Delete a shift.

teams_delete_time_card

Delete a time card.

teams_delete_time_off

Delete a time off.

teams_delete_time_off_reason

Delete a time off reason.

teams_delete_time_off_request

Delete a time off request.

teams_delete_workforce_integration

Remove a workforce integration.

teams_end_break

End the current break on a time card.

teams_get_day_note

One day note.

teams_get_offer_shift_request

Get one offer shift request.

teams_get_open_shift

Get one open shift.

teams_get_open_shift_change_request

Get one open shift change request.

teams_get_schedule

A team's Shifts schedule settings: enabled, timeZone, provisionStatus, and whether swaps, offers, open shifts and time off requests are allowed.

teams_get_scheduling_group

Get one scheduling group.

teams_get_shift

Get one shift.

teams_get_swap_shifts_change_request

Get one swap shifts change request.

teams_get_time_card

Get one time card.

teams_get_time_off

Get one time off.

teams_get_time_off_reason

Get one time off reason.

teams_get_time_off_request

Get one time off request.

teams_get_workforce_integration

One workforce integration.

teams_list_day_notes

List the notes managers left on days of the schedule.

teams_list_offer_shift_requests

List the schedule's offer shift requests.

teams_list_open_shift_change_requests

List the schedule's open shift change requests.

teams_list_open_shifts

List the schedule's open shifts.

teams_list_scheduling_groups

List the schedule's scheduling groups.

teams_list_shifts

List the schedule's shifts.

teams_list_swap_shifts_change_requests

List the schedule's swap shifts change requests.

teams_list_time_cards

List the schedule's time cards.

teams_list_time_off_reasons

List the schedule's time off reasons.

teams_list_time_off_requests

List the schedule's time off requests.

teams_list_times_off

List the schedule's times off.

teams_list_workforce_integrations

List the Shifts workforce integrations (links to outside scheduling systems).

teams_replace_day_note

Replace a day note.

teams_replace_open_shift

Replace an open shift.

teams_replace_scheduling_group

Replace a scheduling group.

teams_replace_shift

Replace a shift.

teams_replace_time_card

Replace a time card.

teams_replace_time_off

Replace a time off.

teams_replace_time_off_reason

Replace a time off reason.

teams_set_schedule

Create or replace a team's Shifts schedule: enabled, timeZone (IANA, e.g. America/Chicago) and the request settings.

teams_share_schedule

Share (publish) the schedule for a time range so members see their shifts: notifyTeam, startDateTime, endDateTime.

teams_start_break

Start a break on a time card.

teams_update_workforce_integration

Change a workforce integration.

teams_delete_catalog_app

Delete an app from the organization's catalog (an administrator, or the submitter for their own pending app).

teams_delete_catalog_app_definition

Withdraw a submitted app version that is still waiting for review.

teams_get_catalog_app_bot

The bot of a catalog app version (its Microsoft App ID).

teams_get_chat_app

One app installation in a chat.

teams_get_my_app

One app the signed-in user installed.

teams_get_my_app_chat

The one-on-one chat between the signed-in user and a personal app (its bot).

teams_get_team_app

One app installation in a team.

teams_install_chat_app

Install an app in a chat: teamsApp@odata.bind (or appId).

teams_install_my_app

Install an app for the signed-in user (personal scope): teamsApp@odata.bind (or appId).

teams_install_team_app

Install an app in a team: teamsApp@odata.bind.

teams_list_catalog_apps

List apps in the organization's Teams app catalog: id, externalId, displayName, distributionMethod (store, organization, sideloaded).

teams_list_chat_apps

List the apps installed in a chat; $expand=teamsAppDefinition names them.

teams_list_chat_permission_grants

Apps that hold resource-specific permissions on this chat.

teams_list_my_apps

List the apps the signed-in user installed for themselves (personal scope); $expand=teamsAppDefinition names them.

teams_list_team_apps

List the apps installed in a team; $expand=teamsAppDefinition names them.

teams_list_team_permission_grants

Apps that hold resource-specific permissions on this team.

teams_publish_catalog_app

Publish a custom app to the organization's catalog from its app package (.zip, base64).

teams_review_catalog_app

An administrator approves or rejects an app submitted for review: publishingState published or rejected.

teams_send_activity_notification_to_recipients

Send one activity feed notification to several people.

teams_send_chat_activity_notification

Send an activity feed notification about a chat.

teams_send_team_activity_notification

Send an activity feed notification about a team.

teams_send_user_activity_notification

Send an activity feed notification to one person: topic, activityType, previewText.

teams_uninstall_chat_app

Remove an app from a chat.

teams_uninstall_my_app

Uninstall one of the signed-in user's personal apps.

teams_uninstall_team_app

Remove an app from a team.

teams_update_catalog_app

Upload a new version of a custom catalog app (package .zip as base64).

teams_upgrade_chat_app

Upgrade an app installed in a chat.

teams_upgrade_my_app

Upgrade one of the signed-in user's personal apps to its latest version.

teams_upgrade_team_app

Upgrade an app installed in a team to its latest version.

teams_delete_channel_message

Delete a channel message the signed-in user sent.

teams_delete_channel_message_reply

Delete a reply the signed-in user sent (restorable).

teams_get_channel_message_hosted_content

Details of one embedded image or snippet in a channel message.

teams_get_channel_message_hosted_content_value

The embedded image itself (shown as an image) or the snippet's text.

teams_get_channel_message_reply

Get one reply in a channel thread.

teams_get_channel_reply_hosted_content

Details of one embedded image or snippet in a reply.

teams_get_channel_reply_hosted_content_value

The image embedded in a reply (shown as an image) or the snippet's text.

teams_list_channel_message_changes

Track new and changed channel messages: the first call returns messages and an @odata.deltaLink; later calls with that link as cursor return only what changed since.

teams_list_channel_message_hosted_contents

List the images and code snippets embedded in a channel message.

teams_list_channel_reply_changes

Track new and changed replies to one channel message (delta round; pass @odata.deltaLink as cursor next time).

teams_list_channel_reply_hosted_contents

List the images and snippets embedded in a reply.

teams_react_to_channel_message

Add a reaction to a channel message: reactionType is an emoji (👍 ❤️ 😆 😮 😢 😡) or like, heart, laugh, surprised, sad, angry.

teams_react_to_channel_message_reply

Add a reaction to a reply (reactionType: an emoji or like, heart, laugh, surprised, sad, angry).

teams_remove_channel_message_reaction

Remove the signed-in user's reaction from a channel message (reactionType as it was set).

teams_remove_channel_reply_reaction

Remove the signed-in user's reaction from a reply.

teams_restore_channel_message

Restore a channel message that was deleted with delete_channel_message.

teams_restore_channel_message_reply

Restore a deleted reply.

teams_update_channel_message

Edit a channel message the signed-in user sent: give the new text, markdown or html (and mentions to keep).

teams_update_channel_message_reply

Edit a reply the signed-in user sent in a channel thread.

teams_add_channel_member

Add a person to a private or shared channel: user (email address or user id) and roles ([] or ["owner"]).

teams_add_chat_member

Add a person to a group chat: user (email address or user id), and how much history they see (visibleHistoryStartDateTime: an ISO date-time; leave out for none, 0001-01-01T00:00:00Z for all).

teams_add_team_member

Add one person to a team: user (an email address or user id) and roles ([] for member, ["owner"] for owner).

teams_add_team_members

Add several people to a team in one call: users (email addresses or user ids) and roles for all of them.

teams_get_channel_member

One channel membership.

teams_get_channel_shared_team

One team a shared channel is shared with.

teams_get_chat_member

One chat membership.

teams_get_tag_member

One person in a tag.

teams_get_team_member

One team membership.

teams_list_channel_all_members

Everyone who can reach a channel, including people from teams a shared channel is shared with.

teams_list_channel_members

List a channel's direct members (private and shared channels have their own; standard channels list the team).

teams_list_channel_shared_team_members

People of a team a channel is shared with who can reach the channel.

teams_list_channel_shared_teams

For a shared channel: the teams it is shared with.

teams_list_tag_members

List the people in a tag (userId, displayName).

teams_remove_channel_member

Remove a person from a private or shared channel.

teams_remove_chat_member

Remove a person from a group chat.

teams_remove_tag_member

Remove a person from a tag.

teams_remove_team_member

Remove one person from a team.

teams_remove_team_members

Remove several people from a team in one call: users (email addresses or user ids).

teams_unshare_channel_from_team

Stop sharing a shared channel with a team.

teams_update_channel_member

Change a channel member's role: roles ["owner"] or [].

teams_update_team_member

Make a member an owner or back: roles ["owner"] or [].

teams_create_or_get_online_meeting

Create a meeting tied to your own externalId, or return the one already made with it (safe to retry): externalId, subject, startDateTime, endDateTime, participants.

teams_delete_online_meeting

Delete a meeting the signed-in user organized.

teams_get_attendance_report

One attendance report; $expand=attendanceRecords includes who joined, when, for how long and their role.

teams_get_live_event_attendee_report

The attendee report of a Teams live event (CSV text).

teams_get_meeting_recording

One recording's details (recordingContentUrl, times).

teams_get_meeting_recording_content

The recording file (an MP4 video): reports its type and size, since a video cannot be read as text.

teams_get_meeting_transcript_info

One transcript's details: id, createdDateTime, endDateTime and the organizer.

teams_get_meeting_transcript_metadata

The transcript's metadata (speaker ids and spoken language per line).

teams_get_online_meeting

Get a Teams meeting by its id (from find_online_meeting or create_online_meeting): subject, times, joinWebUrl, joinMeetingIdSettings, chatInfo.threadId (the meeting chat id), lobby and recording options.

teams_get_virtual_appointment_join_url

The join link for a virtual appointment (Teams Premium virtual appointments).

teams_list_attendance_records

Who attended a meeting: identity, emailAddress, role, totalAttendanceInSeconds and each join and leave time.

teams_list_meeting_recordings

List a meeting's recordings: id, createdDateTime, endDateTime, contentCorrelationId.

teams_send_virtual_appointment_reminder_sms

Send a reminder text to virtual appointment attendees (Teams Premium): attendees and remindBeforeTimeInMinutesType (mins15, mins30, mins60, mins120, mins1440).

teams_send_virtual_appointment_sms

Text the attendees of a virtual appointment (Teams Premium): attendees ([{ phoneNumber, timeZone }]) and messageType (confirmation, reschedule, cancellation).

teams_update_online_meeting

Change a meeting's subject, times or options (lobbyBypassSettings, allowedPresenters, recordAutomatically, allowMeetingChat).

teams_archive_channel

Archive a channel so it becomes read-only.

teams_check_channel_access

Whether a person can access a channel (useful for private and shared channels).

teams_delete_channel

Delete a channel (its messages and tabs go with it; it can be restored for 30 days in Teams).

teams_delete_chat

Delete a chat for everyone.

teams_get_channel_enabled_app

One app enabled in a channel.

teams_get_channel_files_folder

The SharePoint folder that holds the channel's Files tab: id, name, webUrl and parentReference.driveId.

teams_get_deleted_chat

A deleted chat that can still be restored.

teams_get_primary_channel

Get the team's General (primary) channel, with its id for the channel tools.

teams_hide_chat

Hide a chat from the signed-in user's chat list (a new message brings it back).

teams_list_all_channels

List every channel the team holds or that is shared with it (including shared channels hosted by other teams).

teams_list_channel_enabled_apps

Apps enabled in a channel (for private and shared channels).

teams_list_incoming_channels

List the shared channels other teams have shared into this team.

teams_list_pinned_chat_messages

List the messages pinned in a chat; $expand=message includes each message.

teams_mark_chat_unread

Mark a chat as unread for the signed-in user, optionally from a time (lastMessageReadDateTime).

teams_pin_chat_message

Pin a message in a chat: messageId.

teams_provision_channel_email

Give the channel an email address (or return the one it has), so mail sent there is posted in the channel.

teams_remove_channel_email

Remove the channel's email address.

teams_remove_user_chat_access

Remove a person's access to a chat, including its history (for example after they left).

teams_restore_deleted_chat

Restore a chat deleted within the last 30 days.

teams_unarchive_channel

Restore an archived channel (its team must not be archived).

teams_unhide_chat

Show a hidden chat in the signed-in user's chat list again.

teams_unpin_chat_message

Unpin a message.

teams_update_channel

Rename a channel or change its description.

teams_update_chat

Rename a group chat (topic).

teams_archive_team

Archive a team: it becomes read-only for members.

teams_clone_team

Copy a team (its structure, not its messages): body displayName (required), mailNickname, description, visibility, partsToClone (apps,tabs,settings,channels,members).

teams_create_team

Create a new team.

teams_delete_chat_message

Delete a chat message the signed-in user sent.

teams_get_chat_message_hosted_content

Details of one image or snippet embedded in a chat message.

teams_get_chat_message_hosted_content_value

The image embedded in a chat message (shown as an image) or the snippet's text.

teams_get_my_teams_settings

The signed-in user's Teams settings: locale and region.

teams_get_team_operation

Check a long-running team operation (create, clone, archive, unarchive): status notStarted, inProgress, succeeded or failed, and targetResourceId.

teams_get_team_photo

The team's picture as an image.

teams_list_all_teams

List every team in the organization (not only the ones the user belongs to): id, displayName, description, visibility.

teams_list_associated_teams

List the teams the signed-in user is associated with: teams they belong to plus the host teams of shared channels they were added to directly.

teams_list_chat_message_changes

Track new and changed messages in one chat: pass the @odata.deltaLink as cursor next time.

teams_list_chat_message_hosted_contents

List the images and code snippets embedded in a chat message.

teams_list_deleted_teams

List teams that were deleted and can still be restored (deleted within the last 30 days): id and their channels when expanded.

teams_remove_chat_message_reaction

Remove the signed-in user's reaction from a chat message.

teams_reply_with_quote

Reply in a chat quoting one or more earlier messages: messageIds (from list_chat_messages) and the reply (text, markdown or html).

teams_restore_chat_message

Restore a chat message deleted with delete_chat_message.

teams_set_team_photo

Replace the team's picture: contentBase64 (a JPEG or PNG file as base64, up to 4 MB).

teams_unarchive_team

Restore an archived team so members can post again.

teams_update_team

Change a team's name, description, visibility or settings (memberSettings, messagingSettings, funSettings, guestSettings).

teams_clear_my_automatic_work_location

Stop the automatically detected work location.

teams_clear_my_preferred_presence

Go back to automatic presence.

teams_clear_my_work_location

Clear the work location set for today.

teams_clear_presence_session

Clear this app's own presence session for the signed-in user (sessionId).

teams_get_presences

Presence of many people at once: ids (user ids, up to 650).

teams_set_my_automatic_work_location

Let Teams detect the signed-in user's work location (workLocationType and placeId from the network).

teams_set_my_preferred_presence

Set how the signed-in user shows: availability Available, Busy, DoNotDisturb, BeRightBack, Away or Offline (activity is filled in to match), optional expirationDuration (ISO 8601, e.g. PT1H; default 1 day).

teams_set_my_status_message

Set the signed-in user's status message: message (text), optional expiryDateTime (ISO).

teams_set_my_work_location

Set where the signed-in user works today: workLocationType office, remote or timeOff (and placeId for an office).

teams_set_presence_session

Set the presence of this app's own session for the signed-in user.

teams_add_channel_tab

Pin a tab in a channel: displayName, teamsApp@odata.bind ("https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{appId}") and configuration (entityId, contentUrl, websiteUrl).

teams_add_chat_tab

Pin a tab in a chat: displayName, teamsApp@odata.bind ("https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{appId}") and configuration (entityId, contentUrl, websiteUrl).

teams_get_channel_tab

One tab in a channel.

teams_get_chat_tab

One tab in a chat.

teams_list_channel_tabs

List the tabs pinned in a channel (the Files tab is not included): id, displayName, webUrl, configuration; $expand=teamsApp names the app.

teams_list_chat_tabs

List the tabs pinned in a chat (the Files tab is not included): id, displayName, webUrl, configuration; $expand=teamsApp names the app.

teams_remove_channel_tab

Remove a tab from a channel.

teams_remove_chat_tab

Remove a tab from a chat.

teams_update_channel_tab

Rename a tab or change its configuration in a channel.

teams_update_chat_tab

Rename a tab or change its configuration in a chat.

teams_create_subscription

Get notified at your own https URL when Teams data changes: resource (/chats/{chatId}/messages, /teams/{teamId}/channels/{channelId}/messages, /users/{userId}/chats/getAllMessages, /teams/{teamId}/channels, /chats/{chatId}/members, /communications/presences/{userId}), changeType (created,updated,deleted), notificationUrl.

teams_delete_subscription

Stop a change-notification subscription.

teams_get_subscription

One change-notification subscription.

teams_list_subscriptions

List the change-notification subscriptions this connection's app holds for the signed-in user.

teams_reauthorize_subscription

Answer a reauthorizationRequired lifecycle notification so the subscription keeps delivering.

teams_renew_subscription

Extend a subscription: expirationDateTime (Teams messages and chats: up to 3 days; presence: 1 hour).

teams_create_tag

Create a tag with its members: displayName (up to 40 characters), description, members (user ids: [{ "userId": "..." }], 1 to 25).

teams_delete_tag

Delete a tag.

teams_get_tag

One tag.

teams_list_tags

List a team's tags (groups of people you can @mention together): id, displayName, memberCount.

teams_update_tag

Rename a tag or change its description.

teams_get_user

One person's basic profile by email address or user id: id, displayName, mail, userPrincipalName, jobTitle.

teams_get_teams_app_settings

Organization settings for Teams apps (whether people may install apps that need resource-specific consent).

teams_get_teamwork_settings

Organization-wide Teams facts: whether Teams is enabled and the region (an administrator-approved permission).

teams_update_teams_app_settings

Change the organization's Teams app settings (Teams administrator).

teams_list_drive_folder_items

List the files and folders in a channel's Files folder (or any folder you can read): give driveId and itemId from get_channel_files_folder.

teams_microsoft_search_query

Search the signed-in user's Teams chat and channel messages with Microsoft Search: query (words, "exact phrase", from:ada, sent>=2026-10-01), size (1 to 25, default 25), from (offset).

Connect Microsoft Teams to Claude, ChatGPT and Claude Code

Authorize once, then an endpoint your client signs into. Nothing to deploy, and nothing to install on the Microsoft Teams side.

Register an app in the Microsoft Entra admin center for multiple Entra ID tenants, add PopMCP's Redirect URI under Authentication as a Web platform, copy the Application (client) ID and a client secret Value into PopMCP, tick what PopMCP may do in Teams, then click Sign in with Microsoft and approve access on Microsoft's own page.

Application (client) ID00001111-aaaa-2222-bbbb-3333cccc4444
Client secret Value••••••••••••3f7a
Directory (tenant) IDLeave empty unless your app is single tenant
Authorize PopMCP on Microsoft TeamsAuthorize

Then just ask for the work

  • “What did I miss in my Teams chats since yesterday?”

    • recent_chats
    • read_chat
  • “Summarize this week's conversations in the Launch channel of the Marketing team”

    • read_channel
  • “Post the release notes in Marketing's General channel and mention Priya”

    • post_to_channel
  • “Message sam@contoso.com and ask whether the contract is signed”

    • send_direct_message
  • “Give me the transcript of this morning's standup and list the action items”

    • get_meeting_transcript
  • “Who joined Tuesday's client call, and for how long?”

    • meeting_attendance
  • “Is Dana free right now? Then set me to Do not disturb for an hour”

    • find_people
    • set_status

Use Microsoft Teams from the assistant you already open

One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.

Claude DesktopCustom connector

Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.

Claude WebCustom connector

The same endpoint, registered in the browser. Nothing to install on the machine you are working from.

ChatGPTCustom connector

Register PopMCP as a custom connector, then let ChatGPT read and update the account.

CodexDesktop & CLI

Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.

OpenCodeCoding agent

Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.

ZCodeDesktop app

Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.

Microsoft Teams MCP server questions

What teams ask before putting Microsoft Teams behind an AI client.

How do I connect Microsoft Teams to PopMCP?

Sign in with your work or school Microsoft account and approve access on Microsoft's own page, so your password never reaches PopMCP. Today that sign-in runs through an app you register once in the Microsoft Entra admin center: pick Multiple Entra ID tenants, add PopMCP's Redirect URI under Authentication as a Web platform, then copy the Application (client) ID and a client secret Value into the connect form and tick what PopMCP may do in Teams. Tokens renew on their own after that.

Does it work with a personal Microsoft account?

No. Microsoft offers Teams data through Microsoft Graph only for work or school accounts on Microsoft 365, so PopMCP refuses a personal Outlook.com or Microsoft Teams (free) account when you connect. Sign in with the account your organization gave you.

Why does Microsoft say an administrator has to approve the app?

The part that is always included (your teams and channels, your chat list, sending messages, people and presence) needs no administrator by Microsoft's rules. Read chats and meetings, ticked by default, needs one in organizations that let Microsoft manage consent, and the other five options need one too. An admin approves once for everyone: in the Entra admin center open Entra ID, Enterprise apps, pick the app, then Permissions and Grant admin consent. Your organization's own settings can be stricter.

Can the AI read and post in channels by name?

Yes. read_channel and post_to_channel take a team and channel name or a Teams link, so nobody has to look up ids. Mentions take email addresses, or channel and team to notify everyone, and replyTo answers in an existing thread. Reading channel posts needs the Read channel messages and files option; posting does not.

Can it read meeting transcripts and attendance?

Yes, once a meeting was transcribed. get_meeting_transcript takes the join link or the numeric meeting ID and returns plain speaker lines, and meeting_attendance lists who joined and for how long after a meeting you organized ends. Transcripts need the Meeting transcripts and recordings option, which a Microsoft 365 administrator approves.

Which Microsoft Teams events can PopMCP watch?

21 in total. Instant notifications for a chat message received, edited or deleted, a channel message posted or edited, a new chat, a new channel, a new team member and a presence change. Polling for new messages in a chat you watch and changes to a channel's conversations. Change detection for joining a team, a transcript, recording or attendance report becoming ready, a time off request, an open shift, a new tab, a new app in a team and a new tag. One threshold fires when unread chats pile up past the number you set.

How many Microsoft Teams tools load into my AI client?

43 everyday tools load by default, including the 13 that do several steps at once: recent_chats, read_chat, read_channel, post_to_channel, send_direct_message, find_people, get_meeting_transcript and more. All 265 operations stay reachable through search_tools, describe_tool and raw_operation, 119 that read and 146 that write, from Shifts schedules and time cards to tabs, apps, tags and change notifications.

Do I have to run or host the Microsoft Teams MCP server myself?

No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.

Which AI clients can use this MCP server?

Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.

How do I connect Microsoft Teams to Claude Code?

Connect Microsoft Teams in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Microsoft Teams on the consent screen. The Microsoft Teams tools are then available in that session, and no Microsoft Teams credential is stored on your machine.

Why do only 43 of the 278 tools load by default?

Loading 278 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 43-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.

What is the difference between a tool and a trigger?

A tool is something your AI calls, and there are 278 here. A trigger is something PopMCP watches for you: 21 Microsoft Teams events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Microsoft Teams.

Connect Microsoft Teams to your AI in minutes

Launch a hosted MCP endpoint for Microsoft Teams, keep tool access under control, and start testing real workflow prompts right away.

Connect your first MCP