CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Microsoft Teams

surgeenterpriseai/teams-mcp-server
130 toolsSTDIOregistry active
Summary

Connects Claude directly to Microsoft Teams via the Graph API, exposing 11 tools for reading and sending messages, listing teams and channels, searching chat history, and managing both channel threads and direct messages. Built for multi-tenant use with OAuth, so any M365 user can sign in with their work account and immediately get their own Teams data without Azure setup. Runs as stdio for Claude Desktop/Code with local token caching, or as HTTP with SSE for remote deployments. If you're building workflows that need Claude to monitor team channels, respond in threads, or search across your organization's Teams conversations, this is the bridge.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

Public tool metadata for what this MCP can expose to an agent.

30 tools
MICROSOFT_TEAMS_ADD_MEMBER_TO_TEAMTool to add a user to a Microsoft Teams team. Use when granting or updating membership for a user.3 params

Tool to add a user to a Microsoft Teams team. Use when granting or updating membership for a user.

Parameters* required
rolesarray
Roles to assign to the member. Only 'owner' is supported. Omit or leave empty to add as a standard member.
team_idstring
The unique ID (GUID) of the Microsoft Team to which the member will be added.
user_idstring
The user's Graph ID (GUID) or userPrincipalName (email) to add to the team.
MICROSOFT_TEAMS_ARCHIVE_TEAMTool to archive a Microsoft Teams team. Use after confirming the team ID; returns 202 if accepted.2 params

Tool to archive a Microsoft Teams team. Use after confirming the team ID; returns 202 if accepted.

Parameters* required
team_idstring
The Microsoft Teams team GUID to archive.
should_set_spo_site_read_only_for_membersboolean
If true, sets the SharePoint site to read-only for team members when archiving.default: false
MICROSOFT_TEAMS_CHATS_GET_ALL_CHATSRetrieves all Microsoft Teams chats a specified user is part of, supporting filtering, property selection, and pagination.4 params

Retrieves all Microsoft Teams chats a specified user is part of, supporting filtering, property selection, and pagination.

Parameters* required
topinteger
The maximum number of chats to retrieve in a single API call, used for pagination. Default is 50. Microsoft Graph enforces a maximum limit of 50 per request.default: 50
filterstring
An OData filter query string to apply to the chat list (e.g., "topic eq 'Project Updates'"). Do not include '$filter=' in the string. This enables retrieving chats that match specific criteria.default:
selectarray
A list of specific Microsoft Graph chat resource properties to retrieve (e.g., 'id', 'topic'). If omitted or empty, a default set of properties is returned. Each string in the list should be a valid property name.
user_idstring
The ID or user principal name (UPN) of the user whose chats are to be retrieved. Use 'me' to specify the currently authenticated user.default: me
MICROSOFT_TEAMS_CHATS_GET_ALL_MESSAGESRetrieves all messages from a specified Microsoft Teams chat using the Microsoft Graph API, automatically handling pagination; ensure `chat_id` is valid and OData expressions in `filter` or `select` are correct.3 params

Retrieves all messages from a specified Microsoft Teams chat using the Microsoft Graph API, automatically handling pagination; ensure `chat_id` is valid and OData expressions in `filter` or `select` are correct.

Parameters* required
topinteger
Maximum number of messages to retrieve per page. Used for pagination. Microsoft Graph enforces a maximum limit of 50 per request.default: 50
filterstring
OData v4.0 filter query string for messages. If empty, no filtering is applied.default:
chat_idstring
Unique identifier of the Microsoft Teams chat.
MICROSOFT_TEAMS_CREATE_MEETINGUse to schedule a new standalone Microsoft Teams online meeting, i.e., one not linked to any calendar event.5 params

Use to schedule a new standalone Microsoft Teams online meeting, i.e., one not linked to any calendar event.

