Skip to content

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.

Deletes · 4Changes · 2

15 tools: 4 can delete or cancel things, 2 change things and 9 only read.

Scanned Oct 21, 2026

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/mcp

Tools

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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.