M365 MCP
Click on "Deploy 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., "@M365 MCP show 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.
M365 MCP
MCP server for Microsoft 365 via the Microsoft Graph API. 16 tools giving read-only access to your profile, calendar, email, Teams chats and channels, OneDrive files, SharePoint, tasks, the org directory, and meeting transcripts from any MCP client.
Installation
Claude Code
claude mcp add m365-mcp -e MS365_MCP_CLIENT_ID=your-client-id -e MS365_MCP_TENANT_ID=your-tenant-id -- npx -y @masonator/m365-mcpClaude Desktop
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"m365-mcp": {
"command": "npx",
"args": ["-y", "@masonator/m365-mcp"],
"env": {
"MS365_MCP_CLIENT_ID": "your-azure-ad-client-id",
"MS365_MCP_TENANT_ID": "your-azure-ad-tenant-id"
}
}
}
}First Run
On first use, the server opens your browser to sign in with Microsoft. After granting consent, tokens are stored locally at ~/.config/m365-mcp/tokens.json (permissions 600) and refreshed automatically.
Related MCP server: Microsoft 365 MCP Server
Environment Variables
Variable | Required | Description |
| Yes | Azure AD application (client) ID |
| Yes | Azure AD tenant ID |
| No | Azure AD client secret (confidential clients only) |
| No | Timezone for calendar (default: system timezone) |
| No | OAuth redirect URI (default: dynamic port, |
Azure AD Setup
Register an application in Azure AD with these settings:
App registration > New registration
Redirect URI:
http://localhost(Web platform) — or set a fixed URI viaMS365_MCP_REDIRECT_URLCertificates & secrets > New client secret
API permissions > Add the following delegated permissions:
Permission | Used by |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
All permissions are delegated and read-only: the server acts as the signed-in user and cannot reach anyone else's mailbox, chats or files.
Confidential vs public clients. If the registration uses the Web platform with a client secret, the token request must not carry an
Originheader — Azure rejects cross-origin token redemption for anything but SPA clients (AADSTS9002326). The server detects this fromMS365_MCP_CLIENT_SECRETand omits the header automatically.
Tools
ms_auth_status
Check connection status. If not connected, opens browser to sign in.
ms_profile
Fetch your Microsoft 365 profile — display name, email, job title, office location.
ms_calendar
Fetch calendar events. Defaults to today.
Parameter | Description |
| Specific date (YYYY-MM-DD) |
| Start of range (ISO 8601) |
| End of range (ISO 8601) |
| Summarise each event, omitting the body. Good for scanning. |
ms_mail
Read recent emails with optional keyword search.
Parameter | Description |
| Keyword to filter emails |
| Number of emails (1-25, default 10) |
ms_chat
Read Teams chats. Without chat_id lists recent chats; with chat_id returns messages from that thread.
Parameter | Description |
| Specific chat thread ID |
| Number of items (1-25, default 10) |
ms_files
Browse or search OneDrive files.
Parameter | Description |
| Folder path (e.g., |
| Search across OneDrive |
| Max items (1-50, default 20) |
ms_transcripts
Fetch Teams meeting transcripts. Returns previews (~3000 chars) with a transcript_id for drill-down to the full transcript.
Parameter | Description |
| Date (YYYY-MM-DD) |
| Start of range (ISO 8601) |
| End of range (ISO 8601) |
| ID from a previous list call for full content |
ms_teams
Browse joined Teams, their channels, and channel messages. Progressive drill-down:
no arguments lists teams, team_id lists channels, team_id + channel_id reads messages.
Parameter | Description |
| Team ID to list its channels |
| Channel ID (with |
| Message ID (with both above) to read its reply thread |
| Max results (1-50, default 20) |
ms_tasks
Read Microsoft To Do and Planner tasks. Completed tasks are hidden unless asked for.
Parameter | Description |
| To Do list ID to read its tasks |
| Return assigned Planner tasks instead |
| Include finished tasks (default |
| Max results (1-50, default 25) |
ms_people
Look people up in the organisation directory. search resolves a name to the email
address that ms_schedule needs.
Parameter | Description |
| Name or partial name to search for |
| Email or object ID — returns details, manager, direct reports |
| List the signed-in user's group and team memberships |
| Max results (1-50, default 20) |
ms_search
Search across mail, Teams chats, calendar, OneDrive and SharePoint in one call. Use this
when you don't already know where something lives. Supports KQL, so from:jane subject:budget
works.
Parameter | Description |
| What to search for (required) |
| Limit to |
| Max results per area (1-25, default 5) |
ms_insights
Documents you recently worked with, or that were shared with you.
Parameter | Description |
|
|
| Max results (1-50, default 15) |
trendingis disabled by policy in many tenants; the tool says so plainly rather than returning an error.
ms_brief
One call that assembles a catch-up, composed from the tools above.
With no arguments: today's meetings, unread mail, recent chats, open Planner tasks and
yesterday's meeting transcripts. With person: who they are, plus your recent mail and
chats involving them.
Parameter | Description |
| Catch up on one person — name or email |
| Date for the brief (YYYY-MM-DD, defaults to today) |
| Max items per section (1-15, default 5) |
A section that fails is marked as unavailable rather than taking the whole brief down.
ms_server_info
Server metadata: version, registered tools, and which environment variables are set.
Development
git clone https://github.com/StuMason/m365-mcp.git
cd m365-mcp
npm install
npm run build
npm testContributing
See CONTRIBUTING.md for details.
License
MIT - Stu Mason
Available Tools
16 toolsms_auth_statusConnection StatusA
Check Microsoft 365 connection status. If not connected, opens browser to sign in.
Inputs: no named parameters.
ms_briefDaily BriefARead-onlyIdempotent
One call that assembles a catch-up. With no arguments: today’s meetings, unread mail, recent chats, open tasks and yesterday’s meeting transcripts. With person: who they are and your recent mail and chats involving them. Use this instead of calling four or five tools separately.
Inputs: date, count, person.
ms_calendarCalendarARead-onlyIdempotent
Fetch the user's Microsoft 365 calendar events. Defaults to today if no date params given. Can also list calendars or drill down into a specific event.
Inputs: end, date, start, compact, +2 more.
ms_chatTeams ChatsARead-onlyIdempotent
Read the user's recent Microsoft Teams chats. Without chat_id lists recent chats; with chat_id returns messages from that chat.
Inputs: count, chat_id, members.
ms_filesOneDrive FilesCRead-onlyIdempotent
Browse or search the user's OneDrive files.
Inputs: path, count, search, shared, +1 more.
ms_insightsDocument InsightsARead-onlyIdempotent
Documents the user recently worked with or had shared with them, from Microsoft Graph item insights. Good for "what was I working on" and "what did someone send me" without knowing a filename. Defaults to recently used.
Inputs: kind, count.
ms_mailMailARead-onlyIdempotent
Read the user's recent emails from Microsoft 365. Without message_id: lists emails with preview text. With message_id: returns the full email body. Use folders: true to list mail folders, folder to read from a specific folder, attachments with message_id to list attachments, or filter for quick filters.
Inputs: count, filter, folder, search, +3 more.
ms_peoplePeople DirectoryARead-onlyIdempotent
Look people up in the organisation directory. Use search to resolve a name to an email address (the input ms_schedule needs), user to read one person’s details plus their manager and direct reports, or groups to list the groups and teams the signed-in user belongs to.
Inputs: user, count, groups, search.
ms_profileMy ProfileBRead-onlyIdempotent
Fetch the user's Microsoft 365 profile. Optionally include manager, reports, groups, or photo.
Inputs: include.
ms_scheduleFree/Busy ScheduleARead-onlyIdempotent
Check people's availability / free-busy status for a given time window. Accepts one or more email addresses and returns their schedule with time slots showing free, busy, tentative, out of office, or working elsewhere.
Inputs: emails (required), end, date, start, +1 more.
ms_searchSearch EverythingARead-onlyIdempotent
Search across Microsoft 365 in one call — mail, Teams chats, calendar events, OneDrive files and SharePoint. Use this when you do not already know where something lives; use the per-area tools (ms_mail, ms_chat, ms_files) when you do. Supports KQL, so "from:jane subject:budget" works.
Inputs: query (required), count, types.
ms_server_infoServer InfoARead-onlyIdempotent
Returns m365-mcp server metadata: version, available tools, and runtime info. Useful for debugging.
Inputs: no named parameters.
ms_tasksTo Do & PlannerARead-onlyIdempotent
Read Microsoft To Do and Planner tasks. Without parameters lists To Do task lists; with list_id returns the tasks in that list; with planner=true returns Planner tasks assigned to the user.
Inputs: count, list_id, planner, include_completed.
ms_teamsTeams & ChannelsARead-onlyIdempotent
Browse Microsoft Teams the user has joined. Without parameters lists joined teams; with team_id lists that team’s channels; with team_id + channel_id returns recent channel messages. Distinct from ms_chat, which covers private/group chats rather than team channels.
Inputs: count, team_id, channel_id, message_id.
ms_transcriptsMeeting TranscriptsARead-onlyIdempotent
Fetch meeting transcripts from Microsoft Teams. Without transcript_id: lists meetings with ~3000 char previews. With transcript_id: returns transcript content in chunks (default 10,000 chars). Use offset to paginate through long transcripts.
Inputs: end, date, start, length, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Each tool targets a clearly distinct Microsoft 365 surface or aggregation purpose, and descriptions explicitly resolve likely overlaps such as ms_search vs per-area tools, ms_chat vs ms_teams, and ms_brief vs the individual read tools.
All tools follow the same predictable ms_ prefix plus snake_case convention, producing a uniform namespace despite the mix of nouns and status/info tools.
16 tools is slightly above the typical 3-15 range, but reasonable for a broad M365 suite covering mail, calendar, files, Teams, SharePoint, tasks, people, search, and summary workflows.
The surface is comprehensive for a read-only M365 assistant, covering the main content areas and cross-cutting search/catch-up needs, though it lacks write operations such as sending mail, creating events, or posting messages.
Maintenance
Related MCP Connectors
Permissioned access to Outlook, OneDrive and Teams via the user's own Microsoft account
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
One MCP server for the services your AI needs: memory, files, Microsoft 365, kanban and more.
Hosted MCP server for your Gmail, Outlook and IMAP mail, with mailboxes and scopes set per agent.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA production-ready MCP server that provides secure, delegated access to Microsoft 365 services including Email, SharePoint, OneDrive, and Calendar. It enables AI models to search messages, browse files, manage calendar events, and parse document contents using OAuth 2.1 authentication.MIT
- AlicenseCqualityNot gradedmaintenanceAn MCP server that enables interaction with Microsoft 365 services like Outlook, OneDrive, Teams, and SharePoint via the Microsoft Graph API. It supports comprehensive operations including email management, file access, and organizational collaboration for personal and work accounts.78-
- FlicenseNot gradedqualityBmaintenanceMCP server providing access to Microsoft Teams chats/channels, Outlook emails, calendar events, and SharePoint files via Microsoft Graph API.-
- AlicenseNot gradedqualityDmaintenanceRemote MCP server for Microsoft Graph with delegated OAuth support, enabling interaction with Microsoft 365 services like mail, calendar, OneDrive, SharePoint, Teams, and more via natural language.MIT