Parameters* required
subjectstring
The subject or title for the online meeting.
participantsarray
An optional list of participants to invite to the meeting. Each participant is defined by their user ID and role.
end_date_timestring
The end date and time of the meeting, specified in ISO 8601 format (e.g., '2024-08-15T11:00:00Z'). Must be after start_date_time.
start_date_timestring
The start date and time of the meeting, specified in ISO 8601 format (e.g., '2024-08-15T10:00:00Z').
is_passcode_requiredboolean
An optional boolean indicating whether a passcode should be required to join this meeting. If not specified, the organization's default policy applies.
MICROSOFT_TEAMS_CREATE_TEAMTool to create a new Microsoft Teams team. Use when you need to provision a team with optional template, channels, and members.6 params

Tool to create a new Microsoft Teams team. Use when you need to provision a team with optional template, channels, and members.

Parameters* required
membersarray
List of initial team members. At least one member with 'owner' role is recommended. If not provided, the authenticated user will be added as owner. Each member must specify '@odata.type', roles, and 'user@odata.bind'.
visibilitystring
Team visibility setting. 'private': Only owners can add members. 'public': Anyone in the organization can join. Default is 'public'.one of private · publicdefault: public
descriptionstring
Brief description of the team's purpose. Maximum 1024 characters. Note: Known template IDs for team creation: 'standard' (default), 'educationClass', 'educationStaff', 'educationProfessionalLearningCommunity'.
displayNamestring
Display name of the team as it will appear in Microsoft Teams. Must be unique within the organization.
firstChannelNamestring
Name of the first channel created; defaults to 'General' if omitted.
template_odata_bindstring
URL reference to the team template. Common templates: 'standard' (default), 'educationClass', 'educationStaff', 'educationProfessionalLearningCommunity'. Format: https://graph.microsoft.com/v1.0/teamsTemplates('template-id')default: https://graph.microsoft.com/v1.0/teamsTemplates('standard')
MICROSOFT_TEAMS_DELETE_TEAMTool to delete a Microsoft Teams team. Use after confirming the target team ID.1 params

Tool to delete a Microsoft Teams team. Use after confirming the target team ID.

Parameters* required
team_idstring
The unique identifier (GUID) of the Microsoft Teams team to delete.
MICROSOFT_TEAMS_GET_CHANNELTool to get a specific channel in a team. Use after obtaining valid team and channel IDs to fetch channel details.2 params

Tool to get a specific channel in a team. Use after obtaining valid team and channel IDs to fetch channel details.

Parameters* required
team_idstring
The unique identifier of the Microsoft Teams team.
channel_idstring
The unique identifier of the channel within the specified team.
MICROSOFT_TEAMS_GET_CHAT_MESSAGETool to get a specific chat message. Use after confirming chat_id and message_id.2 params

Tool to get a specific chat message. Use after confirming chat_id and message_id.

Parameters* required
chat_idstring
Unique identifier of the Microsoft Teams chat that contains the message.
message_idstring
Unique identifier of the chat message to retrieve.
MICROSOFT_TEAMS_GET_TEAMTool to get a specific team. Use when full details of one team by ID are needed.1 params

Tool to get a specific team. Use when full details of one team by ID are needed.

Parameters* required
team_idstring
GUID of the Microsoft Teams team to retrieve.
MICROSOFT_TEAMS_LIST_MESSAGE_REPLIESTool to list replies to a channel message. Use after obtaining team, channel, and message IDs.4 params

Tool to list replies to a channel message. Use after obtaining team, channel, and message IDs.

Parameters* required
topinteger
Maximum number of replies to return per page (1-50).default: 50
team_idstring
Unique identifier (GUID) of the Microsoft Teams team.
channel_idstring
Unique identifier of the channel within the team.
message_idstring
Unique identifier of the channel message whose replies are to be listed.
MICROSOFT_TEAMS_LIST_TEAM_MEMBERSTool to list members of a Microsoft Teams team. Use when you need to retrieve the members of a specific team, for auditing or notifications.2 params

Tool to list members of a Microsoft Teams team. Use when you need to retrieve the members of a specific team, for auditing or notifications.

