Skip to main content
Version: Latest

Microsoft Outlook (identos.ms-mail)

User-delegated proxy for the Microsoft Graph Mail API. Every call runs as the signed-in user, so Outlook's per-user permissions and mailbox boundaries apply naturally. Two upstream-auth modes are supported:

  • entra_refresh (default) — PolicyArc uses the refresh token captured at the user's Microsoft sign-in to mint a fresh, correctly-audienced token per Microsoft service at call time. One sign-in works across any combination of Microsoft connectors — Graph (Mail, OneDrive, Teams) and Azure DevOps together. The minted token is cached per (user, resource) and re-minted on expiry; every call is made as the signed-in user.
  • idp_passthrough — forwards the user's Microsoft sign-in token directly to Graph, with no exchange. That sign-in token carries a single audience, so passthrough works for only one Microsoft resource — either Graph (Mail/OneDrive/Teams) or Azure DevOps, not both; don't mix passthrough across Graph and Azure DevOps. Choose this only for strict tenants that disable refresh-token issuance (no offline_access), or that don't want a long-lived refresh token warehoused by PolicyArc. Otherwise prefer entra_refresh.

When to use it

  • An agent or workflow needs to read the caller's inbox / search the mailbox / pull attachments.
  • An agent needs to send mail as the caller (replies, forwards, or new threads), with the sent message landing in the caller's own Sent Items.
  • An operator needs a centralised place to put a read-only kill switch on mailbox mutations during incident response.

What it does NOT do

  • No service-account / domain-wide delegation. Microsoft Graph requires per-user OAuth for mailbox writes; there is no shared service account. If you need bulk mailbox ops across users, that's a different deployment shape not covered here.
  • No mailbox-wide search across multiple users. Routes are all under /me/... — they only address the signed-in user's mailbox.
  • No live MIME assembly. The connector forwards the structured Graph message shape ({subject, body, toRecipients, ...}) verbatim. RFC 822 / EML is not on the wire.

Prerequisites

  • One PolicyArc Microsoft IdP (provider key microsoft) configured with the app's client_id/client_secret and the tenant authorize/token endpoints. For the default entra_refresh mode, the login scopes must include offline_access so a refresh token is captured; idp_passthrough does not need it. This is the same IdP Azure DevOps uses — shared, not per-connector. See the Entra ID IdP guide.
  • The Entra app granted these delegated Microsoft Graph permissions with admin consent: Mail.Read, Mail.ReadWrite, Mail.Send.
  • PBAC_GATEWAY_CREDENTIAL_KEY set on the AS (encrypts the cached tokens).

Install

The connector supports two upstream-auth modes, selected at install time:

  • entra_refresh (default) — the gateway uses the refresh token from the user's Microsoft sign-in to mint a Graph-audienced token per call. Works alongside other Microsoft connectors (OneDrive, Teams, Azure DevOps) with a single sign-in.
  • idp_passthrough — the user's sign-in token is forwarded to Graph directly. Only works for Graph alone — don't mix it with an Azure DevOps passthrough connector. Reach for this only if your tenant disables refresh-token issuance or you don't want PolicyArc holding a long-lived refresh token; otherwise prefer entra_refresh.

Install from the admin UI (Resources → Add → Microsoft Outlook), choose your auth mode, and click Install. The gateway resolves credentials from the Microsoft IdP registration.

Tool surface (12 tools)

Read paths use the mail:read scope; mutations use mail:write; sends (send_mail, reply_message, forward_message) use mail:send. The autogenerated reference below this README has the full list with route patterns and input schemas.

Operator data

KeyEffect
read_only: trueDenies every non-GET method on this connector. Reads still work; sends, replies, forwards, updates, deletes, moves all return a policy deny.

(Policy rules currently ship in policy/mail.rego but are not yet evaluated by the gateway — connector-owned Rego packages are loaded into OPA but not aggregated into the central decision today. Once aggregation lands, read_only takes effect immediately without a deploy.)

Manifest reference

  • ID: identos.ms-mail
  • Version: 1.0.0
  • Resource type: urn:connector:identos:ms-mail
  • Capabilities: mcp

Supported auth modes

TypeDetails
entra_refreshrequires IdP microsoft
idp_passthroughrequires IdP microsoft

Setup fields

IDLabelDefaultSecret?Notes
upstream_auth.typeAuthenticationentra_refreshnoAuthentication mode. entra_refresh (default) mints a separate per-resource token for each Microsoft service from your one sign-in, so a single login works across any mix of Microsoft connectors — Graph (Mail/OneDrive/Teams) and Azure DevOps together. idp_passthrough instead forwards your Microsoft sign-in token as-is, and that token is valid for only one audience: passthrough therefore works for either Graph (Mail/OneDrive/Teams) or Azure DevOps, not both. Use entra_refresh if you need more than one.

Scopes

Scope
mail:read
mail:write
mail:send
mail:admin

Routes

MethodPatternScopeResource template
GET/v1.0/me/mailFolders/{mailFolder_id}/childFoldersmail:readmail-folder://{{mailFolder_id}}
GET/v1.0/me/mailFoldersmail:read
GET/v1.0/me/messages/{message_id}/attachmentsmail:readmail://{{message_id}}
GET/v1.0/me/messages/{message_id}mail:readmail://{{message_id}}
GET/v1.0/me/messagesmail:read
POST/v1.0/me/sendMailmail:send
POST/v1.0/me/messages/{message_id}/movemail:writemail://{{message_id}}
POST/v1.0/me/messages/{message_id}/replymail:sendmail://{{message_id}}
POST/v1.0/me/messages/{message_id}/forwardmail:sendmail://{{message_id}}
POST/v1.0/me/messagesmail:write
PATCH/v1.0/me/messages/{message_id}mail:writemail://{{message_id}}
DELETE/v1.0/me/messages/{message_id}mail:writemail://{{message_id}}

MCP tools

NameScopeDescription
list_subfoldersmail:readList child folders of a specific mail folder (e.g. subfolders of Inbox, Archive/2025/...). The parent folder is identified by its ID or well-known name (inbox, drafts, sentitems, deleteditems, junkemail, archive).
list_foldersmail:readList the signed-in user's top-level mail folders (Inbox, Drafts, SentItems, etc.). Use list_subfolders to walk into a specific parent.
list_attachmentsmail:readList the attachments on a specific mail message.
get_messagemail:readGet a single mail message by its ID.
list_messagesmail:readList mail messages in the signed-in user's mailbox.
send_mailmail:sendSend a new mail message immediately. Use create_draft + send for staged sends.
move_messagemail:writeMove a mail message to a different folder.
reply_messagemail:sendReply to a mail message (to sender only). Supply a comment for a short reply, or override fields via message.
forward_messagemail:sendForward a mail message to one or more recipients.
create_draftmail:writeCreate a draft mail message in the user's Drafts folder. Use send_mail or the draft's /send endpoint to deliver it later.
update_messagemail:writeUpdate mutable properties of a mail message (mark as read/unread, set flag, change categories, edit a draft).
delete_messagemail:writeDelete a mail message. The message is moved to Deleted Items (a permanent delete requires the soft-delete endpoint).

Operator data schema

Keys the operator can supply under data.pbac.operator.connectors["identos.ms-mail"].* — consumed by the connector's policy.

KeyTypeDescription
read_onlybooleanWhen true, disables all write and send operations on the mailbox. Read paths (list/get) remain available.