# Microsoft Teams MCP connector

The Microsoft Teams connector brings your teams, channels, chats, and messages to Claude, ChatGPT, Cursor, and the Elaichi Agent, so each person can search conversations, catch up on channels, and send chat messages as themselves, with every action logged.

Source: https://elaichi.ai/connectors/msteams/

## Facts

| | |
| --- | --- |
| Application | Microsoft Teams |
| Category | IM |
| AI tools | 42 |
| Authentication | Connects over OAuth |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 42 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Microsoft Teams is connected

- List every channel in the Engineering team.
- Who are the members of the Product Launch team?
- Summarize the last week of activity in #incidents.

## Connect Microsoft Teams in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Microsoft Teams.
2. Optionally set Share with, then press Connect.
3. Approve it in Microsoft Teams. Microsoft Teams's own window opens. Whoever approves it decides what this connection can reach.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Microsoft Teams tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Microsoft Teams to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Microsoft Teams to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Microsoft Teams to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Microsoft Teams to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Microsoft Teams tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Microsoft Teams through Elaichi

### Catch up on an escalation channel

Support. Ask what was said in the incident channel overnight and get the thread summarized before the morning handover, with the messages that matter pulled out.

### Brief the deal team in a chat

Sales. After a customer call, have the agent start a group chat with the account team and post the notes and next steps, so nobody has to hunt for them later.

### Set up channels for a new project

Operations. Create the kickoff channel, name it the way your team names things, and update its description as the project moves through stages.

### Tidy membership when people move teams

HR. List who is in a team, find the people who have changed roles, and remove members who no longer belong, without opening the Teams admin screens.

### Find the right person or team fast

IT. Search across Microsoft Teams users and teams to find who owns a topic, then check which channels they are active in.

### Pull decisions out of long chats

Project management. Ask for every message in a chat where a deadline or decision was mentioned, and get a short list of what was agreed and by whom.

## Frequently asked questions

### How do I connect Microsoft Teams to Claude?

First connect Microsoft Teams in Elaichi. You are sent to the standard Microsoft sign-in page, you approve access for your own account, and you are done, with no OAuth application to register and no client ID or secret to generate. Then in Claude go to Customize, then Connectors, then Add, and paste the endpoint https://api.elaichi.ai/mcp. Claude asks you to sign in to Elaichi and Microsoft Teams is available from there.

### Does Microsoft Teams work with ChatGPT and Cursor as well as Claude?

Yes. Once Microsoft Teams is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client, and the Elaichi Agent. You connect Microsoft Teams once and every client you use picks it up.

### What can an AI agent actually do with my Microsoft Teams data?

With Microsoft Teams connected, an agent can list your teams and channels, read channel messages and chat messages, search across users and teams, and summarize what happened in a conversation you missed. It can also start chats, send and edit chat messages, create or rename channels, and remove members from a team, always as the person who signed in. Because Microsoft Teams has a large set of actions, short concrete asks such as "summarize the support channel since yesterday" work better than long paragraphs.

### Does connecting Microsoft Teams give the AI access to every team and chat?

No. Access to Microsoft Teams follows the person who signed in, so the agent only sees the teams, channels, and chats that person can already open in Teams. Elaichi can narrow that further by hiding actions or limiting what a team's toolbox includes, but it can never widen what Microsoft has granted.

### Can my team share one Microsoft Teams connection?

Yes. One person connects Microsoft Teams in Elaichi and shares it with a team, and nobody else ever handles a credential or sign-in secret. Each teammate still signs in to Elaichi as themselves, so every message read or sent in Microsoft Teams is recorded against the person who did it.

### Can I stop an agent from deleting or changing things in Microsoft Teams?

Yes. In Elaichi you can restrict Microsoft Teams actions one by one, for example allowing reading and searching while blocking deleting channels, chats, or messages and removing team members. A blocked action is never shown to Claude, ChatGPT, or any other client, so no prompt, however worded, can reach it.

### What happens to a Microsoft Teams connection when someone leaves?