Parameters* required
topinteger
Optional maximum number of members to return (1–999).
team_idstring
GUID of the Microsoft Teams team to retrieve members from.
MICROSOFT_TEAMS_LIST_TEAMS_TEMPLATESTool to list available Microsoft Teams templates. Use when retrieving templates for team creation or customization workflows.6 params

Tool to list available Microsoft Teams templates. Use when retrieving templates for team creation or customization workflows.

Parameters* required
topinteger
Maximum number of templates to return (1–999).
skipinteger
Number of templates to skip for pagination.
countboolean
If true, include a count of total matching templates in the response.default: false
filterstring
OData filter expression to filter the templates (e.g., "startsWith(displayName,'Template')").default:
selectstring
Comma-separated template properties to include in the response (e.g., 'id,displayName,description'). If empty, default properties are returned.default:
orderbystring
Comma-separated properties and directions to order the results by (e.g., 'displayName desc').default:
MICROSOFT_TEAMS_LIST_USERSTool to list all users in the organization. Use when you need to retrieve directory users with filtering, pagination, and field selection.7 params

Tool to list all users in the organization. Use when you need to retrieve directory users with filtering, pagination, and field selection.

Parameters* required
$topinteger
Maximum number of users to return per page (1-999).
$skipinteger
Number of users to skip for pagination.
$expandstring
OData expand related entities (e.g., `manager`).
$filterstring
OData filter to refine results by property values (e.g., `startswith(displayName,'A')`).
$selectstring
Comma-separated list of user properties to include (e.g., `id,displayName,mail`).
$orderbystring
OData orderby clause to sort results (e.g., `displayName desc`).
consistencyLevelstring
Set to 'eventual' when using advanced queries with $count.
MICROSOFT_TEAMS_SEARCH_FILESSearch files in Microsoft Teams using KQL syntax. Find files by name, type, content, author, and modification date across all Teams and channels. Supports boolean logic and date ranges. Examples: 'filetype:pdf AND lastmodifiedtime>=2024-10-01', 'contract AND budget', 'filename...4 params

Search files in Microsoft Teams using KQL syntax. Find files by name, type, content, author, and modification date across all Teams and channels. Supports boolean logic and date ranges. Examples: 'filetype:pdf AND lastmodifiedtime>=2024-10-01', 'contract AND budget', 'filename...

Parameters* required
sizeinteger
The maximum number of file results to return per page. Use with from_index for pagination.default: 25
querystring
Search query for files in Teams. Supports keywords, filenames, and content search. **Basic Syntax:** - Keywords: 'budget contract' - Exact phrases: '"project timeline"' - Filenames: 'report.pdf' or 'filename:contract' - File types: 'filetype:pdf' or 'filetype:docx' - Boolean: 'contract AND budget' or 'report OR summary' **Property Filters:** - filename: File name - 'filename:contract' - filetype: File extension - 'filetype:pdf', 'filetype:docx', 'filetype:xlsx' - author: Creator - 'author:user@example.com' - lastmodifiedtime: Modified date - 'lastmodifiedtime>=2024-10-01' **Date Filters:** - Exact: 'lastmodifiedtime:2024-10-01' - Greater/equal: 'lastmodifiedtime>=2024-10-01' - Range: 'lastmodifiedtime:2024-10-01..2024-10-31' - Relative: 'lastmodifiedtime>today-30' **Complex Queries:** - 'contract AND filetype:pdf AND lastmodifiedtime>=2024-10-01' - '(budget OR financial) AND filetype:xlsx' - 'filename:report AND lastmodifiedtime>today-7'
from_indexinteger
The 0-based starting index for pagination. To paginate: check response['value'][0]['hitsContainers'][0]['moreResultsAvailable']. If true, call again with from_index += size (e.g., 0 → 25 → 50).default: 0
enable_top_resultsboolean
If `true`, sorts results by relevance; otherwise, sorts by date modified in descending order (newest first).default: false
MICROSOFT_TEAMS_SEARCH_MESSAGESSearch Microsoft Teams messages using powerful KQL syntax. Supports sender (from:), date filters (sent:), attachments, and boolean logic. Works across all Teams chats and channels the user has access to. Examples: 'from:user@example.com AND sent>=2024-10-01', 'punchlist OR ter...4 params

