Token导航 LogoToken导航TokenDH.com
M365 MCP Server logo
安全风控未说明官方级别未说明来源级核验

M365 MCP Server

MCP Server

一个生产就绪的MCP服务器,通过Azure AD/Entra ID认证安全访问Microsoft 365的电子邮件、SharePoint和OneDrive。

工具数

17

提示词数

0

GitHub Stars

0

资源数

0
安全认证TypeScript安全

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

SwamiRama

提供方

SwamiRama

最后核验

2026/5/17 20:19

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

m365 mcp服务器

生产准备就绪 MCP(模型上下文协议)服务器 对于Microsoft 365,通过使用OAuth 2.1+PKCE的Azure AD/Entra ID身份验证提供对电子邮件、SharePoint和OneDrive的安全访问。

特性

  • 电子邮件访问:列出文件夹、搜索邮件、读取电子邮件内容(包括共享邮箱)
  • 日历访问:列出日历、浏览事件、展开具有日期范围的定期事件
  • SharePoint/OneDrive:浏览网站、驱动器、文件夹和读取文件内容
  • 文档分析:从PDF、Word、Excel、PowerPoint、CSV和HTML文件中提取可读文本
  • OAuth 2.1+PKCE:通过Azure AD/Entra ID进行安全身份验证
  • 委托权限:用户仅访问其授权内容
  • 开放式WebUI兼容:与本机MCP或MCPO代理配合使用
  • 生产就绪:Docker支持、安全强化、结构化审计日志
  • 令牌撤销:符合RFC 7009的令牌吊销端点

快速开始

1.Azure AD安装程序

跟随 docs/entra-app-regulation.md 创建具有以下权限的Azure AD应用注册:

  • openid, offline_access (OIDC)
  • User.Read, Mail.Read, Mail.Read.Shared, Files.Read, Sites.Read.All, Calendars.Read (微软图形)

2.配置

创建一个 .env 文件:

# Azure AD / Entra ID (required)
AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret
AZURE_TENANT_ID=your-tenant-id

# Server
MCP_SERVER_PORT=3000
MCP_SERVER_BASE_URL=http://localhost:3000
SESSION_SECRET=$(openssl rand -hex 32)

# Optional
LOG_LEVEL=info
REDIS_URL=redis://localhost:6379

# OAuth signing keys (required in production)
# OAUTH_SIGNING_KEY_PRIVATE=
# OAUTH_SIGNING_KEY_PUBLIC=

3.本地运行

# Install dependencies
npm install

# Development mode
npm run dev

# Production build
npm run build
npm start

4.身份验证

  1. 打开 http://localhost:3000/auth/login 在浏览器中
  2. 使用您的Microsoft 365帐户登录
  3. 注意登录后返回的会话ID

Docker部署

基本

cd docker
docker-compose up -d m365-mcp-server redis

使用开放式WebUI

cd docker
docker-compose --profile with-webui up -d

使用MCPO代理

cd docker
docker-compose --profile with-mcpo up -d

打开WebUI集成

选项A:本地MCP(推荐)

  1. 在Open WebUI中,转到 管理员设置 > 工具
  2. 添加MCP服务器:
   {
     "url": "http://localhost:3000/mcp",
     "transport": "streamable-http"
   }
  1. 在系统提示时完成OAuth登录

选项B:通过MCPO代理

  1. 使用提供的配置启动MCPO:
   mcpo --config docker/mcpo-config.json --port 8000
  1. 在Open WebUI中,添加为OpenAPI工具:
   http://localhost:8000/openapi.json

MCP工具

电子邮件工具

工具说明
mail_list_messages使用可选筛选器列出邮件(支持共享邮箱)
mail_get_message使用正文(HTML)获取完整的邮件详细信息→文本)、CC/BCC和附件元数据
mail_list_folders列出邮件文件夹或子文件夹(支持共享邮箱)
mail_get_attachment读取和解析电子邮件附件(PDF、Word、Excel、PowerPoint、CSV、HTML→文本)。最大20MB

所有电子邮件工具都接受可选 mailbox 访问共享邮箱的参数(电子邮件地址或用户ID)。忽略使用您的个人邮箱。需要 Mail.Read.Shared 管理员同意的权限。

SharePoint/OneDrive工具

工具说明
sp_list_sites搜索并列出SharePoint网站
sp_list_drives列出驱动器(OneDrive/文档库)
sp_list_children列出文件夹内容
sp_get_file通过自动文档解析(PDF、Word、Excel、PowerPoint)获取文件内容→ 文本)。最大20MB

OneDrive工具

工具说明
od_my_drive获取个人OneDrive信息,包括驱动器ID和存储配额
od_list_files列出个人OneDrive中的文件和文件夹(根目录或子文件夹)
od_get_file通过自动文档解析(PDF、Word、Excel、PowerPoint)按item_id获取文件内容。最大20MB
od_search仅在个人OneDrive中搜索文件
od_recent列出最近访问的文件
od_shared_with_me列出他人与您共享的文件

日历工具

工具说明
cal_list_calendars列出所有包含元数据的日历
cal_list_events列出具有可选日期范围的事件(展开重复事件)
cal_get_event获取完整的活动详细信息,包括正文/描述

需要 Calendars.Read 权限(无需管理员同意)。提供 start_dateend_date 将重复事件扩展为单个事件。

