VX Agents

API directory · Booking & Scheduling

Outlook Calendar (Microsoft Graph)

v1.0.0 · 13 endpoints · 0 connections · shared by vx.ai

Find a time that works, then book it in Outlook: check colleagues' free/busy with getSchedule or let findMeetingTimes suggest slots, read the week's calendarView, create or move meetings with a Teams link, and accept, decline or cancel invitations for a Microsoft 365 user.

Connect this API to an AI agent Browse all specs

What you can do with Outlook Calendar (Microsoft Graph) via MCP

Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.

MethodPathOperationDescription
GET /me/calendars listCalendars List the user's calendars
GET /me/calendar/calendarView listCalendarView List events between a start and end time, with recurring ones expanded
GET /me/events listEvents List or search events (series masters, not expanded)
POST /me/events createEvent Create an event and send invitations
GET /me/events/{event-id} getEvent Get one event with attendees and their responses
PATCH /me/events/{event-id} updateEvent Change an event's time, title, attendees or location
GET /me/events/{event-id}/instances listEventInstances List the occurrences of a recurring event in a time range
POST /me/calendar/getSchedule getSchedule Get free/busy for people, rooms or lists over a time window
POST /me/findMeetingTimes findMeetingTimes Suggest meeting times when attendees are free
POST /me/events/{event-id}/accept acceptEvent Accept a meeting invitation
POST /me/events/{event-id}/decline declineEvent Decline a meeting invitation, optionally proposing a new time
POST /me/events/{event-id}/tentativelyAccept tentativelyAcceptEvent Tentatively accept a meeting invitation
POST /me/events/{event-id}/cancel cancelEvent Cancel a meeting you organise and notify attendees

Authentication

microsoftOAuth

OAuth 2.0

Scopes: https://graph.microsoft.com/Calendars.ReadWrite https://graph.microsoft.com/Calendars.Read.Shared offline_access

How to get a credential

  1. Sign in to the Microsoft Entra admin center (entra.microsoft.com) with an account in your Microsoft 365 tenant.
  2. Go to App registrations → New registration, choose the supported account types and add the VX Agents redirect URI shown on the credential form (platform Web).
  3. Under Certificates & secrets, create a client secret and copy its value.
  4. Under API permissions → Microsoft Graph → Delegated, add the scopes below (your organisation may require admin consent).
  5. Enter the Application (client) ID and secret in VX Agents and sign in as the user whose calendar the agent manages.

Permissions used

Scope Operations
Calendars.ReadWrite listCalendars, listCalendarView, listEvents, getEvent, listEventInstances, getSchedule, createEvent, updateEvent, acceptEvent, declineEvent, tentativelyAcceptEvent, cancelEvent
Calendars.Read.Shared findMeetingTimes
offline_access refresh tokens

Common errors

  • 401 Unauthorized: the token expired; reconnect the credential.
  • 403 Forbidden: a scope above is missing, or cancelEvent was called by someone who is not the organizer.
  • 400 Bad Request: startDateTime/endDateTime missing on calendarView or instances, or a dateTime without timeZone.
  • 429 Too Many Requests: Outlook throttling; wait for Retry-After.

Store it as a VX Agents OAuth2 credential.

Usage guide

Setup

  • Credential: Microsoft identity OAuth2 (authorization code, delegated) with Calendars.ReadWrite, Calendars.Read.Shared and offline_access. Sign in as the user whose calendar the agent manages.
  • Worth knowing up front: the user's time zone (ask, or read it from existing events) so new events use the right timeZone.

Find a time and book it

  1. listCalendarView with startDateTime and endDateTime (ISO 8601, e.g. 2026-10-20T00:00:00Z) to see what is already booked. Recurring meetings come back as separate occurrences. Use $select=subject,start,end,location,attendees and $top to keep responses small.
  2. getSchedule with schedules (email addresses of people or rooms), startTime / endTime ({"dateTime": "2026-10-21T08:00:00", "timeZone": "Pacific Standard Time"}) and availabilityViewInterval in minutes. In availabilityView, each digit is one slot (0 free, 1 tentative, 2 busy, 3 out of office); scheduleItems lists the busy blocks.
  3. Or findMeetingTimes with attendees, timeConstraint and meetingDuration (ISO 8601 duration such as PT30M) to get ranked suggestions.
  4. createEvent with subject, start, end, attendees ([{"emailAddress": {"address": "[email protected]"}, "type": "required"}]), optional location, body, and isOnlineMeeting: true for a Teams link.
  5. Move or edit with updateEvent (send only the fields that change).

Respond to invitations

  • getEvent to read the invite, then acceptEvent, tentativelyAcceptEvent or declineEvent with an optional comment and sendResponse: true. declineEvent / tentativelyAcceptEvent can carry a proposedNewTime if the organizer allows new time proposals.
  • cancelEvent (with Comment) only works for meetings the user organises; for others, decline instead.

Creating, updating, cancelling or answering an event emails every attendee. Show the title, time with time zone, and attendee list to the user and get a yes before calling these.

Good to know

  • listEvents returns recurring series as one master event. Use listCalendarView or listEventInstances (needs startDateTime / endDateTime) to see occurrences.
  • Event start / end are {dateTime, timeZone} objects; dateTime has no offset.
  • Follow @odata.nextLink for more pages.
  • On 429, wait for Retry-After.

Source: Microsoft Graph calendar API reference (https://learn.microsoft.com/en-us/graph/api/resources/calendar?view=graph-rest-1.0), checked 2026-10-19.

How to use this spec

  1. Create a free VX Agents account (sandbox tools included).
  2. Open the marketplace and connect “Outlook Calendar (Microsoft Graph)” to an agent.
  3. Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.

Related APIs