Search Microsoft Teams messages using powerful KQL syntax. Supports sender (from:), date filters (sent:), attachments, and boolean logic. Works across all Teams chats and channels the user has access to. Examples: 'from:user@example.com AND sent>=2024-10-01', 'punchlist OR ter...

Parameters* required
sizeinteger
The maximum number of search results to return per page. Use with from_index for pagination.default: 25
querystring
KQL (Keyword Query Language) search query string. Supports advanced syntax for precise searches. **Basic Syntax:** - Simple keywords: 'budget report' - Exact phrases: '"quarterly review"' - Boolean operators: 'urgent AND deadline' or 'invoice OR receipt' **Property Filters (prefix:value):** - from: Sender - 'from:user@example.com' or 'from:example.com' - sent: Date sent - 'sent:2024-10-01' or 'sent>=2024-10-01' - hasattachment: Has files - 'hasattachment:yes' or 'hasattachment:no' **Date Operators:** - Exact: 'sent:2024-10-01' - Greater/equal: 'sent>=2024-10-01' - Less/equal: 'sent<=2024-10-31' - Range: 'sent:2024-10-01..2024-10-31' - Relative: 'sent>today-7' (last 7 days) **Combining Filters:** - AND: 'from:user@example.com AND subject:budget' - OR: 'punchlist OR termination' - Complex: '(punchlist OR termination) AND sent>=2024-10-01' Note: Can be empty to return recent messages.default:
from_indexinteger
The 0-based starting index for pagination. To paginate: check response['value'][0]['hitsContainers'][0]['moreResultsAvailable']. If true, call again with from_index += size (e.g., 0 → 25 → 50). Message ID is in hits[]['hitId'], not hits[]['resource']['id'].default: 0
enable_top_resultsboolean
If `true`, sorts results by relevance; otherwise, sorts by date in descending order (newest first).default: false
MICROSOFT_TEAMS_TEAMS_CREATE_CHANNELCreates a new 'standard', 'private', or 'shared' channel within a specified Microsoft Teams team.4 params

Creates a new 'standard', 'private', or 'shared' channel within a specified Microsoft Teams team.

Parameters* required
namestring
The display name for the new channel. Maximum length is 50 characters. Cannot contain characters ~ # % & * { } + / \ : < > ? | ' " or start with an underscore or period, or end with a period.
team_idstring
The GUID of the existing Microsoft Teams team where the new channel will be created.
descriptionstring
An optional, user-friendly description of the channel's purpose. Maximum length is 1024 characters.default:
membership_typestring
Membership type determining channel accessibility: 'standard' is accessible to all team members, 'private' is only accessible to a specific subset of team members, and 'shared' can be shared with people outside the team or organization (requires appropriate policies).default: standard
MICROSOFT_TEAMS_TEAMS_CREATE_CHATCreates a new chat; if a 'oneOnOne' chat with the specified members already exists, its details are returned, while 'group' chats are always newly created.3 params

Creates a new chat; if a 'oneOnOne' chat with the specified members already exists, its details are returned, while 'group' chats are always newly created.

Parameters* required
topicstring
Subject or title for the chat. REQUIRED for group chats. For 'oneOnOne' chats, this field is ignored and should be omitted.
membersarray
List of members. For 'oneOnOne' chats, exactly two members are required. For 'group' chats, at least two members are required and at least one member must have the 'owner' role.
chatTypestring
Type of chat. If 'oneOnOne' for members with an existing chat, that chat's details are returned.
MICROSOFT_TEAMS_TEAMS_GET_MESSAGERetrieves a specific message from a Microsoft Teams channel using its Team, Channel, and Message IDs.3 params

