teams-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@teams-mcpList my calendar events for today"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Teams MCP — with Meetings & Calendar
A Model Context Protocol (MCP) server that provides seamless integration with Microsoft Graph APIs, enabling AI assistants to interact with Microsoft Teams, users, chats, files, organizational data — and to create, update, list, and inspect Teams meetings and calendar events.
About this project. This project is a fork of
@floriscornel/teams-mcp(MIT). It starts from the upstream codebase — keeping all of its Teams messaging, chat, and search tooling — and is maintained here as an independent repository (it does not track the original upstream).On top of that base, this fork adds a full meetings & calendar toolset:
create_meeting,create_calendar_meeting,update_calendar_meeting,delete_meeting,delete_calendar_event,list_calendar_events,get_meeting,get_short_link, andget_attendance_report— covering recurrence, Markdown agendas, auto-recording, attendance reports, and short-link reconstruction.It runs locally from a build — it is not published to npm, so install it from source as described below.
📦 Installation
# From the project directory
npm install # install dependencies
npm run build # compile TypeScript to dist/
node dist/index.js authenticate # sign in (device code flow)Then register the built server with your MCP client. For Claude Code:
# Global (available in every project)
claude mcp add teams --scope user -- node /absolute/path/to/teams-mcp/dist/index.js
# Or local to the current project (default scope)
claude mcp add teams -- node /absolute/path/to/teams-mcp/dist/index.jsFor Cursor / Claude Desktop / VS Code, add to the MCP config:
{
"mcpServers": {
"teams": {
"command": "node",
"args": ["/absolute/path/to/teams-mcp/dist/index.js"]
}
}
}Tip: the configured command points at
dist/index.js. Don't move/delete the folder, and after changing the source runnpm run buildagain (and reconnect the MCP server in your client) to pick up the new build.
Related MCP server: Microsoft MCP
🚀 Features
📅 Meetings & Calendar (added in this fork)
Create meetings
Ad-hoc Teams meeting links (instant join URL, no calendar entry)
Scheduled calendar meetings (real Outlook event + Teams join link + invitees)
Recurrence — daily / weekly / monthly series, bounded by a count or an end date
Markdown agendas — meeting descriptions written in Markdown, converted to HTML
Auto-recording — start recording automatically when the meeting begins (off by default)
Update & delete — retitle/reschedule events, delete meetings or whole recurring series
List the calendar — events in any date range (defaults to the current week), with organizer, location, join link, and event IDs
Short links — reconstruct the human-readable
teams.microsoft.com/meet/<id>?p=<passcode>link, which Graph does not expose directlyAttendance reports — post-meeting participants, durations, and roles
Not possible via Graph: real-time presence (who is currently in a call, or whether a meeting has started). Attendance data is historical only.
🔐 Authentication
OAuth 2.0 device code authentication flow with Microsoft Graph
Secure token management, cache persistence, and refresh token renewal
Authentication status checking and logout support
Read-only mode with reduced scopes
Direct
AUTH_TOKENsupport for pre-issued Microsoft Graph access tokens
👥 User Management
Get current user information
Search users by name or email
Retrieve detailed user profiles
Access organizational directory data
🏢 Microsoft Teams Integration
Teams Management — list joined teams, access team details and metadata
Channel Operations — list channels, retrieve messages and replies, send/reply/edit/soft-delete, message reactions, importance levels, inline image attachments
Team Members — list members and roles, search users for
@mentions
💬 Chat & Messaging
List, create, and read 1:1 and group chats (with pagination)
Send, edit, and soft-delete chat messages
Message reactions
📎 Media & Attachments
Download hosted content (images, files) from chat and channel messages
Upload and send any file type to channels (SharePoint) and chats (OneDrive), with large-file resumable sessions
🔍 Advanced Search & Discovery
Search across Teams channels and chats via the Microsoft Search API (KQL)
Filter by sender, mentions, attachments, read state, and date ranges
Find messages mentioning the current user
📅 Meetings & Calendar — Tool Reference
Read-only
Tool | Parameters | Description |
|
| List events in a date range (defaults to the current week, Monday→next Monday). Expands recurring series into occurrences. With |
|
| Fetch an online meeting's subject, join link, and times by its onlineMeeting ID. |
|
| Resolve the short |
|
| Post-meeting attendance: total participants, per-person duration and role. Requires |
Write
Tool | Parameters | Description |
|
| Create an ad-hoc Teams meeting link. Fast, but does not create a calendar entry or invite anyone. |
|
| Create a scheduled meeting as an Outlook calendar event with a Teams join link. Supports invitees, Markdown agenda, recurring series, and auto-recording. Also returns the reconstructed short link. |
|
| Edit an existing calendar event. Only the fields you pass are changed. |
|
| Delete an ad-hoc online meeting (invalidates its join link). |
|
| Delete a calendar event. Deleting a recurring series' master event removes all occurrences. |
Ad-hoc link vs. calendar meeting
|
| |
Appears in the calendar | ❌ No (ad-hoc link only) | ✅ Yes, on its date |
Invitees / invitations | ❌ | ✅ |
Recurrence | ❌ | ✅ |
Markdown agenda | ❌ | ✅ |
Auto-recording | ✅ | ✅ (resolved via the backing onlineMeeting) |
recordAutomaticallyis a property of theonlineMeetingresource, not the calendarevent. For calendar meetings, the server transparently looks up the backing onlineMeeting (by its join URL) and enables recording on it.
Examples
Recurring weekly meeting with a Markdown agenda:
{
"subject": "Weekly sync",
"startDateTime": "2026-06-04T16:00:00",
"endDateTime": "2026-06-04T18:00:00",
"timeZone": "Europe/Paris",
"body": "## Agenda\n- Review last week\n- Blockers\n- Next steps",
"recurrence": { "pattern": "weekly", "daysOfWeek": ["thursday"], "interval": 1 }
}Calendar meeting with invitees and auto-recording:
{
"subject": "Quarterly review",
"startDateTime": "2026-06-22T10:00:00",
"endDateTime": "2026-06-22T11:00:00",
"timeZone": "UTC",
"attendees": [
{ "email": "alex@contoso.com", "name": "Alex", "type": "required" }
],
"recordAutomatically": true
}Reschedule and rename an existing event:
{
"eventId": "AAMk...",
"subject": "Quarterly review (rescheduled)",
"startDateTime": "2026-06-23T14:00:00",
"endDateTime": "2026-06-23T15:00:00",
"timeZone": "UTC"
}Rich Message Formatting Support
The following tools support rich message formatting in Teams channels and chats:
send_channel_messagesend_chat_messagereply_to_channel_messageupdate_channel_messageupdate_chat_messagesend_file_to_channelsend_file_to_chat
Format Options
You can specify the format parameter to control the message formatting:
text(default): Plain textmarkdown: Markdown formatting (bold, italic, lists, links, code, etc.) converted to sanitized HTML
When format is set to markdown, the message content is converted to HTML using a secure markdown parser and sanitized to remove potentially dangerous content before being sent to Teams.
Supported Markdown Features
Text formatting: Bold (
**text**), italic (_text_), strikethrough (~~text~~)Links:
[text](url)Lists: Bulleted (
- item) and numbered (1. item)Code: Inline
`code`and fenced code blocksHeadings:
# H1through###### H6Blockquotes:
> quoted textTables: GitHub-flavored markdown tables
The same Markdown→HTML conversion powers the
bodyparameter ofcreate_calendar_meetingandupdate_calendar_meeting.
LLM-Friendly Content Format
Messages retrieved from the Microsoft Graph API are returned as raw HTML containing Teams-specific tags. To make this content more consumable by AI assistants, these tools support automatic HTML-to-Markdown conversion via the contentFormat parameter (markdown default, or raw):
get_chat_messagesget_channel_messagesget_channel_message_repliessearch_messagesget_my_mentions
🔧 Configuration
Prerequisites
Node.js 18+
Microsoft 365 account (work/school tenant — personal accounts cannot create Teams meetings via Graph)
Microsoft Graph delegated permissions for the scopes below
Required Microsoft Graph Permissions
Full mode (default):
User.Read— Read user profileUser.ReadBasic.All— Read basic user infoTeam.ReadBasic.All— Read team informationChannel.ReadBasic.All— Read channel informationChannelMessage.Read.All— Read channel messagesChannelMessage.Send— Send channel messages and repliesChannelMessage.ReadWrite— Edit and delete channel messagesChat.Read— Read chat messages (read-only scope)Chat.ReadWrite— Create/manage chats, send/edit/delete chat messagesTeamMember.Read.All— Read team membersFiles.ReadWrite.All— File uploads to channels and chatsOnlineMeetings.ReadWrite— Create/read/delete Teams meetings and enable auto-recording (meetings)Calendars.ReadWrite— Create/list/update/delete calendar events (meetings)OnlineMeetingArtifact.Read.All— Read attendance reports (meetings; typically requires admin consent)
Read-only mode (TEAMS_MCP_READ_ONLY=true) requests only the read scopes:
User.Read, User.ReadBasic.All, Team.ReadBasic.All, Channel.ReadBasic.All, ChannelMessage.Read.All, TeamMember.Read.All, Chat.Read.
After adding a new scope (e.g. enabling attendance reports), re-authenticate so the cached token requests it:
node dist/index.js logout && node dist/index.js authenticate.
Token Storage
Auth metadata:
~/.msgraph-mcp-auth.jsonToken cache:
~/.teams-mcp-token-cache.json
🛠️ Usage
Starting the Server
# Development mode with hot reload
npm run dev
# Production mode
npm run build && node dist/index.js
# Read-only mode (disables all write tools)
TEAMS_MCP_READ_ONLY=true node dist/index.jsCLI Commands
node dist/index.js authenticate # Authenticate with full scopes
node dist/index.js authenticate --read-only # Authenticate with read-only scopes
node dist/index.js check # Check authentication status
node dist/index.js logout # Clear authentication
node dist/index.js # Start MCP server (default)Environment Variables
TEAMS_MCP_READ_ONLY=true— Start the MCP server in read-only modeAUTH_TOKEN=<jwt>— Use a pre-existing Microsoft Graph access token instead of MSAL login
🧰 Available MCP Tools
39 tools total — 20 read-only, 19 write (write tools are disabled when TEAMS_MCP_READ_ONLY=true).
Authentication
auth_status— Check current authentication status
User Operations
get_current_user,search_users,get_user
Teams Operations
list_teams,list_channels,get_channel_messages,get_channel_message_replies,list_team_members,search_users_for_mentionssend_channel_message,reply_to_channel_message,update_channel_message,delete_channel_message,send_file_to_channelset_channel_message_reaction,unset_channel_message_reaction
Chat Operations
list_chats,get_chat_messagessend_chat_message,create_chat,update_chat_message,delete_chat_message,send_file_to_chatset_chat_message_reaction,unset_chat_message_reaction
Meetings & Calendar
list_calendar_events,get_meeting,get_short_link,get_attendance_report(read-only)create_meeting,create_calendar_meeting,update_calendar_meeting,delete_meeting,delete_calendar_event(write)
Media Operations
download_message_hosted_content,download_chat_hosted_content
Search Operations
search_messages,get_my_mentions
🔒 Security
Authentication via Microsoft's OAuth 2.0 flow or a caller-provided Microsoft Graph token
Access tokens are automatically renewed using cached refresh tokens
Token cache and auth metadata are stored locally in your home directory
Markdown content is sanitized before sending HTML to Teams (and into meeting agendas)
AUTH_TOKENis validated to ensure it targetshttps://graph.microsoft.com
📝 License
MIT License — see the LICENSE file. Original work © Floris Cornel; meeting/calendar additions in this fork are also MIT.
🙏 Credits
A fork of @floriscornel/teams-mcp (MIT), extended with the meetings & calendar toolset.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/goddivor/teams-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server