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:3.4.0
Auth:User authorization via the Microsoft auth provider
14tools

Microsoft Outlook Calendar Toolkit

The Microsoft Outlook Calendar toolkit lets LLMs read and manage a user's Outlook Calendar via Microsoft Graph, covering events, schedules, attendees, and calendar metadata.

Capabilities

  • Event CRUD & lifecycle — create, read (single event or time-range listing), update, cancel, and delete events; copy rich-text bodies faithfully across operations using body_html / body_format.
  • Meeting coordination — find open slots across a group (FindMeetingTimes), check free/busy for specific windows (GetSchedule), forward invitations to new attendees, and respond (accept / tentative / decline) on the authenticated user's behalf.
  • Search & filtering — search a rolling 90-day window (extendable with explicit dates) by subject, organizer, attendee, importance, or online-meeting flag; distinct from time-range listing, which covers arbitrary windows.
  • Calendar & attachment metadata — list all calendars (own, shared, delegated) with IDs and permissions; list attachment metadata (name, size, type) on any event.
  • Timezone & identity awareness — WhoAmI exposes the mailbox timezone and its source so the LLM can correctly interpret and present times without guessing the user's zone.
  • Recurring-series scoping — event_type and series_master_id distinguish one-off events, individual occurrences, and series masters; tools enforce correct scoping (e.g., cancel/respond/forward refuse the series root, operate on individual dates).

OAuth

This toolkit authenticates via OAuth 2.0 through Arcade's Microsoft provider. See the Arcade Microsoft auth-provider docs for setup instructions.

Available tools(14)

14 of 14 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. 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 authenticated user's default calendar. 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 the user's calendar, with everything known about it. Returns an EventDetail: the event's 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. Each calendar includes its ID, name, owner, and permissions. Use a calendar_id from the results to target a specific calendar in other calendar tools.
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. Pass a calendar_id to list attachments on events in shared or delegated calendars.
List everything on the user's calendar 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. Returns a ListEventsResult: an events list of EventListItem rows, a num_events count and truncated_by. Each row carries a short plain-text summary of the event as its body, not the full description -- read the event by its event_id to get the body in full. body_has_formatting says whether the description holds links, lists or styling that the stripped text cannot carry; a row never carries the markup itself, so read the event by its event_id when that formatting matters. Each row also carries the event_type and series_master_id that say whether it is a one-off event, one date of a recurring series, or the series itself. truncated_by is limit when Microsoft Graph offered another page, which usually but not always means more events remain, and empty when it offered none and the list is the whole window. No continuation cursor is issued, so narrow the window to reach the rest, or raise limit while it is below its maximum. An empty list with an empty truncated_by means nothing is scheduled in this window. 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.
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. When the request is about a stretch of the calendar instead -- what is on Tuesday, this week's meetings -- reading the whole time range fits better, because this search covers only a 90-day window either side of today unless dates are given. Returns a SearchEventsResult: an events list of SearchEventItem rows plus num_events, searched_window, truncated_by, and the filter_expression / client_side_filters that say where each filter was applied. Results are in chronological order. Each row carries a short plain-text summary of the event as its body, not the full description. Read one event by its event_id to get the body in full. An empty events list means nothing matched inside searched_window; it does not mean no such event exists. Widen the range or drop a filter before reporting that there is none. On truncated_by scan_cap the scan stopped early and no continuation token is issued, so narrow the window or the filters instead of paging -- an empty list there says even less.
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. An event that turns out to be a recurring series itself is refused: edit one of its dates instead.
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