Skip to Content
ResourcesIntegrationsProductivity & DocsMicrosoft Outlook Calendar

Microsoft Outlook Calendar

Service domainCALENDAR
Microsoft Outlook Calendar icon
Arcade Optimized

Arcade.dev LLM tools for Outlook Calendar

Author:Arcade
Version:5.0.0
Auth:User authorization via the Microsoft auth provider
15tools

Microsoft Outlook Calendar Toolkit

The Microsoft Outlook Calendar toolkit connects Arcade to Outlook Calendar via Microsoft Graph, enabling LLMs to read, create, update, and manage calendar events and scheduling on behalf of a user.

Capabilities

  • Event read & search: Fetch a single event in full (including raw HTML body, attendees, recurrence metadata, and join URLs), list events over a time range, search by subject or properties, and list instances of a recurring series.
  • Event write & lifecycle: Create one-off or recurring events (with rich body formatting and organizer delegation), update individual fields or series scope in place, cancel organized meetings with attendee notification, and remove or respond to events you were invited to.
  • Scheduling & availability: Find optimal meeting slots across a group (FindMeetingTimes) or inspect free/busy detail for specific times (GetSchedule), both timezone-aware.
  • Attendees & forwarding: Forward meetings to new attendees, respond to invitations (accept/tentative/decline), and manage attendee lists incrementally or wholesale.
  • Calendar & attachment metadata: List all accessible calendars (own, shared, delegated), retrieve attachment metadata for events, and resolve the user's mailbox identity and timezone configuration.

OAuth

This toolkit uses OAuth 2.0 via the Microsoft provider. See the Arcade Microsoft auth provider docs for configuration details.

Available tools(15)