API终点

端点方法描述
/healthGET健康检查
/auth/loginGET启动OAuth登录
/auth/callbackGETOAuth回调
/auth/logoutGET注销并撤销会话
/auth/statusGET检查身份验证状态
/revokePOST令牌撤销(RFC 7009)
/mcpPOSTMCP JSON-RPC端点
/mcpGETMCP SSE流端点
/mcpDELETE终止MCP会话

安全

  • OAuth 2.1+PKCE:所有身份验证流都需要
  • 仅授权权限:无应用程序专用访问,只读图形范围(Mail.Read.Shared 需要管理员同意)
  • 令牌加密:静态会话令牌的AES-256-GCM加密
  • PII补救措施:从日志中过滤的敏感数据(令牌、电子邮件、机密)
  • 结构化审计日志记录:使用相关ID记录的安全事件
  • 速率限制:一般每分钟100次,客户注册每小时5次
  • 安全标头:HSTS、CSP(无不安全内联)、权限策略、通过头盔的X-Frame-Options
  • 输入验证:所有Graph API资源ID的Zod架构+regex验证
  • DCR保护:重定向URI模式白名单、速率限制、审核日志记录
  • 生产执法:配置验证需要Redis、HTTPS、持久签名密钥

docs/security/streat-model.md 进行全面的安全分析。

建筑

┌─────────────────────────────────────────────────────────────┐
│                      Open WebUI / Client                     │
└─────────────────────────────┬───────────────────────────────┘
                              │ MCP Protocol (Streamable HTTP)
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    m365-mcp-server                           │
│  ┌─────────────┐  ┌─────────────┐  ┌──────────────────────┐ │
│  │ OAuth 2.1   │  │ MCP Handler │  │ Microsoft Graph      │ │
│  │ + PKCE      │  │ (JSON-RPC)  │  │ Client               │ │
│  └──────┬──────┘  └─────────────┘  └──────────┬───────────┘ │
└─────────│────────────────────────────────────│──────────────┘
          │                                    │
          ▼                                    ▼
┌──────────────────────┐            ┌─────────────────────────┐
│  Azure AD / Entra ID │            │   Microsoft Graph API   │
│  (Authorization)     │            │   (Data Access)         │
└──────────────────────┘            └─────────────────────────┘

环境变量

变量必填默认描述
AZURE_CLIENT_ID-Azure AD应用程序客户端ID
AZURE_CLIENT_SECRET-Azure AD应用程序客户端机密
AZURE_TENANT_ID-Azure AD租户ID
SESSION_SECRET-会话加密密钥(32+个字符)
MCP_SERVER_PORT3000服务器端口
MCP_SERVER_BASE_URLhttp://localhost:3000公共URL(生产中需要HTTPS)
REDIS_URLProd-Redis URL(生产中需要)
OAUTH_SIGNING_KEY_PRIVATEProd-RSA私钥PEM(生产中需要)
OAUTH_SIGNING_KEY_PUBLICProd-RSA公钥PEM(生产中需要)
OAUTH_ALLOWED_REDIRECT_PATTERNSDCR没有-逗号分隔的URI模式
LOG_LEVEL信息日志级别(跟踪/调试/信息/警告/错误)
NODE_ENV开发环境模式
FILE_PARSE_TIMEOUT_MS30000文档解析超时
FILE_PARSE_MAX_OUTPUT_KB500最大解析文本输出大小

发展

# Install dependencies
npm install

# Run tests
npm test

# Run tests with coverage
npm run test:coverage

# Lint
npm run lint

# Type check
npm run typecheck

# Build
npm run build

MCP注册表

此服务器已发布到MCP注册表。添加到您的MCP客户端:

{
  "mcpServers": {
    "m365": {
      "command": "npx",
      "args": ["-y", "@anthropic/m365-mcp-server"],
      "env": {
        "AZURE_CLIENT_ID": "your-client-id",
        "AZURE_CLIENT_SECRET": "your-client-secret",
        "AZURE_TENANT_ID": "your-tenant-id",
        "SESSION_SECRET": "your-session-secret"
      }
    }
  }
}

文档

支持的文档格式

sp_get_file 自动从这些格式中提取可读文本:

格式扩展名
PDF.pdfpdf解析
Word.docx, .doc猛犸象
Excel.xlsx, .xlsexceljs
PowerPoint.pptx, .ppt内置ZIP/XML
CSV.csv内置
HTML.html内置

其他二进制格式以base64返回。默认情况下,解析文本输出限制为500KB。

已知限制

  • 最大文件下载大小:20MB
  • 解析文本输出上限为500KB(可通过以下方式配置 FILE_PARSE_MAX_OUTPUT_KB)
  • SharePoint网站列表需要搜索查询(图表API限制)
  • SPA场景的刷新令牌限制为24小时
  • 无写操作(设计为只读)
  • 访问令牌(JWT)是无状态的,不能直接撤销(自然过期)

许可证

麻省理工学院

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 提交拉取请求

请确保所有测试都通过,并且代码遵循现有样式。

目录标签

目录标签

安全认证TypeScript安全M365集成本地部署文档解析电子邮件访问SharePoint访问

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

oauth

工具数量(toolCount,工具数)

17

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明oauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP