Microsoft 365 MCP服务器

一个通过Graph API与Microsoft 365和Microsoft Office服务交互的模型上下文协议(MCP)服务器,提供认证、多服务集成和访问控制等功能。

  • by El-Paulo
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 el-paulo/ms-365-mcp-server

使用说明

ms-365-mcp服务器

微软365 MCP服务器

用于通过Graph与Microsoft 365和Microsoft Office服务交互的模型上下文协议(MCP)服务器 API

先决条件

  • Node.js>=14

特性

  • 通过Microsoft身份验证库(SCL)进行身份验证
  • 全面的Microsoft 365服务集成
  • 只读模式支持安全操作
  • 用于精细访问控制的工具过滤

支持的服务和工具

电子邮件(Outlook)
列出邮件消息、列出邮件文件夹、列出邮件夹消息、获取邮件消息、发送邮件、, 删除邮件

日历
列出日历、列出日历事件、获取日历事件、获得日历视图、创建日历事件, 更新日历事件、删除日历事件

OneDrive和SharePoint文件
列出驱动器,获取驱动器根项目,列出文件夹文件,下载onedrive文件内容,上传文件内容, 上传新文件,删除一个驱动器文件

Excel操作
列出excel工作表,获取excel范围,创建excel图表,格式化excel范围,对excel范围进行排序

OneNote
列出onenote笔记本,列出onenotes笔记本分区,列出oneote分区页面,获取onenote页面内容, 创建onenote页面

待办任务
列出待办任务列表,列出待办任务,获取待办任务,创建待办任务,更新待办任务,删除待办任务

规划师
列出计划器任务,获取计划器计划,列出计划任务,获取规划器任务,创建规划器任务

联系人
列出outlook联系人,获取outlook联系人,创建outlook联系人,更新outlook联系人, 删除outlook联系人

团队与聊天 (仅限工作/学校账户)
列出聊天记录,获取聊天记录,列出聊天消息,获取聊天消息,发送聊天消息,列出聊天信息回复, 回复聊天消息、列出加入的团队、获取团队、列出团队频道、获取团队频道、列出频道消息, 获取频道消息、发送频道消息、列出团队成员

SharePoint网站 (仅限工作/学校账户)
搜索sharepoint站点,获取sharepoint站点,按路径获取sharepoint站点、列出sharepoint站点驱动器, 按id获取sharepoint站点驱动器,列出sharepoint站点项目,获取sharepoint网站项目,列出sharepoint站点列表, 获取sharepoint站点列表,列出sharepoint站点列表项,获取sharepoint站点列项目, 获取sharepoint网站增量

工作范围问题

如果您在访问工作/学校功能(团队、SharePoint等)时遇到问题,您应该通过 --force-work-scopes 旗!

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

虽然服务器应该在需要工作范围时尝试强制重新登录,但显式传递标记更安全 并从一开始就确保适当的范围权限。

用户档案
获取当前用户

快速入门示例

在Claude Desktop中测试登录:

例子

整合

克劳德桌面

要将此MCP服务器添加到Claude Desktop,请执行以下操作:

在“设置”>“开发人员”下编辑配置文件:

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

克劳德代码CLI

claude mcp add ms365 -- npx -y @softeria/ms-365-mcp-server

对于支持MCP的其他接口,请参阅其各自的文档以了解正确的 整合方法。

认证

⚠️ 在使用工具之前,您必须进行身份验证。

服务器支持三种身份验证方法:

1.设备代码流(默认)

通过设备代码进行交互式身份验证:

  • MCP客户端登录:
    • 打电话给 login 工具(自动检查现有令牌)
    • 如果需要,获取URL+代码,在浏览器中访问
    • 使用 verify-login 工具确认
  • CLI登录:
    npx @softeria/ms-365-mcp-server --login
    
    按照终端中的URL和代码提示进行操作。

令牌安全地缓存在您的操作系统凭据存储中(回退到文件)。

2.OAuth授权代码流(仅限HTTP模式)

跑步时 --http,服务器 需要 OAuth身份验证:

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

此模式:

  • 向MCP客户端宣传OAuth功能
  • 在以下位置提供OAuth端点 /auth/* (授权、令牌、元数据)
  • 需要 Authorization: Bearer <token> 对于所有MCP请求
  • 使用Microsoft Graph API验证令牌
  • 使伤残 默认情况下登录/注销工具(使用 --enable-auth-tools 使他们)

MCP客户端在看到广告功能时将自动处理OAuth流。

为OAuth测试设置Azure AD

要使用OAuth模式和自定义Azure凭据(建议用于生产),您需要设置Azure AD应用程序 注册:

  1. 创建Azure AD应用程序注册:

    • 首选 Azure门户
    • 导航到Azure Active Directory→ 应用程序注册→ 新注册
    • 集合名称:“MS365 MCP服务器”
  2. 配置重定向URI: 添加这些重定向URI,以便使用MCP Inspector进行测试:

    • http://localhost:6274/oauth/callback
    • http://localhost:6274/oauth/callback/debug
    • http://localhost:3000/callback (可选,用于服务器回调)
  3. 获取凭据:

    • 复制 应用程序(客户端)ID 从概述页面
    • 转到证书和机密→ 新客户机密→ 复制机密值
  4. 配置环境变量: 创建一个 .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
    

配置这些后,服务器将使用您的自定义Azure应用程序,而不是内置应用程序。

3.自带代币(BYOT)

如果您将ms-365-mcp-server作为外部管理Microsoft OAuth令牌的较大系统的一部分运行,则可以 直接向此MCP服务器提供访问令牌:

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

这种方法:

  • 绕过交互式身份验证流程
  • 将预先存在的OAuth令牌用于Microsoft Graph API请求
  • 不处理令牌刷新(令牌生命周期管理由您负责)

备注:HTTP模式需要身份验证。对于未经身份验证的测试,使用设备代码流的stdio模式。

身份验证工具:在HTTP模式下,默认情况下禁用登录/注销工具,因为OAuth处理身份验证。 使用 --enable-auth-tools 如果你需要的话。

CLI选项

直接从命令行运行ms-365-mcp-server时,可以使用以下选项:

--login           Login using device code flow
--logout          Log out and clear saved credentials
--verify-login    Verify login without starting the server
--force-work-scopes Force inclusion of work account scopes during login (includes Teams, SharePoint, etc.)

服务器选项

当作为MCP服务器运行时,可以使用以下选项:

-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)

环境变量:

  • READ_ONLY=true|1:替代--只读标志
  • ENABLED_TOOLS:使用正则表达式模式过滤工具(替代启用的工具标志)
  • MS365_MCP_FORCE_WORK_SCOPES=true|1:强制包含工作帐户范围(替代--Force工作范围标志)
  • LOG_LEVEL:设置日志记录级别(默认值:“info”)
  • SILENT=true|1:禁用控制台输出
  • MS365_MCP_CLIENT_ID:自定义Azure应用程序客户端ID(默认为内置应用程序)
  • MS365_MCP_TENANT_ID:自定义租户ID(多租户默认为“公共”)
  • MS365_MCP_OAUTH_TOKEN:Microsoft Graph API的预存在OAuth令牌(BYOT方法)

支持

如果您遇到问题或需要帮助:

  • 创建一个 问题
  • 开始a 讨论
  • 电子邮件:eirikb@eirikb.no
  • 不一致:https://discord.gg/WvGVNScrAZ或@eirikb

许可证

麻省 理工© 2025 软件