Teamup Calendar MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.3.3 · published by io.usefulapi
Read and search Teamup Calendar events and sub-calendars; create, update, delete and undo events.
15 tools: 4 can delete or cancel things, 2 change things and 9 only read.
Scanned Oct 21, 2026
- Deletes or cancels4Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things2Claude Code: ask: see these tools
- Only reads9Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http teamup-calendar https://teamup-calendar.usefulapi.io/mcpTools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
15 tools
Deletes or cancels 4Claude Code: deny
teamup_delete_eventWRITE, DESTRUCTIVE: delete an event, or for a recurring event the chosen occurrences.No findings
Why it is in this group
- The name "teamup_delete_event" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE, DESTRUCTIVE: delete an event, or for a recurring event the chosen occurrences. Needs modify permission. Not retried. The reply holds an undo_id; teamup_undo_event_action restores the event within one hour, after that the deletion is permanent. For one occurrence use the occurrence id (123-rid-<unix start>) and redit single (the default); redit all deletes the whole series. DELETE /{calendarKey}/events/{id}.
Annotations the server declares
- title: Delete event
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
teamup_undo_event_actionWRITE: undo a recent event creation, update or deletion with the undo_id from that call.No findings
Why it is in this group
- The description's first verb is "write": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: undo a recent event creation, update or deletion with the undo_id from that call. Works for one hour only and is refused if someone else changed the event since. PUT /{calendarKey}/events/undo/{undo_id}.
Annotations the server declares
- title: Undo event change
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
teamup_update_eventWRITE: change fields of an event; fields you leave out keep their value (the event is read first and sent back with its version, so a concurrent edit is refused instead of overwrit…No findings
Why it is in this group
- The name "teamup_update_event" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: change fields of an event; fields you leave out keep their value (the event is read first and sent back with its version, so a concurrent edit is refused instead of overwritten; an event without a version is not changed). Needs modify permission. For a recurring event pass redit; use the occurrence id (123-rid-<unix start>) with single or future. Attachments are not touched. The reply holds the event and an undo_id for one hour (teamup_undo_event_action). PUT /{calendarKey}/events/{id}.
Annotations the server declares
- title: Update event
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
teamup_update_subcalendarWRITE: change a sub-calendar's name, color, overlap rule or active state; fields you leave out keep their value.No findings
Why it is in this group
- The name "teamup_update_subcalendar" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: change a sub-calendar's name, color, overlap rule or active state; fields you leave out keep their value. Needs admin permission. Making a sub-calendar inactive hides it from users without admin rights. PATCH /{calendarKey}/subcalendars/{id}.
Annotations the server declares
- title: Update sub-calendar
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
Changes things 2Claude Code: ask
teamup_create_eventWRITE: create an event.No findings
Why it is in this group
- The name "teamup_create_event" says "create": a word for a change.
Description, as the server wrote it WRITE: create an event. Needs a calendar key with add or modify permission. Give at least subcalendar_ids, start and end. Not idempotent: a repeated call creates a second event. The reply holds the new event and an undo_id; teamup_undo_event_action removes the event again within one hour. POST /{calendarKey}/events.
Annotations the server declares
- title: Create event
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
teamup_create_subcalendarWRITE: create a sub-calendar.No findings
Why it is in this group
- The name "teamup_create_subcalendar" says "create": a word for a change.
Description, as the server wrote it WRITE: create a sub-calendar. Needs a calendar key with admin permission, and the plan may limit how many exist. Not idempotent: a repeated call creates a second one. POST /{calendarKey}/subcalendars.
Annotations the server declares
- title: Create sub-calendar
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Only reads 9Claude Code: allow
teamup_get_calendarThe calendar this connection points at: title, timezone and date settings, custom event fields, sub-calendars, the permission of the calendar key in use and the plan's features.No findings
Why it is in this group
- The name "teamup_get_calendar" says "get": a word for reading.
Description, as the server wrote it The calendar this connection points at: title, timezone and date settings, custom event fields, sub-calendars, the permission of the calendar key in use and the plan's features. Call this first to learn the sub-calendar ids and the timezone. The calendar key itself is never returned. GET /{calendarKey}/configuration.
Annotations the server declares
- title: Get calendar
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
teamup_get_eventOne event by id: title, times, sub-calendars, location, who, notes (markdown), recurrence rule, custom fields, signups, comments, attachments (metadata), version, change history an…No findings
Why it is in this group
- The name "teamup_get_event" says "get": a word for reading.
Description, as the server wrote it One event by id: title, times, sub-calendars, location, who, notes (markdown), recurrence rule, custom fields, signups, comments, attachments (metadata), version, change history and reminders. Use the occurrence id (123-rid-<unix start>) for one occurrence of a recurring event. GET /{calendarKey}/events/{id}.
Annotations the server declares
- title: Get event
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
teamup_get_subcalendarOne sub-calendar by id: name, color, overlap rule, active state and which links may use it.No findings
Why it is in this group
- The name "teamup_get_subcalendar" says "get": a word for reading.
Description, as the server wrote it One sub-calendar by id: name, color, overlap rule, active state and which links may use it. GET /{calendarKey}/subcalendars/{id}.
Annotations the server declares
- title: Get sub-calendar
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
teamup_list_access_keysList the calendar's access keys (sharing links and user accesses) with name, role, active state and per-sub-calendar permission.No findings
Why it is in this group
- The name "teamup_list_access_keys" says "list": a word for reading.
Description, as the server wrote it List the calendar's access keys (sharing links and user accesses) with name, role, active state and per-sub-calendar permission. Needs a key with admin permission. The secret key values are never returned (they are secrets); use the id and name to tell links apart. GET /{calendarKey}/keys.
Annotations the server declares
- title: List access keys
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
teamup_list_changed_eventsEvents created, changed or deleted since a Unix timestamp (at most 30 days back), for syncing.No findings
Why it is in this group
- The name "teamup_list_changed_events" says "list": a word for reading.
Description, as the server wrote it Events created, changed or deleted since a Unix timestamp (at most 30 days back), for syncing. A recurring event comes back once, as its series, not as occurrences. Deleted events carry delete_dt. Pass the reply's timestamp as since_timestamp next time so nothing is missed. GET /{calendarKey}/events?modifiedSince=.
Annotations the server declares
- title: List changed events
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
teamup_list_event_signupsThe people signed up for an event (name, email, id).No findings
Why it is in this group
- The name "teamup_list_event_signups" says "list": a word for reading.
Description, as the server wrote it The people signed up for an event (name, email, id). Signups must be enabled on the event. GET /{calendarKey}/events/{id}/signups.
Annotations the server declares
- title: List event signups
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
teamup_list_eventsList the events in a date range, optionally only on some sub-calendars.No findings
Why it is in this group
- The name "teamup_list_events" says "list": a word for reading.
Description, as the server wrote it List the events in a date range, optionally only on some sub-calendars. Recurring events are expanded: every occurrence in the range is returned with its own id (series id + -rid- + start). Notes come as markdown. Times use the calendar's timezone unless tz is set. GET /{calendarKey}/events.
Annotations the server declares
- title: List events
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
teamup_list_subcalendarsList the sub-calendars (the colored lanes that events belong to, such as people, rooms or resources).No findings
Why it is in this group
- The name "teamup_list_subcalendars" says "list": a word for reading.
Description, as the server wrote it List the sub-calendars (the colored lanes that events belong to, such as people, rooms or resources). A key with admin permission also sees inactive ones. GET /{calendarKey}/subcalendars.
Annotations the server declares
- title: List sub-calendars
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
teamup_search_eventsSearch events by keyword (2-100 characters) within a date range (default: today only, so always pass the range you mean).No findings
Why it is in this group
- The name "teamup_search_events" says "search": a word for reading.
Description, as the server wrote it Search events by keyword (2-100 characters) within a date range (default: today only, so always pass the range you mean). Recurring events are expanded. Paged with limit and offset. GET /{calendarKey}/events?query=.
Annotations the server declares
- title: Search events
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.3.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http teamup-calendar https://teamup-calendar.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__teamup-calendar__teamup_get_calendar",
"mcp__teamup-calendar__teamup_list_subcalendars",
"mcp__teamup-calendar__teamup_get_subcalendar",
"mcp__teamup-calendar__teamup_list_access_keys",
"mcp__teamup-calendar__teamup_list_events",
"mcp__teamup-calendar__teamup_search_events",
"mcp__teamup-calendar__teamup_get_event",
"mcp__teamup-calendar__teamup_list_changed_events",
"mcp__teamup-calendar__teamup_list_event_signups"
],
"ask": [
"mcp__teamup-calendar__teamup_create_event",
"mcp__teamup-calendar__teamup_create_subcalendar"
],
"deny": [
"mcp__teamup-calendar__teamup_update_event",
"mcp__teamup-calendar__teamup_delete_event",
"mcp__teamup-calendar__teamup_undo_event_action",
"mcp__teamup-calendar__teamup_update_subcalendar"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as teamup-calendar. Review it before you use it.