【免费下载链接】ms-365-mcp-serverA Model Context Protocol (MCP) server for interacting with Microsoft 365 and Microsoft Office services through the Graph API项目地址https://gitcode.com/gh_mirrors/ms/ms-365-mcp-server点击查看免费下载ms-365-mcp-server是一个让 AI 代理通过 Microsoft Graph API 操作 Microsoft 365 的 MCPModel Context Protocol服务器可驱动邮件、日历、OneDrive、Teams、SharePoint 等 300 工具。本文面向新手与运维讲解如何在无头环境服务器、容器、CI中用 OBOOn-Behalf-Of委托认证让 AI 代理代表你安全地读写 Office 数据且服务器不保存任何用户令牌。太长不看目标方案关键命令 / 配置无头环境代表用户办公--obo--httpnpx softeria/ms-365-mcp-server --http 3000 --org-mode --obo必须项机密客户端密钥环境变量MS365_MCP_CLIENT_SECRET多用户共享无状态每请求独立身份用户 Bearer Token 随请求携带权限收紧管理员同意 工具过滤--read-only、--allowed-scopes、--preset 一句话理解 OBO用户在浏览器登录一次AI 代理之后每次调用都“代表你”用你的身份去访问 Microsoft 365服务器本身不留存令牌。无头环境为什么需要 OBO 委托认证标准登录设备码 / 浏览器授权都假设“有人盯着屏幕”。但在一台服务器或容器里没有浏览器无法弹出登录窗口无法交互式输入设备码你希望服务 7×24 运行而不是一小时后就因令牌过期而失效。OBOOn-Behalf-Of代表用户正是为这种场景设计的委托模式。它的价值在于无状态服务器不为每个用户保存令牌而是“即来即换、用完即弃”——这正是 docs/deployment.md 中“Production Deployment”强调的核心架构stateless, no token store。对比一下无头环境下有三种身份方案OBO 是多用户部署的首选方案适用场景服务器是否存令牌OBO 委托认证推荐多用户、长期运行的 AI 代理❌ 否每请求现换BYOT自带令牌MS365_MCP_OAUTH_TOKEN外部系统已管理令牌❌ 否本地 MSAL 登录 缓存命令单账号固定身份✅ 是可接外部存储OBO 委托认证工作原理一次登录代理长期工作整个委托链条分为三步身份始终“属于用户”服务器只是中间人。MCP 客户端Claude Desktop / claude.ai / Open WebUI │ ① OAuth 授权码 PKCE用户在浏览器登录一次 ▼ ms-365-mcp-server --http --obo 无状态不存令牌 │ ② 收到 /mcp 请求携带 Bearer Token ▼ OBO 令牌交换 acquireTokenOnBehalfOf │ ③ 换取 Graph 令牌graph.microsoft.com/.default ▼ Microsoft Graph API以用户身份读写邮件/日历/文件拆开看这三步在源码里的落点授权只请求“访问本应用”。OBO 模式下/authorize只请求clientId/access_as_user外加User.Read、offline_access与--extra-scopes因此工具派生的 Graph 权限根本不会出现在授权同意页见 src/server.ts#L858-L886。令牌交换。收到/mcp请求后服务器调用 MSAL 的acquireTokenOnBehalfOf把用户令牌换成本应用的 Graph 令牌核心实现在 src/obo-client.ts#L31-L48请求级注入发生在 src/server.ts#L1083-L1089。以用户身份访问 Graph。换得的令牌通过AsyncLocalStorage注入每个请求上下文src/request-context.ts代理的每次工具调用都继承“你的身份、你的权限、你的数据边界”。 关键点最终能干什么取决于租户已为你授予的管理员同意权限而不是代理“想要”什么——这是 OBO 天然的安全边界。无头环境 OBO 部署三步走第一步创建 Azure AD 应用注册机密客户端OBO 必须使用机密客户端confidential client因此一定要创建客户端密钥新建应用注册支持账户类型选“仅限本组织目录中的账户”单租户。重定向 URI平台类型 Web填 MCP 客户端的回调地址例如 Claude 的https://claude.ai/api/mcp/auth_callback。⚠️ 常见坑填错会报AADSTS50011redirect URI mismatch详见 docs/deployment.md。API 权限添加 Microsoft Graph 委托权限用下面的命令打印你当前配置需要的精确清单npx softeria/ms-365-mcp-server --org-mode --list-permissions授予管理员同意跳过每个用户的重复授权az ad app permission admin-consent --id your-app-client-id在“证书和机密”中创建客户端密钥并记下clientId、tenantId、clientSecret。第二步配置环境变量并启动服务把凭据交给服务器生产环境建议改用 Azure Key Vault见下节。最小启动命令MS365_MCP_CLIENT_IDyour-client-id \ MS365_MCP_TENANT_IDyour-tenant-id \ MS365_MCP_CLIENT_SECRETyour-secret \ npx softeria/ms-365-mcp-server --http 3000 --org-mode --obo用 Docker 运行官方镜像非 root 用户docker run -p 3000:3000 \ -e MS365_MCP_CLIENT_IDyour-client-id \ -e MS365_MCP_TENANT_IDyour-tenant-id \ -e MS365_MCP_CLIENT_SECRETyour-secret \ ghcr.io/softeria/ms-365-mcp-server:latest \ --http 3000 --org-mode --obo⚠️ 启动自检--obo若缺少--http或缺少MS365_MCP_CLIENT_SECRET会直接报错退出--obo requires --http、--obo requires MS365_MCP_CLIENT_SECRET校验逻辑见 src/server.ts#L422-L438。这些“快速失败”能帮你少踩坑。第三步连接 MCP 客户端客户端指向你的 HTTP 端点首次使用时自动发现 OAuth 端点并打开浏览器完成登录{ mcpServers: { ms365: { type: streamable-http, url: https://mcp.example.com/mcp } } }Claude Code 则可用claude mcp add ms365 --transport http https://mcp.example.com/mcp若服务器位于反向代理之后务必设置--public-url https://mcp.example.com确保返回给浏览器的授权 URL 可从外部访问。关键启动参数与权限配置参数 / 环境变量作用何时使用--obo启用 OBO 令牌交换无头、多用户部署必配MS365_MCP_CLIENT_SECRET机密客户端密钥OBO 强制要求--extra-scopes scopes向令牌请求追加 Graph 权限默认工具不覆盖、又确需的能力--allowed-scopes scopes收窄暴露的工具面不改变 OBO企业按权限边界做工具裁剪--read-only禁用全部写操作只读审计、降低风险--preset mail/--preset teams按应用精简工具减少上下文与令牌消耗几个新手容易混淆的点--extra-scopes才是“加权限”的正道。OBO 下用户只同意本应用自身作用域因此想额外让代理读邮件就在授权时加上例如--extra-scopes Mail.Read让用户在登录时同意见 test/obo-authorize-extra-scopes.test.ts。--allowed-scopes不会“覆盖”OBO它只收窄工具面OAuth 元数据与登录流程仍按 OBO 规则运行说明见 README.md。个人微软账户consumers需要显式作用域才能兑换令牌服务器已自动在/token携带clientId/access_as_user offline_access以规避AADSTS70011实现见 src/lib/microsoft-auth.ts#L343-L350。生产环境安全最佳实践针对无头、多租户部署建议叠加以下护栏均见 docs/deployment.md 的“Security Considerations”密钥进 Key VaultMS365_MCP_KEYVAULT_URLhttps://your-keyvault.vault.azure.net配合托管身份读取避免密钥出现在环境变量。完整的一键部署模板见 examples/azure-container-apps/。无状态优先OBO 路径不写入任何 MSAL 令牌缓存天然规避令牌泄露风险。只读 工具过滤--read-only叠加--enabled-tools或--preset把代理能做的事缩到最小。审计日志默认开启结构化审计记录“谁在何时访问了什么”满足合规留痕需求。重定向 URI 白名单共享/生产部署建议用MS365_MCP_ALLOWED_REDIRECT_URIS显式收敛防止开放重定向。常见问题快速排查现象可能原因处理启动即报错退出--obo缺--http或缺MS365_MCP_CLIENT_SECRET补齐 HTTP 模式与机密客户端密钥401 on /mcpclientId/tenantId配置错误核对应用注册 ID 与租户 IDredirect_uri mismatch重定向 URI 与应用注册不一致在应用注册中登记客户端回调地址Graph 返回403缺作用域 / 未授予管理员同意重跑--list-permissions并补授同意AADSTS70011个人账户兑换缺scope服务器已自动携带作用域确认租户为预期值提示OBO 令牌交换失败时日志会打印OBO token exchange failed来自 src/obo-client.ts这是定位“换令牌”这一步的最直接线索。小结无头环境让 AI 代理长期为你工作的关键就是选对身份模式用--obo的 OBO 委托认证服务器无状态、令牌即来即换代理永远以“你”的身份和“你的权限”访问 Microsoft 365。掌握“应用注册 → 启动--http --obo→ 连接客户端”三步再按需叠加只读、工具过滤与 Key Vault就能安全地把 ms-365-mcp-server 部署成 7×24 的办公代理。延伸阅读docs/deployment.md生产部署全景、src/obo-client.tsOBO 客户端、examples/azure-container-apps/一键部署示例。赞分享【免费下载链接】ms-365-mcp-serverA Model Context Protocol (MCP) server for interacting with Microsoft 365 and Microsoft Office services through the Graph API项目地址https://gitcode.com/gh_mirrors/ms/ms-365-mcp-server点击查看免费下载相关推荐Apereo CAS 集成 HiOrg Server 委托认证OAuth2/OpenID Connect完整指南Apereo CAS 集成 HiOrg Server 委托认证OAuth2/OpenID Connect完整指南 本文聚焦于 Apereo CAS 如何作为后端认证鉴权单点登录身份认证Browser-Use MCP Server 完整指南实现浏览器环境下的无缝编程协作Browser Use MCP Server 完整指南实现浏览器环境下的无缝编程协作 快速问答什么是Browser Use MCP Server Q它能Gemini MCP Server离线工作模式无网络环境下的AI协作方案Gemini MCP Server离线工作模式无网络环境下的AI协作方案 你是否曾在网络中断时被迫中断AI开发工作是否需要在涉密环境中使用AI工具却受限于网后端AI 应用大模型LLM 网关MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考