Retrieves a specific message from a Microsoft Teams channel using its Team, Channel, and Message IDs.

Parameters* required
team_idstring
ID of the Team containing the channel where the message is located.
channel_idstring
ID of the Channel within the specified Team that contains the message.
message_idstring
ID of the message to retrieve from the channel.
MICROSOFT_TEAMS_TEAMS_LISTRetrieves Microsoft Teams accessible by the authenticated user, allowing filtering, property selection, and pagination.3 params

Retrieves Microsoft Teams accessible by the authenticated user, allowing filtering, property selection, and pagination.

Parameters* required
topinteger
Maximum number of teams to return per page (1-999). Used for pagination; see `next_link` in response.default: 100
filterstring
OData v4.0 filter string to refine results based on team properties (e.g., `startsWith(displayName,'A')`). Consult OData v4.0 documentation for syntax.default:
selectstring
Comma-separated team properties to retrieve (e.g., 'id,displayName,description'). If empty or omitted, standard properties are returned. Supported properties include `id`, `displayName`, `description`, `visibility`.default:
MICROSOFT_TEAMS_TEAMS_LIST_CHANNELSRetrieves channels for a specified Microsoft Teams team ID (must be valid and for an existing team), with options to include shared channels, filter results, and select properties.4 params

Retrieves channels for a specified Microsoft Teams team ID (must be valid and for an existing team), with options to include shared channels, filter results, and select properties.

Parameters* required
filterstring
OData v4 query string to filter channels (e.g., `startswith(displayName,'Sales')` or `membershipType eq 'private'`).default:
selectstring
Comma-separated channel properties to return (e.g., 'id,displayName,description'); empty for default properties. Common: `id`, `displayName`, `description`, `email`, `membershipType`, `webUrl`.default:
team_idstring
Unique identifier (ID) of the Microsoft Teams team.
include_shared_channelsboolean
If true, include channels shared with the team.default: false
MICROSOFT_TEAMS_TEAMS_LIST_CHAT_MESSAGESRetrieves messages (newest first) from an existing and accessible Microsoft Teams one-on-one chat, group chat, or channel thread, specified by `chat_id`.2 params

Retrieves messages (newest first) from an existing and accessible Microsoft Teams one-on-one chat, group chat, or channel thread, specified by `chat_id`.

Parameters* required
topinteger
Maximum number of messages to retrieve. Microsoft Graph enforces a maximum limit of 50 per request.default: 50
chat_idstring
Unique Microsoft Graph chat identifier (GUID format). This is the chat ID returned by Graph API, not a channel thread ID. Use the Get All Chats action to retrieve valid chat IDs.
MICROSOFT_TEAMS_TEAMS_LIST_PEOPLERetrieves a list of people relevant to a specified user from Microsoft Graph, noting the `search` parameter is only effective if `user_id` is 'me'.7 params

Retrieves a list of people relevant to a specified user from Microsoft Graph, noting the `search` parameter is only effective if `user_id` is 'me'.

Parameters* required
topinteger
Maximum number of items per page for pagination. Actual count may be less. Service default if unspecified.
skipinteger
Number of items to skip for pagination.
filterstring
OData $filter query to limit results (e.g., `"startsWith(displayName,'A')"`).
searchstring
Fuzzy search query (name, email, or topic like 'topic:marketing'). Effective only when `user_id` is 'me'.
selectstring
Comma-separated OData property names to include for each person (e.g., 'id,displayName'). If unspecified, a default set is returned. Note: 'emailAddresses' is not a valid property for microsoft.graph.person; use 'scoredEmailAddresses' instead.
orderbystring
OData $orderby expression to sort results (e.g., 'displayName asc, relevanceScore desc').
user_idstring
Identifier of the user (e.g., 'me', 'adelev@contoso.com', or GUID) whose relevant people are to be retrieved.default: me
MICROSOFT_TEAMS_TEAMS_POST_CHANNEL_MESSAGEPosts a new text or HTML message to a specified channel in a Microsoft Teams team.4 params

