ms-365-mcp-server

ms-365-mcp-server

A Model Context Protocol server for seamless Microsoft 365 and Office Graph API integration.

333
Stars
114
Forks
333
Watchers
6
Issues
ms-365-mcp-server is a Model Context Protocol (MCP) server that enables secure and efficient access to Microsoft 365 and Office services via the Graph API. It supports authentication through Microsoft Authentication Library (MSAL), granular tool filtering, and provides output in both JSON and token-efficient TOON formats. The server offers comprehensive integration with personal and organizational Microsoft 365 tools including Outlook, Calendar, OneDrive, Excel, Teams, Planner, and SharePoint. It supports both read-only mode for safe operations and advanced organization mode for enhanced team and enterprise scenarios.

Key Features

Model Context Protocol (MCP) server implementation
Authentication via Microsoft Authentication Library (MSAL)
Comprehensive Microsoft 365 service integration
Read-only mode for secure operations
Tool filtering for granular access control
Supports standard JSON and efficient TOON output formats
Personal and organizational account tool support
CLI and environment variable configuration
Experimental support for token-optimized output
Integration with multiple Microsoft services such as Outlook, Teams, OneDrive, SharePoint, and Planner

Use Cases

Integrating Microsoft 365 data into LLM-based applications
Reducing token consumption in AI workflows using TOON format
Securely accessing corporate calendars, emails, and files for enterprise AI assistants
Setting up granular, app-specific Microsoft 365 access controls
Providing read-only views of corporate data for compliance and safety
Enabling collaborative bot or agent workflows for Teams and SharePoint
Automating reporting or dashboard generation using Excel and OneDrive data
Facilitating personal productivity agents by exposing To Do and Outlook data
Organizational knowledge discovery using full directory and search tools
Integrating with Claude Desktop or similar Model Context Protocol clients

README

ms-365-mcp-server

npm version build status license

Microsoft 365 MCP Server

A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Microsoft Office services through the Graph API.

Prerequisites

  • Node.js >= 20 (recommended)
  • Node.js 14+ may work with dependency warnings

Features

  • Authentication via Microsoft Authentication Library (MSAL)
  • Comprehensive Microsoft 365 service integration
  • Read-only mode support for safe operations
  • Tool filtering for granular access control

Output Format: JSON vs TOON

The server supports two output formats that can be configured globally:

JSON Format (Default)

Standard JSON output with pretty-printing:

json
{
  "value": [
    {
      "id": "1",
      "displayName": "Alice Johnson",
      "mail": "alice@example.com",
      "jobTitle": "Software Engineer"
    }
  ]
}

(experimental) TOON Format

Token-Oriented Object Notation for efficient LLM token usage:

value[1]{id,displayName,mail,jobTitle}:
  "1",Alice Johnson,alice@example.com,Software Engineer

Benefits:

  • 30-60% fewer tokens vs JSON
  • Best for uniform array data (lists of emails, calendar events, files, etc.)
  • Ideal for cost-sensitive applications at scale

Usage: (experimental) Enable TOON format globally:

Via CLI flag:

bash
npx @softeria/ms-365-mcp-server --toon

Via Claude Desktop configuration:

json
{
  "mcpServers": {
    "ms365": {
      "command": "npx",
      "args": ["-y", "@softeria/ms-365-mcp-server", "--toon"]
    }
  }
}

Via environment variable:

bash
MS365_MCP_OUTPUT_FORMAT=toon npx @softeria/ms-365-mcp-server

Supported Services & Tools

Personal Account Tools (Available by default)

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

Organization Account Tools (Requires --org-mode flag)

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

Organization/Work Mode

To access work/school features (Teams, SharePoint, etc.), enable organization mode using any of these flags:

