MCP server that connects to the whole Microsoft 365 suite (Microsoft Office, Outlook, Excel) using Graph API (including mail, files, calendar)
Microsoft 365 MCP Server
A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Microsoft Office services through the Graph API.
Email (Outlook)
list-mail-messages, list-mail-folders, list-mail-folder-messages, get-mail-message, send-mail,
delete-mail-message, create-draft-email, move-mail-message
Calendar
list-calendars, list-calendar-events, get-calendar-event, get-calendar-view, create-calendar-event,
update-calendar-event, delete-calendar-event
OneDrive Files
list-drives, get-drive-root-item, list-folder-files, download-onedrive-file-content, upload-file-content,
upload-new-file, delete-onedrive-file
Excel Operations
list-excel-worksheets, get-excel-range, create-excel-chart, format-excel-range, sort-excel-range
OneNote
list-onenote-notebooks, list-onenote-notebook-sections, list-onenote-section-pages, get-onenote-page-content,
create-onenote-page
To Do Tasks
list-todo-task-lists, list-todo-tasks, get-todo-task, create-todo-task, update-todo-task, delete-todo-task
Planner
list-planner-tasks, get-planner-plan, list-plan-tasks, get-planner-task, create-planner-task
Contacts
list-outlook-contacts, get-outlook-contact, create-outlook-contact, update-outlook-contact,
delete-outlook-contact
User Profile
get-current-user
Search
search-query
Teams & Chats
list-chats, get-chat, list-chat-messages, get-chat-message, send-chat-message, list-chat-message-replies,
reply-to-chat-message, list-joined-teams, get-team, list-team-channels, get-team-channel, list-channel-messages,
get-channel-message, send-channel-message, list-team-members
SharePoint Sites
search-sharepoint-sites, get-sharepoint-site, get-sharepoint-site-by-path, list-sharepoint-site-drives,
get-sharepoint-site-drive-by-id, list-sharepoint-site-items, get-sharepoint-site-item, list-sharepoint-site-lists,
get-sharepoint-site-list, list-sharepoint-site-list-items, get-sharepoint-site-list-item,
get-sharepoint-sites-delta
Shared Mailboxes
list-shared-mailbox-messages, list-shared-mailbox-folder-messages, get-shared-mailbox-message,
send-shared-mailbox-mail
User Management
list-users
To access work/school features (Teams, SharePoint, etc.), enable organization mode using any of these flags:
{
"mcpServers": {
"ms365": {
"command": "npx",
"args": ["-y", "@softeria/ms-365-mcp-server", "--org-mode"]
}
}
}
Organization mode must be enabled from the start to access work account features. Without this flag, only personal account features (email, calendar, OneDrive, etc.) are available.
To access shared mailboxes, you need:
--org-mode
flag (work/school accounts only)Mail.Read.Shared
or Mail.Send.Shared
scopesuser-id
parameter in the shared mailbox toolsFinding shared mailboxes: Use the list-users
tool to discover available users and shared mailboxes in your
organization.
Example: list-shared-mailbox-messages
with user-id
set to shared-mailbox@company.com
Test login in Claude Desktop:
To add this MCP server to Claude Desktop:
Edit the config file under Settings > Developer:
{
"mcpServers": {
"ms365": {
"command": "npx",
"args": ["-y", "@softeria/ms-365-mcp-server"]
}
}
}
claude mcp add ms365 -- npx -y @softeria/ms-365-mcp-server
For other interfaces that support MCPs, please refer to their respective documentation for the correct integration method.
For local development or testing:
# From the project directory
claude mcp add ms -- npx tsx src/index.ts --org-mode
Or configure Claude Desktop manually:
{
"mcpServers": {
"ms365": {
"command": "node",
"args": ["/absolute/path/to/ms-365-mcp-server/dist/index.js", "--org-mode"]
}
}
}
Note: Run
npm run build
after code changes to update thedist/
folder.
⚠️ You must authenticate before using tools.
The server supports three authentication methods:
For interactive authentication via device code:
login
tool (auto-checks existing token)verify-login
tool to confirmnpx @softeria/ms-365-mcp-server --login
Follow the URL and code prompt in the terminal.Tokens are cached securely in your OS credential store (fallback to file).
When running with --http
, the server requires OAuth authentication:
npx @softeria/ms-365-mcp-server --http 3000
This mode:
/auth/*
(authorize, token, metadata)Authorization: Bearer <token>
for all MCP requests--enable-auth-tools
to enable them)MCP clients will automatically handle the OAuth flow when they see the advertised capabilities.
To use OAuth mode with custom Azure credentials (recommended for production), you'll need to set up an Azure AD app registration:
npm run inspector
):http://localhost:6274/oauth/callback
http://localhost:6274/oauth/callback/debug
http://localhost:3000/callback
(optional, for server callback).env
file in your project root:
MS365_MCP_CLIENT_ID=your-azure-ad-app-client-id-here
MS365_MCP_CLIENT_SECRET=your-azure-ad-app-client-secret-here
MS365_MCP_TENANT_ID=common
With these configured, the server will use your custom Azure app instead of the built-in one.
If you are running ms-365-mcp-server as part of a larger system that manages Microsoft OAuth tokens externally, you can provide an access token directly to this MCP server:
MS365_MCP_OAUTH_TOKEN=your_oauth_token npx @softeria/ms-365-mcp-server
This method:
Note: HTTP mode requires authentication. For unauthenticated testing, use stdio mode with device code flow.
Authentication Tools: In HTTP mode, login/logout tools are disabled by default since OAuth handles authentication. Use
--enable-auth-tools
if you need them available.
The following options can be used when running ms-365-mcp-server directly from the command line:
--login Login using device code flow
--logout Log out and clear saved credentials
--verify-login Verify login without starting the server
--org-mode Enable organization/work mode from start (includes Teams, SharePoint, etc.)
--work-mode Alias for --org-mode
--force-work-scopes Backwards compatibility alias for --org-mode (deprecated)
When running as an MCP server, the following options can be used:
-v Enable verbose logging
--read-only Start server in read-only mode, disabling write operations
--http [port] Use Streamable HTTP transport instead of stdio (optionally specify port, default: 3000)
Starts Express.js server with MCP endpoint at /mcp
--enable-auth-tools Enable login/logout tools when using HTTP mode (disabled by default in HTTP mode)
--enabled-tools <pattern> Filter tools using regex pattern (e.g., "excel|contact" to enable Excel and Contact tools)
Environment variables:
READ_ONLY=true|1
: Alternative to --read-only flagENABLED_TOOLS
: Filter tools using a regex pattern (alternative to --enabled-tools flag)MS365_MCP_ORG_MODE=true|1
: Enable organization/work mode (alternative to --org-mode flag)MS365_MCP_FORCE_WORK_SCOPES=true|1
: Backwards compatibility for MS365_MCP_ORG_MODELOG_LEVEL
: Set logging level (default: 'info')SILENT=true|1
: Disable console outputMS365_MCP_CLIENT_ID
: Custom Azure app client ID (defaults to built-in app)MS365_MCP_TENANT_ID
: Custom tenant ID (defaults to 'common' for multi-tenant)MS365_MCP_OAUTH_TOKEN
: Pre-existing OAuth token for Microsoft Graph API (BYOT method)We welcome contributions! Before submitting a pull request, please ensure your changes meet our quality standards.
Run the verification script to check all code quality requirements:
npm run verify
After cloning the repository, you may need to generate the client code from the Microsoft Graph OpenAPI specification:
npm run generate
If you're having problems or need help:
MIT © 2025 Softeria
Interact with the HubSpot CRM API to manage contacts, companies, and deals.
Integrate with Google Sheets to read, write, and manage spreadsheet data.
Access data from the Bakaláři school system, including schedules, absences, and grades, through a standardized API.
Integrate ClickUp with AI applications to manage tasks, spaces, lists, and folders.
Interacting with Obsidian via REST API
Converts Cursor agent plans into structured markdown task lists and organizes them in your repository.
Evaluates technical documentation against globalization standards, analyzing for translation issues, ambiguity, and sentence length.
Manage your Todoist tasks and projects using the Todoist Python API.
Mercado Pago's official MCP server, offering tools to interact with our API, simplifying tasks and product integration.
Interact with the Salesforce API using jsforce, requiring username and password for authentication.