Posts a new text or HTML message to a specified channel in a Microsoft Teams team.

Parameters* required
contentstring
The content of the message to be sent. Can be plain text or HTML, determined by `content_type`.
team_idstring
The unique identifier of the Microsoft Teams team containing the channel.
channel_idstring
The unique identifier of the channel within the specified team where the message will be posted.
content_typestring
The format of the message content. Supported values: 'text' (plain text) or 'html' (HTML content). Defaults to 'text'.default: text
MICROSOFT_TEAMS_TEAMS_POST_CHAT_MESSAGESends a non-empty message (text or HTML) to a specified, existing Microsoft Teams chat; content must be valid HTML if `content_type` is 'html'.3 params

Sends a non-empty message (text or HTML) to a specified, existing Microsoft Teams chat; content must be valid HTML if `content_type` is 'html'.

Parameters* required
chat_idstring
Unique identifier for the Microsoft Teams chat to receive the message.
contentstring
Message content, either plain text or HTML (see `content_type`).
content_typestring
Content format: 'text' (plain) or 'html'.default: text
MICROSOFT_TEAMS_TEAMS_POST_MESSAGE_REPLYSends a reply to an existing message, identified by `message_id`, within a specific `channel_id` of a given `team_id` in Microsoft Teams.5 params

Sends a reply to an existing message, identified by `message_id`, within a specific `channel_id` of a given `team_id` in Microsoft Teams.

Parameters* required
contentstring
The body of the reply message. This can be plain text or HTML, as specified by the `content_type` field.
team_idstring
The unique identifier (GUID) of the Microsoft Teams team that contains the channel where the message to be replied to exists.
channel_idstring
The unique identifier of the channel within the specified team. This channel contains the message to which the reply will be posted. Channel IDs typically follow a format like '19:{alphanumeric_string}@thread.tacv2'.
message_idstring
The unique identifier of the specific message within the channel to which this reply is directed.
content_typestring
Specifies the format of the `content` field. Accepted values are 'text' for plain text content and 'html' for content with HTML formatting. Defaults to 'text' if not provided.default: text
MICROSOFT_TEAMS_UNARCHIVE_TEAMTool to unarchive a Microsoft Teams team. Use when you need to restore an archived team to active state.1 params

Tool to unarchive a Microsoft Teams team. Use when you need to restore an archived team to active state.

Parameters* required
team_idstring
The unique identifier (GUID) of the team to unarchive.
MICROSOFT_TEAMS_UPDATE_CHANNEL_MESSAGETool to update a message in a channel. Use when you need to modify an existing channel message after confirming channel and message IDs.5 params

Tool to update a message in a channel. Use when you need to modify an existing channel message after confirming channel and message IDs.

Parameters* required
contentstring
Updated message content, either plain text or HTML.
team_idstring
Unique identifier of the Microsoft Teams team.
channel_idstring
Unique identifier of the channel within the team.
message_idstring
Unique identifier of the channel message to update.
content_typestring
Format of the message content: 'text' or 'html'.default: text
MICROSOFT_TEAMS_UPDATE_CHAT_MESSAGETool to update a specific message in a chat. Use when you need to correct or modify a sent chat message.4 params

Tool to update a specific message in a chat. Use when you need to correct or modify a sent chat message.

Parameters* required
chat_idstring
Unique identifier of the Microsoft Teams chat.
contentstring
Updated message content, either plain text or HTML.
message_idstring
Unique identifier of the chat message to update.
content_typestring
Format of the message content: 'text' or 'html'.default: text
MICROSOFT_TEAMS_UPDATE_TEAMTool to update the properties of a team. Use when you need to modify team settings such as member, messaging, or fun settings.4 params

Tool to update the properties of a team. Use when you need to modify team settings such as member, messaging, or fun settings.

