Skip to main content
Version: Latest

Microsoft Calendar (identos.ms-calendar)

User-delegated proxy for the Microsoft Graph Calendar API. Every call runs as the signed-in user, so Outlook calendar permissions and 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 Graph token per call. One sign-in works across any combination of Microsoft connectors — Graph (Mail, OneDrive, Teams, Calendar) and Azure DevOps together. The minted token is cached per (user, resource) and re-minted on expiry.
  • 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/Calendar) or Azure DevOps, not both. 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 calendar — list calendars and events, pull a time-window view, or check free/busy availability.
  • An agent needs to schedule on the caller's behalf — create events, update or cancel them, respond to invitations, or suggest meeting times.
  • An operator needs a centralised read-only kill switch on calendar mutations during incident response.

What it does NOT do

  • No service-account / domain-wide delegation. Microsoft Graph requires per-user OAuth for calendar writes; there is no shared service account.
  • No cross-user calendar access beyond free/busy. Routes are under /me/...; get_schedule returns only free/busy availability for other users, not their event details.

Prerequisites

  • One PolicyArc Microsoft IdP (provider key microsoft). 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 the other Microsoft connectors use — shared, not per-connector.
  • The Entra app granted these delegated Microsoft Graph permissions with admin consent: Calendars.ReadWrite and Calendars.Read.Shared. The Read.Shared scope is required by the find_meeting_times and get_schedule tools.
  • PBAC_GATEWAY_CREDENTIAL_KEY set on the AS (encrypts the cached tokens).

Install

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

Tool surface (10 tools)

Read paths (list_calendars, list_events, calendar_view, get_event, find_meeting_times, get_schedule) use the calendar:read scope; mutations (create_event, update_event, delete_event, respond_to_event) use calendar:write. 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; create/update/delete/respond all return a policy deny.

(Policy rules currently ship in policy/calendar.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-calendar
  • Version: 1.0.0
  • Resource type: urn:connector:identos:ms-calendar
  • 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
calendar:read
calendar:write

Routes

MethodPatternScopeResource template
GET/v1.0/me/calendarscalendar:read
GET/v1.0/me/eventscalendar:read
GET/v1.0/me/calendarViewcalendar:read
GET/v1.0/me/events/{event_id}calendar:readevent://{{event_id}}
POST/v1.0/me/eventscalendar:write
PATCH/v1.0/me/events/{event_id}calendar:writeevent://{{event_id}}
DELETE/v1.0/me/events/{event_id}calendar:writeevent://{{event_id}}
POST/v1.0/me/events/{event_id}/{response}calendar:writeevent://{{event_id}}
POST/v1.0/me/findMeetingTimescalendar:read
POST/v1.0/me/calendar/getSchedulecalendar:read

MCP tools

NameScopeDescription
list_calendarscalendar:readList the signed-in user's calendars (the default calendar plus any additional or shared calendars).
list_eventscalendar:readList events in the signed-in user's default calendar. Recurring events are returned as the series master; use calendar_view to expand a time window into instances.
calendar_viewcalendar:readList the events in a time window, with recurring events expanded into individual instances. startDateTime and endDateTime are required (ISO-8601, e.g. 2026-07-01T00:00:00Z).
get_eventcalendar:readGet a single calendar event by its ID.
create_eventcalendar:writeCreate a calendar event in the signed-in user's default calendar. Attendees receive an invitation.
update_eventcalendar:writeUpdate mutable properties of a calendar event (subject, body, start/end, location, attendees, online-meeting flag).
delete_eventcalendar:writeDelete a calendar event. If the event is a meeting the organizer created, attendees receive a cancellation.
respond_to_eventcalendar:writeRespond to a meeting invitation. The response is one of accept, decline, or tentativelyAccept.
find_meeting_timescalendar:readSuggest meeting times based on attendee availability and constraints. Requires the Calendars.Read.Shared delegated scope.
get_schedulecalendar:readGet free/busy availability for one or more people or rooms over a time window. Requires the Calendars.Read.Shared delegated scope.

Operator data schema

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

KeyTypeDescription
read_onlybooleanWhen true, disables all write operations (create/update/delete events, respond to invitations). Read paths (list/get/view/schedule) remain available.