Softeria/ms-365-mcp-server
A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Microsoft Office services through the Graph API
这是什么
ms‑365‑mcp‑server 是一个 Node.js 服务器,为 Microsoft 365 实现了 模型上下文协议 (MCP)。它与 Microsoft Graph API 通信,并将 Graph 的功能作为一组“工具”暴露出来,供基于 LLM 的助手(Claude Desktop、Open WebUI 等)调用。实际上,你可以通过 npx @softeria/ms-365-mcp-server 运行该包,服务器会将简单的 JSON(或实验性的 TOON)请求转换为 Graph 调用,然后以相同的轻量格式返回 Graph 响应。
谁可能使用它
- 基于 LLM 的助手,需要读取或操作用户的 Outlook 邮件、日历、OneDrive 文件、Teams 聊天、SharePoint 网站等。
- 企业,希望向 AI 代理暴露受控的 Microsoft 365 功能子集,同时限制授予的 OAuth 范围。
- 开发人员,构建自定义代理或机器人,需要稳定、声明式的 Graph 接口,而无需自己编写底层 HTTP 代码。
核心功能(如 README 中所述)
| 功能 | 作用 |
|---|---|
| 身份验证 | 使用 Microsoft 身份验证库 (MSAL) 获取 OAuth 令牌。范围根据启用的工具自动推导,但可以通过 --allowed‑scopes 缩小或通过 --extra‑scopes 扩大。 |
| 工具面 | 超过 300 个工具,每个工具与 Graph 端点一一对应。工具定义在 src/endpoints.json 中。个人账户工具(邮件、日历、OneDrive 等)默认开启;组织模式工具(Teams、SharePoint、用户管理等)通过 --org‑mode 启用。 |
| 预设与动态发现 | 预设(例如 mail)和基于正则表达式的 --enabled‑tools 允许你缩小工具集,减少令牌使用并提高隐私。 |
| 只读模式 | 阻止任何写操作,适用于安全的沙盒部署。 |
| 输出格式 | 默认 JSON;实验性的 TOON(面向令牌的对象表示法)可将统一列表数据的令牌数量减少 30‑60%。 |
| 范围过滤 | --allowed‑scopes(或 MS365_MCP_ALLOWED_SCOPES)作为白名单;所需 Graph 范围未被覆盖的工具将被隐藏。 |
| 用户字段过滤 | --user‑fields 限制返回哪些用户配置文件属性,提供额外的数据最小化层。 |
| 代理支持 | 设置 MS365_MCP_GRAPH_BASE_URL 以通过自定义代理路由 Graph 流量。 |
| 部署选项 | 通过 CLI 本地运行,作为 HTTP 服务器(--http),在 Docker 中运行,或通过反向代理(--public‑url)运行。支持 OAuth 的动态客户端注册。 |
| 集成示例 | 为 Claude Desktop、Claude Code CLI 和 Open WebUI 提供详细片段,展示如何将 MCP 服务器添加为工具源。 |
工作原理(高级流程)
- 启动服务器 –
npx @softeria/ms-365-mcp-server(可选地带有--org-mode、--http、--toon等标志)。 - 身份验证 – MSAL 打开浏览器(或使用 OBO)获取启用工具所需范围的访问令牌。
- 工具请求 – LLM 客户端发送请求,指定工具名称和参数(例如
list-mail-messages)。 - 服务器转换 – 服务器在
endpoints.json中查找对应的 Graph 端点,构建 HTTP 请求,应用任何$select/$filter规则(包括用户字段限制),并将其转发到 Microsoft Graph。 - 响应 – Graph 的 JSON 可选地投影/过滤,然后以 JSON 或 TOON 格式返回给客户端。
何时可能不需要它
- 如果你只需要几个 Graph 调用,直接使用 SDK 编写可能更简单。
- 需要超出预捆绑工具的完整 Graph SDK 功能(批处理、增量查询等)的项目。
- 无法安装 Node 20 或运行单独 MCP 进程的环境。
快速入门清单
- 安装 Node 20+。
- 运行
npx @softeria/ms-365-mcp-server(添加--org-mode以启用工作或学校功能)。 - 按照 Claude Desktop 或 Open WebUI 集成步骤,将助手指向
http://localhost:3000/mcp(或 Docker 暴露的端口)。 - 使用
--list-permissions查看将请求哪些 Graph 范围,并在需要时使用--allowed-scopes进行调整。 - (可选)使用
--toon启用 TOON 以获得令牌高效的输出。
以上所有信息均直接取自仓库的 README;没有推断任何额外功能。
相关
- 项目
- 项目
- Dispatch
- 项目
- 项目