Parameters* required
team_idstring
The unique identifier (GUID) of the team to update.
funSettingsobject
Settings that control fun features in the team.
memberSettingsobject
Settings that control what members can do in the team.
messagingSettingsobject
Settings that control messaging capabilities in the team.

Teams MCP Server

The first open-source Microsoft Teams connector for Claude. Any Microsoft 365 user can connect — just sign in with your work account. No setup, no credentials, no self-hosting required.

Read messages, list channels, search across Teams, send messages — all from Claude Code, Claude Desktop, or Claude Cowork.

Built by SurgeEnterpriseAI.

How It Works

┌─────────────┐     Click "Connect"     ┌──────────────────────┐
│ Claude User  │ ──────────────────────► │ Teams MCP Server     │
│ (Cowork/     │                         │ (hosted by Surge)    │
│  Desktop/    │     SSE/MCP Protocol    │                      │
│  Code)       │ ◄─────────────────────► │  ┌────────────────┐  │
└─────────────┘                          │  │ OAuth (common)  │  │
                                         │  │ Any M365 user   │  │
       User signs in with their          │  │ can sign in     │  │
       own Microsoft account             │  └───────┬────────┘  │
       ─────────────────────►            │          │           │
                                         │  ┌───────▼────────┐  │
                                         │  │ Microsoft       │  │
                                         │  │ Graph API       │  │
                                         │  └────────────────┘  │
                                         └──────────────────────┘

The user connects their own Microsoft 365 account. They see their own teams, their own channels, their own messages. Each user's tokens are isolated. The server is the bridge — it never stores messages, just passes them through.

Features

  • One-click connect — visit /connect, sign in with Microsoft, done
  • Multi-tenant — any Microsoft 365 organization, any user
  • 11 tools — teams, channels, messages, chats, search, profile
  • Dual transport — STDIO for Claude Code, HTTP/SSE for Cowork & remote
  • Multi-user — each session gets isolated OAuth tokens
  • Auto-detect — picks the right transport based on launch method
  • Token caching — silent refresh, no re-login every session
  • Retry logic — automatic retries on throttled Graph API calls
  • TypeScript — fully typed, clean architecture, MIT licensed

For Users: Connect in 1 Click