Offboarding that person in Elaichi ends their access to Microsoft Teams through every client at once. If they had shared a Microsoft Teams connection with a team, it keeps working for everyone else. Disconnecting Microsoft Teams once in Elaichi removes it from Claude, ChatGPT, Cursor, and every other client at the same time.

## All 42 Microsoft Teams tools

Every tool below is callable through https://api.elaichi.ai/mcp once Microsoft Teams is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Microsoft Teams teams** (List). List all teams in Microsoft Teams. Returns id, displayName, and description for each team.
- **Get single Microsoft Teams team by ID** (Get). Get information about a specific team in Microsoft Teams by id. Returns the team's properties and relationships.
- **List all Microsoft Teams team members** (List). List members of a team in Microsoft Teams by team id. Returns member id, roles, displayName, userId, and email fields in the response.
- **Get single Microsoft Teams team member by ID** (Get). Get member of team by team_id and id in Microsoft Teams. Returns fields id, roles (member roles), displayName, userId, and email.
- **Delete a Microsoft Teams team member by ID** (Delete). Remove a member from a team in Microsoft Teams using team_id and id. Returns 204 No Content on success.
- **List all Microsoft Teams search** (List). Run a search query with specified requests in Microsoft Teams. Requires requests array with entityTypes, region, query with queryString, from, and size. Returns searchTerms, hitsContainers with hits including hitId, rank, summary, and resource details.
- **List all Microsoft Teams users** (List). Get a list of user objects in Microsoft Teams. Returns default properties including businessPhones, displayName, givenName, id, jobTitle, mail, mobilePhone, officeLocation, preferredLanguage, surname, and userPrincipalName.
- **List all Microsoft Teams me** (List). Get information about the signed-in user in Microsoft Teams. Returns default user properties including businessPhones, displayName, givenName, id, jobTitle, mail, mobilePhone, officeLocation, preferredLanguage, surname, and userPrincipalName.
- **List all Microsoft Teams channels** (List). Get list of all channels in a team in Microsoft Teams. Requires team id. Returns channel id, createdDateTime, displayName, description, membershipType, tenantId, and isArchived status.
- **Get single Microsoft Teams channel by ID** (Get). Get properties and relationships of a specific channel in Microsoft Teams by team_id and id. Returns id, createdDateTime, displayName, description, membershipType, and isArchived fields.
- **Create a Microsoft Teams channel** (Create). Create a new channel in a team in Microsoft Teams using team_id. Returns channel id, displayName, description, membershipType, and webUrl. Supports standard, private (max 200 members), and shared channels with limitations on owners for shared channels.
- **Update a Microsoft Teams channel by ID** (Update). Update the properties of the specified channel in Microsoft Teams using team_id and id. Note: membershipType cannot be updated. Returns 204 No Content on success.
- **Delete a Microsoft Teams channel by ID** (Delete). Delete a channel by team_id and id in Microsoft Teams. Returns 204 No Content on success. Note: There is a known issue with application permissions for this API.
- **List all Microsoft Teams chats** (List). Get list of chats for user with user_id in Microsoft Teams. Returns chat id, topic, createdDateTime, lastUpdatedDateTime, chatType, chatViewpoint (isHidden, lastMessageReadDateTime), webUrl, and isHiddenForAllMembers.
- **Get single Microsoft Teams chat by ID** (Get). Get a specific chat in Microsoft Teams by id. Returns fields such as id, topic, createdDateTime, lastUpdatedDateTime, chatType, webUrl, tenantId, onlineMeetingInfo, viewpoint, isHiddenForAllMembers, and may include members or lastMessagePreview if expanded.
- **Create a Microsoft Teams chat** (Create). Create a new chat in Microsoft Teams with required chatType and members. Returns chat id, topic, createdDateTime, lastUpdatedDateTime, and chatType. Only one one-on-one chat allowed between two members.
- **Update a Microsoft Teams chat by ID** (Update). Update a chat's topic by id in Microsoft Teams. Requires the chat to be of type 'group'. Returns id, topic, createdDateTime, lastUpdatedDateTime, and chatType fields in the response.
- **Delete a Microsoft Teams chat by ID** (Delete). Delete a chat by id in Microsoft Teams. Only tenant admins and Teams service admins can perform this operation. Supports deletion of 1:1, meeting, and group chats but not channel chats. Returns 204 No Content on success.
- **List all Microsoft Teams chat messages** (List). Get list of messages in a chat in Microsoft Teams by chat id. Returns message id, messageType, createdDateTime, lastModifiedDateTime, from user info, body content, and other message details.
- **Get single Microsoft Teams chat message by ID** (Get). Get a specific chat message in Microsoft Teams using chat_id and id. Returns fields such as id, createdDateTime, from, body, attachments, mentions, and reactions in the response.
- **Create a Microsoft Teams chat message** (Create). Send a new chat message in the specified chat in Microsoft Teams. Requires chat id and message body content. Returns the created message with fields id, createdDateTime, from user info, and message body content.
- **Update a Microsoft Teams chat message by ID** (Update). Update a chatMessage by id in Microsoft Teams channel with properties like messageType, body, attachments, mentions, reactions, and messageHistory. Only policyViolation can be updated with application permissions. Returns 204 No Content for delegated and 200 OK for application permissions.
- **Delete a Microsoft Teams chat message by ID** (Delete). Soft-delete a specific chat message in a channel in Microsoft Teams. Requires team_id, channel_id, and id. Returns a 204 No Content response if successful.
- **List all Microsoft Teams channel messages** (List). Get list of channel messages for team_id and channel_id in Microsoft Teams. Returns messages sorted by last modified date including id, createdDateTime, lastModifiedDateTime, from user info, body content, webUrl, and channelIdentity.
- **Get single Microsoft Teams channel message by ID** (Get). Get a specific channel-message in Microsoft Teams using team_id, channel_id, and id. Returns fields such as id, createdDateTime, body, from, attachments, mentions, reactions, and channelIdentity.
- **Create a Microsoft Teams channel message** (Create). Send a new chatMessage in a channel in Microsoft Teams. Requires team_id and channel_id. Returns fields including id, createdDateTime, body content, from user info, and webUrl.
- **Update a Microsoft Teams channel message by ID** (Update). Update a Microsoft Teams channel message by id in team_id and channel_id. Supports updating all chatMessage properties except policyViolation with delegated permissions, or only policyViolation with application permissions. Returns 204 No Content for delegated, 200 OK for application permissions.
- **Delete a Microsoft Teams channel message by ID** (Delete). Soft-delete a specific channel message in Microsoft Teams. Requires team_id, channel_id, and id. Returns 204 No Content if successful.
- **List all Microsoft Teams joined teams** (List). List the teams in Microsoft Teams that the signed-in user is a direct member of. Returns id, displayName, and description for each team. Only direct memberships are returned - teams the user belongs to through a nested group are not included.
- **List all Microsoft Teams user chat messages** (List). List messages in a specific chat in Microsoft Teams on behalf of a given user, scoped by user_id and chat_id. Returns messages including id, createdDateTime, lastModifiedDateTime, from user info, body content, chatId, and webUrl. Under delegated user auth, user_id must be the calling user or Microsoft Graph returns 403 'User Id must match the api caller when called in delegated mode'; reading another user's chat needs application permissions. Use chat-messages instead to read the signed-in user's own chats.
- **List all Microsoft Teams all channel messages** (List). List messages across every channel of a team in Microsoft Teams in a single call, scoped by team_id. Returns messages including id, createdDateTime, lastModifiedDateTime, from user info, body content, webUrl, and channelIdentity so the originating channel can be identified. This is a Microsoft Teams export API that works only with application permissions - under delegated user auth Microsoft Graph returns 412 'Requested API is not supported in delegated context'. It also requires protected API access approved by Microsoft.
- **Create a Microsoft Teams teams app** (Create). Publish a new app to the Microsoft Teams app catalog for the organization. The request body is the raw Teams app package - a .zip containing manifest.json and the app icons - sent as application/octet-stream, not JSON. Returns the created teamsApp including id, externalId, displayName, and distributionMethod. Requires AppCatalog.Submit or AppCatalog.ReadWrite.All, which are not in this integration's default scope set.
- **List all Microsoft Teams teams apps** (List). List apps in the Microsoft Teams app catalog for the organization. Returns id, externalId, displayName, and distributionMethod for each app, plus appDefinitions when expanded. Requires one of AppCatalog.Read.All, AppCatalog.ReadWrite.All, Directory.Read.All, or Directory.ReadWrite.All; these are not in this integration's default scope set, so a connected account without them gets 403 from Microsoft Graph.
- **Get single Microsoft Teams teams app by ID** (Get). Get a single app from the Microsoft Teams app catalog by id. Returns id, externalId, displayName, and distributionMethod for the matching app. Implemented as a filtered catalog query, so the response is an array containing zero or one app. Requires one of AppCatalog.Read.All, AppCatalog.ReadWrite.All, Directory.Read.All, or Directory.ReadWrite.All; these are not in this integration's default scope set.
- **Update a Microsoft Teams teams app by ID** (Update). Publish a new version of an existing app in the Microsoft Teams app catalog by id. The request body is the raw Teams app package - a .zip containing manifest.json and the app icons - sent as application/octet-stream, not JSON, and the manifest version must be higher than the version already published. Returns 204 No Content on success. Requires AppCatalog.Submit or AppCatalog.ReadWrite.All, which are not in this integration's default scope set.
- **List all Microsoft Teams organization** (List). Get the Microsoft Entra organization (tenant) that the connected Microsoft Teams account belongs to. Returns a single-item array with id, displayName, verifiedDomains, tenantType, createdDateTime, street, city, state, postalCode, country, countryLetterCode, businessPhones, preferredLanguage, technicalNotificationMails, securityComplianceNotificationMails, marketingNotificationEmails, privacyProfile, assignedPlans, provisionedPlans, and the onPremises sync fields. The id returned here is the tenant id used to correlate incoming change notifications.
- **List all Microsoft Teams subscriptions** (List). List the active Microsoft Graph change-notification subscriptions owned by the connected account, which drive Microsoft Teams webhooks. Returns id, resource, changeType, notificationUrl, lifecycleNotificationUrl, expirationDateTime, clientState, applicationId, and creatorId for each subscription.
- **Get single Microsoft Teams subscription by ID** (Get). Get a single Microsoft Graph change-notification subscription by id. Returns id, resource, changeType, notificationUrl, lifecycleNotificationUrl, expirationDateTime, clientState, applicationId, and creatorId.
- **Create a Microsoft Teams subscription** (Create). Create a Microsoft Graph change-notification subscription so Microsoft Teams pushes events to a notificationUrl. Requires resource, changeType, notificationUrl, and expirationDateTime. Microsoft validates the notificationUrl synchronously by POSTing a validationToken that must be echoed back within 10 seconds. The maximum lifetime depends on the resource - Teams chatMessage subscriptions are capped at roughly 60 minutes and must be renewed.
- **Update a Microsoft Teams subscription by ID** (Update). Renew a Microsoft Graph change-notification subscription by id before it expires. expirationDateTime is the only property Microsoft Graph allows changing on an existing subscription. Returns the updated subscription.
- **Delete a Microsoft Teams subscription by ID** (Delete). Delete a Microsoft Graph change-notification subscription by id so Microsoft Teams stops sending notifications to its notificationUrl. Returns 204 No Content on success.
- **Microsoft Teams subscriptions reauthorize** (Action). Reauthorize a Microsoft Graph change-notification subscription identified by subscription_id, in response to a lifecycle notification with lifecycleEvent 'reauthorizationRequired'. Returns 204 No Content on success. Follow with an update call if the subscription is also close to expiring.