json
{
  "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.

Shared Mailbox Access

To access shared mailboxes, you need:

  1. Organization mode: Shared mailbox tools require --org-mode flag (work/school accounts only)
  2. Delegated permissions: Mail.Read.Shared or Mail.Send.Shared scopes
  3. Exchange permissions: The signed-in user must have been granted access to the shared mailbox
  4. Usage: Use the shared mailbox's email address as the user-id parameter in the shared mailbox tools

Finding 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

Quick Start Example

Test login in Claude Desktop:

Login example

Examples

Image

Integration

Claude Desktop

To add this MCP server to Claude Desktop:

Edit the config file under Settings > Developer:

json
{
  "mcpServers": {
    "ms365": {
      "command": "npx",
      "args": ["-y", "@softeria/ms-365-mcp-server"]
    }
  }
}

Claude Code CLI

bash
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.

Local Development

For local development or testing:

bash
# From the project directory
claude mcp add ms -- npx tsx src/index.ts --org-mode

Or configure Claude Desktop manually:

json
{
  "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 the dist/ folder.

Authentication

⚠️ You must authenticate before using tools.

The server supports three authentication methods:

1. Device Code Flow (Default)

For interactive authentication via device code:

  • MCP client login:
    • Call the login tool (auto-checks existing token)
    • If needed, get URL+code, visit in browser
    • Use verify-login tool to confirm
  • CLI login:
    bash
    npx @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).

2. OAuth Authorization Code Flow (HTTP mode only)

When running with --http, the server requires OAuth authentication:

bash
npx @softeria/ms-365-mcp-server --http 3000

This mode:

  • Advertises OAuth capabilities to MCP clients
  • Provides OAuth endpoints at /auth/* (authorize, token, metadata)
  • Requires Authorization: Bearer <token> for all MCP requests
  • Validates tokens with Microsoft Graph API
  • Disables login/logout tools by default (use --enable-auth-tools to enable them)

MCP clients will automatically handle the OAuth flow when they see the advertised capabilities.

Setting up Azure AD for OAuth Testing

To use OAuth mode with custom Azure credentials (recommended for production), you'll need to set up an Azure AD app registration:

  1. Create Azure AD App Registration:
  • Go to Azure Portal
  • Navigate to Azure Active Directory → App registrations → New registration
  • Set name: "MS365 MCP Server"
  1. Configure Redirect URIs: Add these redirect URIs for testing with MCP Inspector (npm run inspector):
  • http://localhost:6274/oauth/callback
  • http://localhost:6274/oauth/callback/debug
  • http://localhost:3000/callback (optional, for server callback)
  1. Get Credentials:
  • Copy the Application (client) ID from Overview page
  • Go to Certificates & secrets → New client secret → Copy the secret value
  1. Configure Environment Variables: Create a .env file in your project root:
    env
    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.

3. Bring Your Own Token (BYOT)

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:

bash
MS365_MCP_OAUTH_TOKEN=your_oauth_token npx @softeria/ms-365-mcp-server

This method:

  • Bypasses the interactive authentication flows
  • Use your pre-existing OAuth token for Microsoft Graph API requests
  • Does not handle token refresh (token lifecycle management is your responsibility)

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.

CLI Options

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)

Server Options

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)
--toon            (experimental) Enable TOON output format for 30-60% token reduction

Environment variables:

  • READ_ONLY=true|1: Alternative to --read-only flag
  • ENABLED_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_MODE
  • MS365_MCP_OUTPUT_FORMAT=toon: Enable TOON output format (alternative to --toon flag)
  • LOG_LEVEL: Set logging level (default: 'info')
  • SILENT=true|1: Disable console output
  • MS365_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)

Contributing

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:

bash
npm run verify

For Developers

After cloning the repository, you may need to generate the client code from the Microsoft Graph OpenAPI specification:

bash
npm run generate

Support

If you're having problems or need help:

License

MIT © 2025 Softeria

Star History

Star History Chart

Repository Owner

Softeria
Softeria

Organization

Repository Details

Language TypeScript
Default Branch main
Size 509 KB
Contributors 16
License MIT License
MCP Verified Nov 11, 2025

Programming Languages

TypeScript
63.07%
JavaScript
36.93%

Tags

Join Our Newsletter

Stay updated with the latest AI tools, news, and offers by subscribing to our weekly newsletter.

We respect your privacy. Unsubscribe at any time.

Related MCPs

Discover similar Model Context Protocol servers

  • Teamwork MCP Server

    Teamwork MCP Server

    Seamless Teamwork.com integration for Large Language Models via the Model Context Protocol

    Teamwork MCP Server is an implementation of the Model Context Protocol (MCP) that enables Large Language Models to interact securely and programmatically with Teamwork.com. It offers standardized interfaces, including HTTP and STDIO, allowing AI agents to perform various project management operations. The server supports multiple authentication methods, an extensible toolset architecture, and is designed for production deployments. It provides read-only capability for safe integrations and robust observability features.

    • 11
    • MCP
    • Teamwork/mcp
  • mcp-cli

    mcp-cli

    A command-line inspector and client for the Model Context Protocol

    mcp-cli is a command-line interface tool designed to interact with Model Context Protocol (MCP) servers. It allows users to run and connect to MCP servers from various sources, inspect available tools, resources, and prompts, and execute commands non-interactively or interactively. The tool supports OAuth for various server types, making integration and automation seamless for developers working with MCP-compliant servers.

    • 391
    • MCP
    • wong2/mcp-cli
  • Notion MCP Server

    Notion MCP Server

    Enable LLMs to interact with Notion using the Model Context Protocol.

    Notion MCP Server allows large language models to interface with Notion workspaces through a Model Context Protocol server, supporting both data retrieval and editing capabilities. It includes experimental Markdown conversion to optimize token usage for more efficient communication with LLMs. The server can be configured with environment variables and controlled for specific tool access. Integration with applications like Claude Desktop is supported for seamless automation.

    • 834
    • MCP
    • suekou/mcp-notion-server
  • Taskade MCP

    Taskade MCP

    Tools and server for Model Context Protocol workflows and agent integration

    Taskade MCP provides an official server and tools to implement and interact with the Model Context Protocol (MCP), enabling seamless connectivity between Taskade’s API and MCP-compatible clients such as Claude or Cursor. It includes utilities for generating MCP tools from any OpenAPI schema and supports the deployment of autonomous agents, workflow automation, and real-time collaboration. The platform promotes extensibility by supporting integration via API, OpenAPI, and MCP, making it easier to build and connect agentic systems.

    • 90
    • MCP
    • taskade/mcp
  • box-mcp-server

    box-mcp-server

    Expose your Box files to AI with a Model Context Protocol server.

    box-mcp-server lets users connect their Box accounts to AI applications via the Model Context Protocol (MCP). It securely authenticates to Box with enterprise credentials or developer tokens and serves file search and reading capabilities to downstream clients. Designed for use with Claude Desktop and the MCP Inspector, it provides seamless integration of Box documents into AI workflows.

    • 10
    • MCP
    • hmk/box-mcp-server
  • Box MCP Server (Remote)

    Box MCP Server (Remote)

    Securely connect AI agents to Box content and Box AI using the Model Context Protocol.

    Box MCP Server (Remote) enables AI agent platforms to securely interact with Box data and AI-powered tools via the Model Context Protocol. It supports OAuth-based authentication and provides various capabilities, including user identification, file and folder operations, and access to Box AI tools. The service exposes an endpoint for easy integration by MCP-compatible clients while ensuring data never leaves the Box environment. It offers both admin console and developer console setup options and comprehensive documentation for connection.

    • 0
    • MCP
    • box/mcp-server-box-remote
  • Didn't find tool you were looking for?

    Be as detailed as possible for better results