If someone is already hosting this server (e.g., on https://teams-mcp.surgeai.com):

  1. Claude asks you to connect Microsoft Teams
  2. You click the auth link
  3. Sign in with your Microsoft work account
  4. Done — Claude can now read your Teams

No API keys, no Azure portal, no setup.

For Developers: Self-Host

1. Clone & Install

git clone https://github.com/SurgeEnterpriseAI/teams-mcp-server.git
cd teams-mcp-server
npm install
npm run build

2. Azure AD App Registration

  1. Go to Azure Portal → App registrations → New registration
  2. Name: Teams MCP Server
  3. Supported account types: "Accounts in any organizational directory (Any Azure AD directory - Multitenant)"
  4. Redirect URI: Web → https://your-server.com/auth/callback
  5. Click Register

Configure:

  • Certificates & secrets → New client secret → copy the Value
  • API Permissions → Add Delegated (Microsoft Graph):
    • ChannelMessage.Read.All, ChannelMessage.Send
    • Chat.Read, Chat.ReadWrite, ChatMessage.Send
    • Team.ReadBasic.All, Channel.ReadBasic.All
    • User.Read
  • Click Grant admin consent (for your own tenant; other tenants consent on first login)

3. Configure & Deploy

cp .env.example .env
# Set TEAMS_CLIENT_ID, TEAMS_CLIENT_SECRET
# Set BASE_URL and REDIRECT_URI to your production URL
# TEAMS_AUTHORITY=common (multi-tenant, default)

Deploy to Railway, Render, Azure App Service, or any Node.js host:

# Railway
railway login && railway init && railway up

# Or Azure
az webapp up --name teams-mcp-server --runtime "NODE:20-lts"

# Or just run directly
TRANSPORT_MODE=http node dist/index.js

4. Submit to MCP Registry

Once deployed and tested, submit your server URL to Anthropic's MCP connector registry. Users will then see "Microsoft Teams" as a connect option in Claude Cowork — just like Slack and Gmail.

For Claude Code Users: Local STDIO Mode

Add to your .mcp.json:

{
  "mcpServers": {
    "teams": {
      "command": "node",
      "args": ["/path/to/teams-mcp-server/dist/index.js"],
      "cwd": "/path/to/teams-mcp-server"
    }
  }
}

First run will open your browser for Microsoft login. After that, tokens are cached.

Available Tools

ToolWhat it does
teams_list_teamsList all your Teams
teams_list_channelsList channels in a team
teams_read_channel_messagesRead recent channel messages
teams_send_channel_messageSend a message to a channel
teams_reply_to_messageReply in a channel thread
teams_read_message_repliesRead thread replies
teams_list_chatsList your DMs and group chats
teams_read_chat_messagesRead messages from a chat
teams_send_chat_messageSend a direct/group chat message
teams_search_messagesSearch messages across all Teams
teams_get_profileGet your Microsoft 365 profile

Architecture

src/
├── index.ts               Main entry (auto-detects transport)
├── config.ts              Central configuration
├── logger.ts              Structured logging
├── types.ts               TypeScript interfaces
├── sessions.ts            Multi-user session manager
├── auth/
│   ├── oauth.ts           MSAL OAuth (multi-tenant, per-user)
│   └── token-store.ts     Persistent token cache
├── graph/
│   ├── client.ts          Graph HTTP client with retries
│   ├── teams.ts           Teams & channels API
│   ├── messages.ts        Channel messages API
│   ├── chats.ts           DM & group chat API
│   └── search.ts          Search & profile API
├── mcp/
│   ├── server.ts          MCP server factory
│   └── tools/             11 tool definitions
├── transport/
│   ├── stdio.ts           STDIO (Claude Code)
│   └── http.ts            Express + SSE (Cowork / remote)

Environment Variables

VariableRequiredDefaultDescription
TEAMS_CLIENT_IDYes—Azure AD app client ID
TEAMS_CLIENT_SECRETYes—Azure AD client secret
TEAMS_AUTHORITYNocommoncommon for multi-tenant, or a specific tenant ID
TRANSPORT_MODENoautoauto, stdio, or http
PORTNo3000HTTP server port
BASE_URLNohttp://localhost:3000Public URL
REDIRECT_URINo{BASE_URL}/auth/callbackOAuth callback URL
TOKEN_STORE_PATHNo./.data/tokensToken cache directory
LOG_LEVELNoinfoLogging level

License

MIT — LICENSE

Contributing

Issues and PRs welcome. Built by SurgeEnterpriseAI.

Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Categories
Communication & MessagingSearch & Web Crawling
Registryactive
Packagemicrosoft-teams-mcp-server
TransportSTDIO
UpdatedApr 12, 2026
View on GitHub

Related Communication & Messaging MCP Servers

View all →
Microsoft 365 Teams

io.github.mindstone/mcp-server-microsoft-teams

Microsoft 365 Teams via Graph: list chats, read/send messages, list teams/channels, presence.
8
Outlook Email

com.mintmcp/outlook-email

A MCP server for Outlook email that lets you search, read, and draft emails and replies.
8
Resend Email MCP

helbertparanhos/resend-email-mcp

Complete Resend email MCP: full API coverage + debug layer (deliverability, DNS, bounces).
Email Mcp

marlinjai/email-mcp

Unified email MCP server for Gmail, Outlook, iCloud, and IMAP with batch operations
13
Email (IMAP/SMTP)

io.github.mindstone/mcp-server-email-imap

Email IMAP/SMTP MCP server: iCloud, Gmail, Yahoo, Outlook, and custom IMAP providers
8
HTML Email Playbook

io.github.osamahassouna/email-playbook-mcp

Teaches AI to write HTML email that renders in Outlook, Gmail, and Apple Mail. 19 rules, 6 comps.