Use Claude for M365 with third-party platforms changedoffice-agents/third-party-platforms
Nearest release: v2.1.319, published 2 hours after upstream edited the page. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.
Upstream edited this page at 5 Nov 2026 22:55 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 5 Nov 2026 23:07 UTC.
Upstream edited
Recorded here
Lines+85added
Lines−41removed
From line
207
where the diff opens
First seen
14 Aug 2026
this site's first read of the page
Recorded edits15to this page, all time
### Claude account sign-in uses no redirect
The whole hunk
from line 207, old and new numbered
/
from line 207
207207| `/claude-for-msft-365-install:setup` | Interactive wizard: provisions cloud resources, handles admin consent, writes manifest. |
208208| `/claude-for-msft-365-install:manifest` | Generates a customized add-in manifest XML. |
209209| `/claude-for-msft-365-install:consent` | Generates the Azure admin-consent URL for the add-in's app registration. |
210| `/claude-for-msft-365-install:update-user-attrs` | Writes per-user configuration via Microsoft Graph extension attributes. |
210| `/claude-for-msft-365-install:update-user-attrs` | Writes per-user connection values via Microsoft Graph extension attributes. |
211211| `/claude-for-msft-365-install:bootstrap` | Builds a bootstrap endpoint for per-user MCP servers, skills, and dynamic config. |
212212| `/claude-for-msft-365-install:debug` | Diagnoses deployment issues: stale config after a manifest update, connection failures, an add-in that does not appear, sign-in or admin-consent loops, and reading the add-in's error paste. |
213213| `/claude-for-msft-365-install:export-data` | Makes a read-only copy of a user's chat history, skills, connector registrations, and settings before a device is rebuilt. See [Data storage and retention](https://claude.com/docs/office-agents/data-storage.md). |
from line 232
232232
233233### Per-user configuration
234234
235If values vary per user, such as different gateway tokens or AWS roles
236for different teams, run `/claude-for-msft-365-install:update-user-attrs`
237with per-user keys after initial setup to write configuration via
238Microsoft Graph extension attributes.
235If gateway, Bedrock, or Vertex AI connection values vary per user, such
236as different gateway tokens or AWS roles for different teams, run
237`/claude-for-msft-365-install:update-user-attrs` after initial setup to
238write them as Microsoft Graph extension attributes. Set `entra_sso=1` in
239the manifest so that the add-in reads them at sign-in, where they arrive
240as claims in the user's ID token.
239241
240At load, the add-in resolves each configuration key from three sources in
241order of precedence: a bootstrap endpoint, Microsoft Entra ID extension
242attributes, then manifest parameters. Per-user attributes override the
242By default, the add-in signs in through
243[Anthropic's Microsoft Entra application](#identify-anthropic%E2%80%99s-microsoft-entra-application),
244which passes only these eight keys to the add-in:
245
246* **LLM gateway**: `gateway_url` and `gateway_token`
247* **Bedrock direct**: `aws_role_arn` and `aws_region`
248* **Vertex AI direct**: `gcp_project_id`, `gcp_region`,
249 `google_client_id`, and `google_client_secret`
250
251Deliver every other key, such as the Foundry direct keys or
252`disabled_features`, through the manifest. To vary one per user, return
253it from a bootstrap endpoint instead.
254
255If the add-in uses
256[your own Entra app registration](https://claude.com/docs/office-agents/outlook.md#use-your-own-entra-app-instead)
257through `graph_client_id`, you choose which keys it receives, and
258`entra_sso=1` is still required. Configure each one on that application
259as a directory extension attribute with an optional ID token claim, which
260reaches the add-in as `extn.<key>`, such as `extn.otlp_endpoint`. An
261attribute value holds at most 256 characters, so deliver a longer value,
262such as most `access_policies` values, through the manifest or a
263bootstrap endpoint.
264
265With either application, neither a claim nor a bootstrap response can set
266`entra_sso`, `graph_client_id`, `graph_cloud`, `entra_scope`, or
267`gateway_auth_source`, so keep them in the manifest. With Anthropic's
268application, `bootstrap_url` stays in the manifest too.
269
270At load, the add-in resolves configuration from three sources in order of
271precedence: a bootstrap endpoint, Microsoft Entra ID extension
272attributes, then manifest parameters. Per-user values override the
243273manifest defaults, so one deployed manifest can serve teams with
244274different settings.
245275
246
276
247277
248Configuration resolution at add-in load: bootstrap, Entra ID attributes, then manifest parameters.
278Configuration resolution at add-in load: bootstrap, Entra ID attributes, then manifest parameters. With Anthropic's Microsoft Entra application, Entra ID attributes carry only eight connection keys, not every configuration key.
249279
250280### Keep credentials out of the manifest URL query string
251281
from line 301
271301### Admin feature controls
272302
273303The `disabled_features` configuration key turns off individual add-in
274features for your users. It travels over the same three channels as every
275other key: manifest parameters (comma-separated), Entra ID extension
276attributes (comma-separated), or a bootstrap endpoint (JSON array), so it
277can apply org-wide from one manifest or vary per user.
304features for your users. Set it as a comma-separated manifest parameter to
305apply one list org-wide, or return it from a bootstrap endpoint as a JSON
306array to vary it per user.
278307
279308| Slug | Effect |
280309| - | - |
from line 727
698727connection until they log out and sign in again, as described in
699728[Change or update your gateway connection](#change-or-update-your-gateway-connection).
700729Until the setup wizard accepts this key, add `azure_base_url` to the
701generated manifest URL by hand, or deliver it per user through Microsoft
702Entra ID extension attributes or a bootstrap endpoint.
730generated manifest URL by hand, or deliver it per user through a bootstrap
731endpoint.
703732
704733The following manifest parameters configure this path.
705734
from line 768
739768connection until they log out and sign in again, as described in
740769[Change or update your gateway connection](#change-or-update-your-gateway-connection).
741770Until the setup wizard accepts this key, add `gcp_base_url` to the
742generated manifest URL by hand, or deliver it per user through Microsoft
743Entra ID extension attributes or a bootstrap endpoint.
771generated manifest URL by hand, or deliver it per user through a bootstrap
772endpoint.
744773
745774| Parameter | Value |
746775| - | - |
from line 1017
9881017
9891018## Why sign-in redirects through pivot.claude.ai
9901019
991During Google sign-in for Vertex AI, Anthropic sign-in, or Microsoft admin
992consent, your identity provider redirects the browser to
993`https://pivot.claude.ai/auth/callback`. Security reviewers sometimes ask
994whether this means access tokens for your cloud provider or mailbox pass
1020During Google sign-in for Vertex AI, MCP connector authorization, or
1021Microsoft admin consent, your identity provider redirects the browser to a
1022page on `pivot.claude.ai`. Security reviewers sometimes ask whether this
1023means access tokens for your cloud provider, connector, or mailbox pass
9951024through Anthropic's servers. They do not. This section explains what the
9961025redirect carries in each flow and why the page cannot obtain a token.
1026[Claude account sign-in](#claude-account-sign-in-uses-no-redirect) involves
1027no redirect.
9971028
9981029### OAuth authorization-code redirects
9991030
1000Google sign-in for Vertex AI and Anthropic sign-in use the OAuth 2.0
1001authorization-code grant and redirect to `pivot.claude.ai/auth/callback`.
1002MCP connector authorization uses the same grant with a dedicated
1031Google sign-in for Vertex AI uses the OAuth 2.0 authorization-code grant
1032and redirects to `pivot.claude.ai/auth/callback`. MCP connector
1033authorization uses the same grant with a dedicated
10031034`pivot.claude.ai/auth/gateway-callback` redirect. In each case the URL
10041035contains two query parameters:
10051036
from line 1046
10151046The token endpoint requires an additional secret that only the add-in
10161047running on your machine holds:
10171048
1018* **Anthropic sign-in and MCP connector authorization**: a Proof Key for
1019 Code Exchange (PKCE) verifier. The add-in generates a random verifier
1020 locally, sends only its SHA-256 hash to the identity provider when
1021 sign-in starts, and keeps the verifier in browser session storage. The
1022 token endpoint rejects any exchange that does not present the original
1023 verifier.
1049* **MCP connector authorization**: a Proof Key for Code Exchange (PKCE)
1050 verifier. The add-in generates a random verifier locally, sends only its
1051 SHA-256 hash to the identity provider when sign-in starts, and keeps the
1052 verifier in browser session storage. The token endpoint rejects any
1053 exchange that does not present the original verifier.
10241054* **Google sign-in for Vertex AI**: the `client_secret` belonging to the
10251055 Google OAuth client your organization created during setup. This value
10261056 is provisioned into the add-in's configuration on each user's machine
from line 1063
10331063a sign-in the attacker initiated.
10341064
10351065After the add-in exchanges the code, the resulting access and refresh
1036tokens are held in the browser's local storage inside the Office add-in
1037sandbox. The add-in presents the access token only to the inference or
1038MCP-proxy endpoint for your sign-in path, and presents the refresh token
1039only to the OAuth token endpoint. Each of these endpoints appears in the
1066tokens are held in browser storage inside the Office add-in sandbox. The
1067add-in presents the access token only to the inference endpoint or MCP
1068server it was issued for, and presents the refresh token only to the OAuth
1069token endpoint. Each of these endpoints appears in the
10401070[Network allowlist](#network-allowlist). These tokens never reach
10411071`pivot.claude.ai`.
10421072
from line 1079
10491079the callback page at `pivot.claude.ai` bridges the two contexts by
10501080displaying the code for you to paste back into the add-in.
10511081
1082### Claude account sign-in uses no redirect
1083
1084Signing in with a Claude account uses the OAuth 2.0 device authorization
1085grant, RFC 8628, instead of a redirect. The add-in requests a one-time
1086sign-in code from `claude.ai`, shows it in the task pane, and sends you to
1087`claude.ai` in your browser. It waits while you approve the sign-in there,
1088then obtains the access and refresh tokens directly from the `claude.ai`
1089token endpoint. During sign-in, no authorization code or token passes
1090through `pivot.claude.ai`, and there is nothing to paste back into the
1091add-in.
1092
10521093### Microsoft admin-consent redirects
10531094
10541095The Microsoft Graph consent link in
from line 1145
11041145 MCP connector the redirect to `pivot.claude.ai/auth/gateway-callback`
11051146 carries `code` and `state`. No `access_token` parameter appears.
11061147* The `POST` that exchanges the code goes to `oauth2.googleapis.com` for
1107 Vertex AI, to `claude.ai` for Anthropic sign-in, or to the connector
1108 gateway's own origin for an MCP connector, originates from the add-in
1109 frame, and includes the `code_verifier` or `client_secret` that never
1110 appeared in any request to `pivot.claude.ai`.
1148 Vertex AI or to the connector's authorization server for an MCP
1149 connector, originates from the add-in frame, and includes the
1150 `client_secret` or `code_verifier` that never appeared in any request to
1151 `pivot.claude.ai`.
1152* A Claude account sign-in produces requests from the add-in frame to
1153 `claude.ai/v1/oauth/device_authorization` and `claude.ai/v1/oauth/token`,
1154 and no request to `pivot.claude.ai/auth/callback`.
11111155* Microsoft Graph calls go directly to `graph.microsoft.com` with a
11121156 bearer token that was issued by `login.microsoftonline.com` and never
11131157 transited an Anthropic domain.
No line in this hunk matches that.