15 of 15 tools
Operations
Behavior
Tool nameDescriptionSecrets
Cancel a meeting you organize and email a cancellation to every invitee. Irreversible. Invitees keep a cancelled copy. Refused when nobody else is invited. A date already called off is reported as already cancelled, and nothing is sent for that date. this_and_future ends the series the day before the given date, so invitees get an updated invitation instead, with no note. Use is_organizer, attendees, event_type and series_master_id from an earlier read to choose this tool and scope. Only events in your own mailbox, not shared or delegated calendars.
Create an event in the user's default calendar, or in another calendar they can edit when calendar_id is given. Pass calendar_id only when the user names a calendar, never matched from the subject; otherwise the event goes on the default calendar. With calendar_id, the result echoes it. On a calendar someone else owns, organizer_note names that person as organizer. Set recurrence for a repeating series: start and end are the first date's, and it needs exactly one of recurrence.end_date, recurrence.occurrence_count or recurrence.never_ends. When the request names no end, ask the user before creating anything. If start_date_time is not a day the pattern produces, the series starts on the first day it does, and first_date_note says so. Every weekday is weekly on monday to friday. A step in working days, such as every third business day, cannot be expressed: tell the user instead of creating a nearby pattern. Book only at a time the user gave or picked, never one you chose. If no time was given, propose times and let the user pick first. body is stored as plain text unless body_format says html, in which case it is stored as markup and rendered rather than shown literally. Copying a description from an event that was read means passing that event's body_html as body with body_format html. Its body field is the same description with the markup stripped, so an agenda copied from there arrives with its links, lists and emphasis gone. Ignores timezone offsets provided in the start_date_time and end_date_time parameters. Instead, uses the user's default calendar timezone to filter events. If the user has not set a timezone for their calendar, then the timezone will be UTC.
Propose times when a group could meet. Books nothing. Use it to find a time, and to set up or schedule a meeting when no time is given: offer the slots and let the user pick one. Returns up to max_candidates slots, best first. Each slot counts how many attendees are free and names those whose availability is unknown, so it answers per-slot who can make it. Times are in time_zone, the user's mailbox zone. On time_zone_source "mailbox_utc" or "fallback", confirm the zone before stating times. A slot can include busy or out-of-office attendees; say a time works for everyone only when availability_count shows all free. Working elsewhere counts as free. No suggestions is not an error; empty_reason and note explain it.
Send a meeting invitation to someone who is not invited yet; they join the attendee list and the organizer is told. Works on a meeting you organize or one you were invited to. The attendee list can be edited only on a meeting you organize, so for someone else's meeting this is the way to bring another person in. Any bounce goes to the organizer. Refused for a cancelled meeting, the whole series of a repeating meeting (forward one date by its own event_id), and an event nobody else is invited to. Name the meeting by event_id or by event_subject. Only events in your own mailbox, and a subject is looked up in your default calendar only.
Get one event from any of the user's calendars, with the calendar it is on. event carries the subject, full body, times, location, organizer and attendees, plus change_key (the token identifying which version of the event this is), event_type and series_master_id (which together say whether this is a one-off event, one date of a recurring series, or the series itself), and online_meeting_join_url (the link that joins the online meeting, distinct from web_link, which opens the event in Outlook). Both forms of the description come back: body is the plain text with markup stripped, and body_html is the stored markup, whole, which a listing row does not carry at all. Take body_html when the formatting, links or lists matter, and supply it as the body of a new event with body_format set to html, or it is stored as literal text. An event with no description still returns a non-empty body_html, because Outlook stores an empty scaffold; body being empty is what says there is no agenda. Use this to read an event in full, or after a listing to see a body the listing only summarised. start, end, organizer and response_status always come back, with their own fields empty when Microsoft Graph returned no underlying object. An empty start is a value the event is missing, not an event that is missing.
Get free/busy and calendar items in a time window for one or more people. Use it to check a specific time. It does not propose or rank slots across a range, nor count who is free per slot. Times are in time_zone, the user's mailbox zone, which may be a Windows name such as "Eastern Standard Time". On time_zone_source "mailbox_utc" or "fallback", treat times as unconfirmed and check the intended zone before acting. availability_view has one digit per interval from start_date_time: 0 = free or working elsewhere, 1 = tentative, 2 = busy, 3 = out of office. schedule_items can extend past the window. working_hours are on each person's own clock. visibility is "readable" (an item overlaps the window), "free_on_primary_calendar" (no events on the primary calendar; secondary calendars are not visible, so not proof of free), "denied" (no permission), or "error" (see the row's error). Subject, location and is_private appear only when shared with you.
List all calendars the user has access to. Returns the user's own calendars plus any shared or delegated calendars. Use a calendar_id from the results to target a specific calendar in other calendar tools. To find which calendar an event is on, read the event instead.
List attachment metadata for a calendar event. Returns metadata only (name, size, type, etc.). Attachment content is not included. Use this tool when the user wants to know what files are attached to a calendar event or meeting. Works for an event on any of the user's calendars, including shared ones.
List the dates one recurring series falls on between two times. Dates come back earliest first, a date moved on its own at its new time. To see everything on the calendar over a stretch of time, list the calendar for that window instead. An event that does not repeat is refused. Cancelled dates are left out, and a date moved outside the window is not in it, so a missing date may be either. Read an empty list against series: the window may fall before the series starts, after it ends, or between two dates. A non-empty pagination_token means more dates remain in the window; pass it back to read them.
List everything on the user's calendars between two times. Use this when the request is about a stretch of the calendar -- what is on today, this week, between two clock times -- rather than about a property of one particular event, which a filtered search answers better. Reads the default calendar unless calendar_scope is all (every calendar in the list, shared ones included) or listed. The same meeting can appear once per calendar it sits on. A pagination_token means more of the window remains; pass it for the next page. With none, the window was read in full on searched_calendars, and an empty list means nothing is scheduled there, not on calendars left out: check skipped_calendars or use calendar_scope all before saying the user is free. An empty page reached through a token means the earlier pages held every event. Times are read in the mailbox time zone, or UTC when none is set.
Take an event off your calendar without emailing anyone. For a meeting someone else organizes, or your own appointment with no invitees. Other attendees keep their copies. An organizer in your organization sees you declined; one outside it is not told. Refused for a meeting you organize with invitees. Irreversible. Use is_organizer, attendees, event_type and series_master_id from an earlier read to choose this tool and scope. A cancelled meeting stays on your calendar with is_cancelled true, and listings hide it unless asked. Only events in your own mailbox, not shared or delegated calendars.
Accept, decline or tentatively accept a meeting someone else invited you to, and tell the organizer. Declining takes the meeting off your calendar unless Show declined events is turned on in Outlook, and once it is gone it cannot be answered again from here. Refused for a meeting you organize, a cancelled meeting, and the whole series of a repeating meeting: answer one date by its own event_id. Name the meeting by event_id or by event_subject. Only events in your own mailbox, and a subject is looked up in your default calendar only.
Find calendar events by what is true about them: subject text, who attends, who organised them, importance, or whether they are online. Use this when the request names a property of the event, even within a single day. For a stretch of the calendar with no such property, such as Tuesday or this week, read the time range instead. Searches the default calendar, 90 days either side of today unless dates are given; calendar_scope all covers every calendar in the list, shared ones included. The same meeting can appear once per calendar it sits on. Results are in chronological order, each body a short summary. A pagination_token means more of the window remains: pass it for the next page, even after an empty page, before reporting that nothing matched. With none, searched_window was read in full on searched_calendars, and an empty result means nothing matched there: check skipped_calendars, widen the range or search more calendars before reporting there is none. An empty page reached through a token means the earlier pages held every match.
Change one event in the user's calendar, in place. Returns an UpdateEventResult: the updated event in full, plus changed and fields_changed (what was actually written, which is nothing when the event already said what was asked for), change_key, concurrency_checked, applied_scope, online_meeting_preserved, attendees_not_found, and the record of how the event was resolved. Everyone invited is mailed an updated invitation for any change this writes, so an edit to a meeting with guests is not a quiet one. Every input left out leaves that part of the event alone, so this changes only what is named and never cancels, deletes or re-creates the event. Adding or dropping a guest is merged over the people already invited rather than replacing them; set_attendee_emails states the whole invitation list and replaces it. For a repeating meeting, scope is required; series takes series_master_id. There is no scope for this date and later. Changing a series' time, time zone, all-day setting or how often it repeats resets every date changed on its own and brings back its cancelled dates, so it is refused while an upcoming date is cancelled; changing only when it ends keeps those dates. recurrence changes only the parts of the repeat rule it names. A meeting that does not repeat takes no scope; there recurrence makes it repeat, keeping its event_id, and needs recurrence.frequency and an end.
Get information about the current user and their Outlook Calendar environment. mailbox_timezone is the time zone this mailbox's dates are expressed in. It may be a Windows name such as "Eastern Standard Time" rather than an IANA identifier - that names a zone observing daylight saving, not a fixed offset. mailbox_timezone_source says where it came from: "mailbox" and "mailbox_utc" mean the mailbox itself names the zone, whereas "default_not_configured" (the mailbox names none) and "default_unreadable" (the setting could not be read) mean UTC is a fallback this toolkit applied, not a zone the mailbox is set to. On either fallback, do not tell the user their mailbox is configured for that zone.
Last updated on