This is the third post in the MCP365 Explorer series . If you haven’t read the introduction, start there — it covers the setup, the protocol, and the key finding that MCP servers can be called directly from SPFx without a backend.
Today: the Work IQ Calendar server (mcp_CalendarTools) : 13 tools for events, meetings, invitations, and availability.
Preview notice: The Agents 365 Tools and MCP servers described in this post are part of the Microsoft Agent 365 tooling servers preview . These features are in preview, may change, and should not be used in production workloads.
Table of Contents
- Table of Contents
- The Server at a Glance
- What You Can Do
- The Showcase
- ListEvents vs ListCalendarView
- What I Learned
- Deploy It Yourself
- Resources
The Server at a Glance
| Property | Value |
|---|---|
| Server ID | mcp_CalendarTools |
| Display name | Work IQ Calendar |
| Permission scope | McpServers.Calendar.All |
| Tools | 13 |
Unlike the SharePoint server which was consolidated and renamed, the Calendar server kept the same ID and tool names. No migration needed.
What You Can Do
The 13 tools cover the full calendar lifecycle:
Reading events:
ListEvents— list events with optional date range, subject filter, attendee filterListCalendarView— same but with recurring events expanded into individual instancesGetUserDateAndTimeZoneSettings— get a user’s timezoneGetRooms— list all meeting rooms in the tenant
Creating and managing events:
CreateEvent— create a new event with attendees, location, Teams meeting link, recurrenceUpdateEvent— modify an existing eventDeleteEventById— delete an eventFindMeetingTimes— find available slots for multiple attendees
Responding to invitations:
AcceptEvent— accept an invitationTentativelyAcceptEvent— tentatively acceptDeclineEvent— declineCancelEvent— cancel (organizer only)ForwardEvent— forward to other recipients
The Showcase
The Explorer’s showcase provides quick buttons to test the some common calendar operations:
My Events Today — calls ListEvents with today’s date range. Shows all events with subject, times, location, and a Teams icon for online meetings.
My Events This Week — same as today but for the full week.
Calendar View (next 15 days) — calls ListCalendarView with no parameters (defaults to current time + 15 days). The key difference: recurring events are expanded into individual instances.
Meeting Rooms — calls GetRooms to list all meeting rooms defined in the tenant.
My Timezone — calls GetUserDateAndTimeZoneSettings to show the current user’s timezone configuration.
ListEvents vs ListCalendarView
Both tools return calendar events, but they handle recurring events differently:
- ListEvents returns events as stored in the calendar. Recurring events may appear as a single entry with recurrence metadata.
- ListCalendarView expands recurring events into individual instances within the specified time range. A recurring “Daily Standup” appears as separate entries for each occurrence.
Which one to use depends on your scenario : ListCalendarView gives you the expanded view of what’s actually on the calendar, while ListEvents gives you the events as they were created.
What I Learned
The schema descriptions are practical. The ListCalendarView tool description explicitly states that startDateTime defaults to the current time and endDateTime defaults to current time + 15 days. The CreateEvent tool lists all the optional parameters for recurrence patterns, Teams meetings, and attendee types. This level of detail is what makes MCP tools LLM-callable, the schema tells the LLM everything it needs to know.
Time zones are worth paying attention to. The tools accept a timeZone parameter. If you need events in a specific local time, it’s worth passing it explicitly.
CreateEvent generates Teams links automatically. Setting isOnlineMeeting: true on a CreateEvent call returns a full Teams meeting link, dial-in number, and passcode, all in a single MCP call. No separate Teams API integration needed.
Deploy It Yourself
- Clone the repo:
git clone https://github.com/ferrarirosso/mcp365-explorer - Build:
cd webparts/mcp365-calendar && npm install && npx heft build --clean - Package:
npx heft test --clean --production && npx heft package-solution --production - Upload
sharepoint/solution/mcp365-calendar.sppkgto your app catalog - Approve the
McpServers.Calendar.Allpermission in SharePoint admin center - Add the webpart to a page and configure the Environment ID