AddCal
Manage the calendars other people subscribe to — not your own schedule.
What it can do
- Search: Search across calendars, collections, events and RSVP responses in one call, returning the ids each other tool needs. Use this first whenever the user refers to something by name rather than b
- List Calendars: List the calendars belonging to the authenticated user's team, with a count of upcoming events on each. Use this first to find the calendar_id needed by the event tools.
- Create Calendar: Create a new calendar for the authenticated user's team.
What data it sees
Do you need an account
No: the server works without sign-in
Manage the calendars other people subscribe to — not your own schedule.
Most calendar MCP servers connect an assistant to your personal Google or Outlook calendar. AddCal is the other side of that: publishing. Point your assistant at the public calendars, event listings and subscribe links your audience actually follows.
19 tools covering:
- Create and manage public calendars and calendar collections
- Create, update, duplicate and delete events, including recurring series —
with
preview-recurring-datesto check a series before committing it - Record RSVPs and send event invites
- List subscribers, pull analytics and team usage
- Search across calendars, events and people
Built for events programmes, class and course schedules, sports fixtures, community and venue calendars, conference agendas — anywhere the calendar is a published artefact rather than a personal diary.
Auth: OAuth 2.1 with PKCE and dynamic client registration. The assistant acts as you, limited to your team and your plan. Anything that emails people — invites and RSVPs — requires explicit confirmation before it runs, and event deletion is permanent.
Included with any AddCal plan, no separate fee. Documentation
Server tool list (19)
Raw names from tools/list. Only developers need these.
| search | Search across calendars, collections, events and RSVP responses in one call, returning the ids each other tool needs. Use this first whenever the user refers to something by name rather than by id. Matches RSVPs on attendee name and email, so results may contain personal data. |
| list-calendars | List the calendars belonging to the authenticated user's team, with a count of upcoming events on each. Use this first to find the calendar_id needed by the event tools. |
| create-calendar | Create a new calendar for the authenticated user's team. |
| list-calendar-collections | List the team's calendar collections. A collection bundles several calendars behind a single public page and subscribe link, so someone can follow them all at once. Returns each collection's member calendars and subscriber count. |
| create-calendar-collection | Bundle several calendars into a collection with one public page and subscribe link. Pass the calendar ids in the order they should appear. Collections require a paid plan. |
| list-subscribers | List the people subscribed to a calendar, with a breakdown by status. "active" means their calendar app is still fetching the feed, "inactive" means it has not synced in over a week, and "blocked" means the organiser cut them off. Names and emails are only captured when the calendar asks subscribers for their details, so many rows are anonymous. Returns personal data. |
| list-events | List or search events. Returns upcoming events across the team by default; pass calendar_id to scope to one calendar, or range="past"/"all" to look backwards. Dates are returned in ISO 8601 in the event's own timezone. |
| get-event | Retrieve the full details of a single event by its id, including its shareable add-to-calendar links. |
| create-event | Create an event on a calendar. Supply date_start and date_end as "YYYY-MM-DD HH:MM:SS" (or a full ISO 8601 string) plus an IANA timezone. For an all day event set is_all_day and pass dates only. To make it repeat, pass an RFC 5545 recurrence_rule such as "FREQ=WEEKLY;BYDAY=MO". |
| update-event | Update an existing event. Only the fields you supply are changed. Note that events belonging to a recurring series have restrictions: the start date and recurrence rule of a series cannot be changed here. |
| duplicate-event | Copy an existing event, optionally onto a different calendar and with a new title or start date. Far cheaper than re-specifying every field when the user wants "the same event again next month". The copy is independent: RSVPs, invites and analytics are not carried over, and a copy of a recurring event does not keep its series. |
| delete-event | Permanently delete an event. Deleting the parent of a recurring series deletes its instances too. Optionally notifies anyone holding a calendar invite that the event is cancelled. |
| preview-recurring-dates | Work out which dates a recurrence rule actually produces, without creating anything. Use this before create-event whenever you have translated a phrase like "every third Tuesday" into an RRULE, so you can show the user the real dates and have them confirm before any events are written. |
| list-rsvps | List the RSVP responses for an event, with a count of yes/maybe/no. Filter by response_type to get just the attendees. Returns attendee names, email addresses and any custom form answers, so treat the output as personal data. |
| create-rsvp | Record an RSVP on someone's behalf, as if they had responded on the event's public page. USUALLY SENDS A REAL EMAIL. Unless the event has confirmation emails turned off, this emails a confirmation to the address you provide, and on events with calendar invites enabled it may also send them an invitation. Set send_confirmation=false to record the response silently instead. Only call this when the user has asked you to add a specific named person. Confirm the name and address with them first, then pass confirm=true. If the same address has already responded and the event prevents duplicates, the existing response is updated rather than a second one created. |
| list-invites | List the calendar invites sent for an event and their current status (pending, sent, accepted, tentative, declined, bounced, failed, cancelled). Calendar invites are a Business plan feature. |
| send-event-invite | SENDS A REAL EMAIL. This immediately emails a calendar invitation to the address you provide, from the team's sending domain. It is not a draft or a preview, and it cannot be unsent. Only call this when the user has explicitly asked to invite that specific person. Never call it to "test", to check whether an address is valid, or on your own initiative while exploring. Confirm the recipient address with the user first, then pass confirm=true. Calendar invites are a Business plan feature and must also be enabled on the event itself. Each send counts against the team's monthly email allowance. |
| get-analytics | Get engagement analytics: how many people viewed an event or calendar page and how many added it to their own calendar, broken down over time and by referrer, country, device, browser, calendar provider and UTM parameter, plus top events, best time to post, lead time and the equivalent figures for the preceding period. Scope with calendar_id or event_id, or omit both for the whole team. Defaults to the last 30 days. Teams without a paid subscription receive headline totals only. |
| get-team-usage | Get the team's plan, current usage and limits: events, calendars, subscribers, email sends, invites and more. Use this to explain why an action was blocked, to check headroom before creating things in bulk, or to answer "what plan am I on" and "how close am I to my limit". |