展示将Office AI Agent工具部署到Azure容器应用,实现远程Word文档自动化编辑的端到端指南。
OfficeAgent.NET 内置了一个 MCP server,可通过类型化、经过验证的变更计划,为 AI Agent 提供编辑真实 Word 文档的工具。只需几条命令,即可在本地启动:
dotnet tool install --global OfficeAgent.Mcp
officeagent-mcp --stdio
如果你想将它与 Claude Code 或 Codex 等在本地运行的 Agent 配合使用,这种方式非常合适。但仅在本地运行并不总能满足需求。以下场景需要进行托管:
托管式 Agent。Copilot Studio 和 Microsoft 365 Copilot 只能通过公共 HTTPS endpoint,以 streamable HTTP 的方式使用 MCP。
无人值守自动化。按计划或事件触发运行的文档工作流,需要将 server 部署在笔记本电脑之外的某个地方持续运行。
团队共享 server。无需让每位用户都在本地配置中保存 SharePoint 凭据,只需由一个托管实例统一保存凭据,客户端通过 URL 访问即可。
本文将介绍如何把这个 endpoint 部署到 Azure Container Apps、连接到 SharePoint 文档存储,并使用内置身份验证 Easy Auth 对其进行保护。
开始部署前,需要准备以下内容:
ghcr.io/ilia-sokolov/officeagent-mcp:latest
你可以直接使用它。如果组织策略要求使用自己的 registry,请通过仓库中的 Dockerfile 构建 image,将其推送到你的 registry,然后替换这里的引用即可,其余步骤完全相同。
Tenant ID。可以在 Entra admin center 的 Overview 页面找到。
用于访问 SharePoint 的 app registration。OfficeAgent 通过 provider 工作:你可以定义允许 Agent 访问哪些文档存储。它内置了 filesystem provider 和 SharePoint provider;对于托管式 server,SharePoint 是最佳选择。Server 需要拥有自己的身份,才能访问这些文档:
在 Entra admin center 中打开 App registrations,并创建一个新的 registration。为其命名(例如 officeagent-sharepoint),保留默认设置,然后完成注册。复制 Application (client) ID。
在该应用的 Certificates & secrets 页面中创建一个新的 client secret。请立即复制它的 Value,因为该值只会显示一次。
在 API permissions 下添加权限:选择 Microsoft Graph,然后选择 Application permissions。添加 Sites.Selected(最小权限原则,应用只能访问你明确授权的站点)或 Sites.ReadWrite.All(配置更简单,但可以访问 tenant 中的所有站点)。随后授予 admin consent。
如果选择了 Sites.Selected,请向该应用授予特定站点的 Write 权限。例如,可以使用 PnP PowerShell:
Grant-PnPAzureADAppSitePermission `
-AppId "<app-client-id>" `
-DisplayName "<app-name>" `
-Site "<site-url>" `
-Permissions Write
在 Azure portal 中创建一个新的 Container App 资源。选择 resource group,为应用命名(例如 officeagent-mcp),并让 Azure 创建一个新的 Container Apps environment。
在 Container 选项卡中,取消勾选 Use quickstart image。为 container 命名(例如 officeagent-mcp),将 Image source 设置为 Docker Hub or other registries,将 Image type 设置为 Public,将 Registry login server 设置为 ghcr.io,并将 Image and tag 设置为 ilia-sokolov/officeagent-mcp:latest。
Environment variables 表格位于同一选项卡的底部。添加下表中的六个变量。
这些值用于配置 server 的 SharePoint 连接:
本文配置的是 appOnly:无论调用方是谁,server 都以同一个应用身份执行操作。该 provider 还支持 on-behalf-of 流程,此时 server 会以已登录用户的身份执行操作,并针对每位用户分别应用 SharePoint 权限。如果你需要这种方式,请参阅部署指南。
在 Ingress 选项卡中,启用 ingress,允许来自任意位置的流量,并将 target port 设置为 8080。
创建应用。要验证部署结果,请打开 https://<app-url>/healthz,其中 <app-url> 是所创建 Container App 的 URL。它应该返回 {"status":"ok",...}。
现在 endpoint 已经可以访问,但任何人都能调用它。接下来通过启用身份验证来解决这个问题。
在刚刚创建的 Container App 中打开 Authentication 页面(位于 Security 下),然后点击 Add identity provider。选择 Microsoft。
让表单自动创建 app registration。将 App registration type 保持为 Create new app registration,并为其命名(例如 officeagent-easyauth)。在 Additional checks 下,将 Client application requirement 设置为 Allow requests from any application。该向导会一次性完成 registration、secret 和相关连接配置的创建。
将 Restrict access 设置为 Require authentication,并将 Unauthenticated requests 设置为 HTTP 401 Unauthorized。这是一个 API,而不是网站;登录重定向只会让 MCP client 感到困惑。
保存设置。此时访问 https://<app-url>/healthz 会返回 401。Client 必须发送 Easy Auth 应用对应的 Entra bearer token。可以使用以下脚本进行验证:
TOKEN=$(az account get-access-token --resource api://<easyauth-client-id> --query accessToken -o tsv)
curl -H "Authorization: Bearer $TOKEN" https://<app-url>/healthz
现在,你可以在自己的 client 中使用这个 MCP server 了。下一篇文章中,我会介绍如何将它连接到 Copilot Studio Agent。
如果本文对你有帮助,欢迎在评论区告诉我。在 GitHub 上点一个 star,也能帮助更多开发者发现这个项目。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。