Skip to main content
Glama

Server Details

GDPR-compliant calendar access for AI assistants: read, create, edit, RSVP. Google, MS 365, Apple.

Ownership verified
Status
Healthy
Uptime
99.9% over 58 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.5/5.0

Scored across 8 tools

Disambiguation4/5

Each tool targets a distinct action-resource: create/update/delete_event, get_availability, list_calendars, search_events, respond_to_event, send_feedback. The only mild overlap is get_availability vs search_events (both surface events), but their descriptions clearly separate busy-time queries from text search.

Naming Consistency5/5

All eight tools follow a clean snake_case verb_noun convention (create_event, delete_event, get_availability, list_calendars, respond_to_event, search_events, send_feedback, update_event). No mixing of conventions or vague verbs.

Tool Count5/5

Eight tools is well-scoped for a calendar-sync server, covering the full event lifecycle plus calendar listing, invitation responses, and feedback. No redundant or filler tools.

Completeness4/5

Full CRUD on events (create/read/update/delete), invitation handling, calendar listing, and search are all present, covering the core workflows. Minor gaps exist (e.g. no explicit get_event by id or calendar-level management operations), but the surface has no serious dead ends.

Available Tools

8 tools
create_eventCreate eventInspect

Creates an event in one of the calendars this access may write to.

Availability in the requested slot is checked LIVE (not from cache). An overlapping event does NOT prevent creation — the event is created regardless and the overlap comes back as a warning. Pass that warning on to the user instead of silently double-booking; whether the overlap is intended is the user's call.

The check counts only events that BLOCK the time (blocks_time: true in get_availability). Entries that do not block it — holidays, birthdays, and every all-day event from Apple/iCloud — are deliberately not reported as conflicts, because otherwise every booking on a day carrying a holiday would look like a clash. So no warning does NOT mean the day is empty: an all-day "Baustelle Darmstadt" is a working day that will not show up here. When the user asks to book on a specific day, check the day with get_availability first and mention what is already on it.

All-day events: pass bare dates (start: "2026-09-01", end: "2026-09-03") or set all_day: true. For all-day the end date is INCLUSIVE — that example creates a three-day event covering 1–3 September. Both ends must use the same form.

calendar_id is only needed when several calendars are writable; with exactly one, that one is used. list_calendars shows the writable calendars. title is required.

Check status first: credits_exhausted means this call was NOT performed. Only warnings and credit information are returned in that case; no result data or write confirmation. Tell the user how to restore credits; do not retry automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesEnd — same form as `start`. For all-day events this date is INCLUSIVE (end 2026-09-03 means the event runs through 3 September).
startYesStart — either an ISO 8601 timestamp WITH timezone (2026-07-28T10:00:00+02:00 or …Z), or a bare date (2026-07-28) for an all-day event. A timestamp without a zone is rejected.
titleYesEvent title (required)
all_dayNoForce an all-day event; time components in start/end are then discarded. Not needed when start/end are already bare dates.
locationNo
time_zoneNoIANA zone, e.g. America/New_York. For timed events it preserves the NAMED zone so the event follows daylight saving (without it the event is stored as UTC and shows as GMT in Apple Calendar, and a recurring series will not shift with the clocks). For all-day events it decides which local day is covered. Always send it when you know the user's zone; defaults to UTC.
calendar_idNoTarget calendar; only needed when several are writable
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYesok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.
warningNo
event_idNo
warningsNo
resets_atNo
calendar_idNo
calendar_nameNo
credits_requiredNo
credits_availableNo
delete_eventDelete event
Destructive
Inspect

Deletes an event. The deletion is executed at the provider and propagates into any mirrored calendars through the normal sync.

Addressable are events THIS access created, and — where the user allowed managing (manageable: true in list_calendars) — any other event in that calendar.

Deleting is the irreversible one: confirm with the user first when the event is not one this access created, and say what it is (title and time) so they can recognise it. When the event has other participants, deleting it as the organiser cancels it for them too — mention that before doing it.

The same four refusals as update_event apply, each naming the way forward. For an invitation someone else organised, respond_to_event is the right tool: deleting it would only hide it locally and leave the organiser expecting the user.

Check status first: credits_exhausted means this call was NOT performed. Only warnings and credit information are returned in that case; no result data or write confirmation. Tell the user how to restore credits; do not retry automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesIdentifier from create_event
calendar_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYesok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.
deletedNo
event_idNo
warningsNo
resets_atNo
calendar_idNo
credits_requiredNo
credits_availableNo
get_availabilityGet availability
Read-only
Inspect

Returns the user's busy times in a given range, across all calendars shared with this access.

How the answer is produced: every shared calendar is read directly at the provider and the results are merged. There is no detour through a copy. as_of per calendar says when it was read — reads are reused for up to 60 seconds, so an event created moments ago may briefly be missing.

What busy contains: every event in the range, including all-day events and ones marked "tentative". Cancelled events are not included.

blocks_time per entry says whether it actually occupies the time. It is false for entries that do not make the user unavailable — holidays, birthdays, and (importantly) ALL all-day events from Apple/iCloud, which that provider always marks as free with no setting for the user to change. Such an entry is still a real appointment: an all-day "Baustelle Darmstadt" is a working day, not free time.

Use it accordingly: for "am I free / find me a slot", count only blocks_time: true. For "what do I have on", list everything and let the user judge. Never present a blocks_time: false entry as nonexistent.

Completeness: the answer covers exactly the calendars the user shared — not necessarily all calendars they own. If one of them could not be read, it appears with read: false in sources and additionally in warnings. These limitations belong in your answer to the user.

Check status first: credits_exhausted means this call was NOT performed. Only warnings and credit information are returned in that case; no result data or write confirmation. Tell the user how to restore credits; do not retry automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd of the range, ISO 8601
fromYesStart of the range, ISO 8601 (e.g. 2026-07-21T00:00:00Z)

Output Schema

ParametersJSON Schema
NameRequiredDescription
busyNo
rangeNo
statusYesok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.
sourcesNo
warningsNo
resets_atNo
range_clampedNo
credits_requiredNo
credits_availableNo
list_calendarsList calendars
Read-only
Inspect

Lists the calendars shared with this access, each with the detail level the user allowed. This tool costs no credits and works even at zero balance. Credit warnings concern the other calendar tools, not this calendar list.

readable: false means this calendar cannot be read right now — its events are also missing from get_availability. Such calendars are deliberately listed rather than omitted.

writable: true means this access may create events there. When more than one calendar is writable, create_event requires the calendar_id of one of them.

notice, when present, describes something the USER can change — either about this access or about their Kalender Sync setup. Pass it on rather than concluding the product cannot do what was asked. When it reads as an offer rather than an answer to what was asked, use your judgement about whether it fits the moment.

sync_health describes Kalender Sync's OWN synchronisation of this calendar, if it takes part in one. It does not affect availability answers (those read the provider directly), but a broken sync is something the user can fix.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noticeNo
warningsNo
calendarsYes
respond_to_eventAnswer an invitation
Destructive
Inspect

Accepts, declines or tentatively accepts an invitation someone else sent the user. The organiser is notified — that is the point: removing an invitation from the calendar without answering leaves them expecting the user.

The event_id comes from get_availability, for a calendar the user allowed managing (manageable: true in list_calendars).

Everything needed is in the get_availability or search_events result — pass event_id AND calendar_id straight back, and read is_recurring and is_organizer from the same entry instead of asking the user about them.

When is_recurring is true, set scope: "occurrence" answers only that date, "series" answers all of them. If the user named a date ("on Tuesday"), that IS "occurrence" — do not ask. Ask only when they named none, because declining one date and declining a standing commitment are different messages to the organiser.

Refusals name the way forward; pass them on rather than retrying.

Check status first: credits_exhausted means this call was NOT performed. Only warnings and credit information are returned in that case; no result data or write confirmation. Tell the user how to restore credits; do not retry automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoFor a recurring appointment: answer only this date ("occurrence") or every date ("series"). Required as soon as the appointment repeats.
commentNoOptional note for the organiser, sent with the answer
event_idYesThe `event_id` from get_availability or search_events
responseYesThe answer to send to the organiser
calendar_idNoThe `calendar_id` that came back beside the event. Always pass it — it is in the same result, and leaving it out costs a round trip whenever more than one calendar is available.

Output Schema

ParametersJSON Schema
NameRequiredDescription
needsNo
scopeNo
titleNo
statusYesok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.
event_idNo
questionNo
responseNo
warningsNo
resets_atNo
credits_requiredNo
credits_availableNo
search_eventsSearch events
Read-only
Inspect

Finds events by text across the calendars shared with this access — case-insensitive substring match on title, location and description.

The search only sees what this access may see: it filters the same visibility-rendered data get_availability returns. Calendars limited to free/busy expose no text and therefore can never match — when such calendars are part of this access, a warning says so. "No match" is thus NOT proof that no such event exists.

A match in a calendar the user allowed managing carries event_id, calendar_id, is_organizer and is_recurring — everything update_event, delete_event and respond_to_event need. Act on those directly instead of calling get_availability again for the same appointment.

The range works like get_availability (single span of at most 92 days, lookback bounded to one year). Without from/to the search covers the last 7 days plus the next 85. Cancelled events are not searchable.

Matches include events that do not block time (blocks_time: false) — notably every all-day event from Apple/iCloud. They are ordinary appointments and belong in the answer; do not filter them out when the user asked what is in their calendar.

Check status first: credits_exhausted means this call was NOT performed. Only warnings and credit information are returned in that case; no result data or write confirmation. Tell the user how to restore credits; do not retry automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd of the range, ISO 8601. Default: 85 days ahead.
fromNoStart of the range, ISO 8601. Default: 7 days ago.
queryYesText to look for (case-insensitive substring)

Output Schema

ParametersJSON Schema
NameRequiredDescription
rangeNo
statusYesok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.
matchesNo
sourcesNo
warningsNo
resets_atNo
truncatedNo
range_clampedNo
credits_requiredNo
credits_availableNo
unsearchable_calendarsNo
send_feedbackSend feedback to Kalender Sync
Destructive
Inspect

Stores a feedback message from the user and notifies the Kalender Sync team, who read it. Use it when the user wanted something the other tools in this connection cannot do, or when something looks broken. It does not change anything in the user's calendars and does not fix the problem itself; it returns a feedback_id as receipt. The notification email cannot be recalled after sending. At most 5 messages per account in 24 hours.

Call this ONLY when the user explicitly asked to send feedback, or clearly agreed after you offered it. Never send feedback on your own initiative, and never include calendar content the user did not put into the message themselves.

contact_ok records whether the user agrees to be contacted about this feedback. It is consent, not a promise of a reply. Default: false for every category, including bug. Set it to true ONLY if the user explicitly agreed to be contacted about this feedback. It never subscribes the user to a newsletter.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe user's feedback in their own words (what they wanted, what happened).
categoryYesmissing_capability: the user wanted something the tools cannot do. bug: something misbehaved. other: everything else.
contact_okNoDoes the user agree to be contacted about this feedback? Omit to use the default: false for every category. Set true only if the user explicitly agreed to be contacted about this feedback.

Output Schema

ParametersJSON Schema
NameRequiredDescription
receivedYes
feedback_idYes
update_eventUpdate event
Destructive
Inspect

Updates an event. title, start and end describe the complete new state — including whether it is all-day: an event created all-day becomes a timed event if this call passes timestamps, and vice versa.

Two kinds of event are addressable:

  1. Events THIS access created (via event_id from create_event) — always.

  2. Any other event in a calendar the user allowed managing, visible in list_calendars as manageable: true. Their ids come from get_availability.

Four things are refused, and each says what to do instead — pass that on rather than retrying: • the calendar is not released for managing (the user can allow it per calendar) • it is shared at less than full detail (a setting, not a temporary error) • the event is a synchronised COPY — change the original in the named source calendar, the change reaches this one by itself • someone else organises it — call respond_to_event with response: "declined" and the same event_id instead

Check status first: credits_exhausted means this call was NOT performed. Only warnings and credit information are returned in that case; no result data or write confirmation. Tell the user how to restore credits; do not retry automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesNew end — same form as `start`; INCLUSIVE for all-day events.
startYesNew start — ISO 8601 with timezone (…+02:00 or …Z), or a bare date (2026-07-28) for an all-day event.
titleYes
all_dayNoForce an all-day event; time components in start/end are discarded.
event_idYesIdentifier from create_event
locationNo
time_zoneNoIANA zone, e.g. America/New_York. Preserves the named zone for timed events (so recurrences follow daylight saving) and decides the local day for all-day ones. Defaults to UTC.
calendar_idNo
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYesok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.
updatedNo
event_idNo
warningsNo
resets_atNo
calendar_idNo
credits_requiredNo
credits_availableNo

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedsend_feedback1 field changed
      • changedInput schema / properties / contact_ok / description
        Previous value: -"Does the user agree to be contacted about this feedback? Omit to use the default: yes for `bug`, no for the other categories. Set false if the user declined contact, true if the user asked for it."New value: +"Does the user agree to be contacted about this feedback? Omit to use the default: false for every category. Set true only if the user explicitly agreed to be contacted about this feedback."
  2. 7 tool updates
    • Changedcreate_event6 fields changed
      • addedOutput schema / properties / credits_available
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / credits_required
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / resets_at
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "description": "ok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.",
        +  "enum": [
        +    "ok",
        +    "credits_exhausted"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "event_id",
        -  "calendar_id"
        -]New value: +[
        +  "status"
        +]
    • Changeddelete_event6 fields changed
      • addedOutput schema / properties / credits_available
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / credits_required
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / resets_at
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "description": "ok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.",
        +  "enum": [
        +    "ok",
        +    "credits_exhausted"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "event_id",
        -  "calendar_id",
        -  "deleted"
        -]New value: +[
        +  "status"
        +]
    • Changedget_availability5 fields changed
      • addedOutput schema / properties / credits_available
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / credits_required
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / resets_at
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "description": "ok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.",
        +  "enum": [
        +    "ok",
        +    "credits_exhausted"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "range",
        -  "range_clamped",
        -  "busy",
        -  "sources",
        -  "warnings"
        -]New value: +[
        +  "status"
        +]
    • Changedlist_calendars1 field changed
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedrespond_to_event5 fields changed
      • addedOutput schema / properties / credits_available
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / credits_required
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / resets_at
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "description": "ok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.",
        +  "enum": [
        +    "ok",
        +    "credits_exhausted"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "event_id",
        -  "response"
        -]New value: +[
        +  "status"
        +]
    • Changedsearch_events5 fields changed
      • addedOutput schema / properties / credits_available
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / credits_required
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / resets_at
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "description": "ok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.",
        +  "enum": [
        +    "ok",
        +    "credits_exhausted"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "range",
        -  "range_clamped",
        -  "matches",
        -  "truncated",
        -  "unsearchable_calendars",
        -  "sources",
        -  "warnings"
        -]New value: +[
        +  "status"
        +]
    • Changedupdate_event6 fields changed
      • addedOutput schema / properties / credits_available
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / credits_required
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / resets_at
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "description": "ok: tool executed; use its result fields. credits_exhausted: not executed; no result fields.",
        +  "enum": [
        +    "ok",
        +    "credits_exhausted"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "event_id",
        -  "calendar_id",
        -  "updated"
        -]New value: +[
        +  "status"
        +]
  3. 1 tool update
    • Changedsend_feedback1 field changed
      • changedInput schema / properties / contact_ok / description
        Previous value: -"May the team send one reply about this feedback? Omit to use the default: yes for `bug`, no for the other categories. Set false if the user declined a reply, true if the user asked for one."New value: +"Does the user agree to be contacted about this feedback? Omit to use the default: yes for `bug`, no for the other categories. Set false if the user declined contact, true if the user asked for it."
  4. 2 tool updates
    • Changedget_availability2 fields changed
      • addedOutput schema / properties / busy / items / properties / blocks_time
        Added value: +{
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / busy / items / required
        Previous value: -[
        -  "start",
        -  "end",
        -  "is_all_day",
        -  "calendar_id",
        -  "calendar_name"
        -]New value: +[
        +  "start",
        +  "end",
        +  "is_all_day",
        +  "blocks_time",
        +  "calendar_id",
        +  "calendar_name"
        +]
    • Changedsearch_events2 fields changed
      • addedOutput schema / properties / matches / items / properties / blocks_time
        Added value: +{
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / matches / items / required
        Previous value: -[
        -  "start",
        -  "end",
        -  "is_all_day",
        -  "calendar_id",
        -  "calendar_name"
        -]New value: +[
        +  "start",
        +  "end",
        +  "is_all_day",
        +  "blocks_time",
        +  "calendar_id",
        +  "calendar_name"
        +]
  5. 4 tool updates
    • Changedget_availability6 fields changed
      • addedOutput schema / properties / busy / items / properties / attendees
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "email": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "optional": {
        +        "type": "boolean"
        +      },
        +      "organizer": {
        +        "type": "boolean"
        +      },
        +      "self": {
        +        "type": "boolean"
        +      },
        +      "status": {
        +        "enum": [
        +          "accepted",
        +          "declined",
        +          "tentative",
        +          "needs_action"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / busy / items / properties / event_id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / busy / items / properties / has_other_attendees
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / busy / items / properties / is_organizer
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / busy / items / properties / is_recurring
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / busy / items / properties / more_attendees
        Added value: +{
        +  "type": "number"
        +}
    • Changedlist_calendars2 fields changed
      • addedOutput schema / properties / calendars / items / properties / manageable
        Added value: +{
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / calendars / items / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "provider",
        -  "visibility",
        -  "readable",
        -  "writable",
        -  "sync_health"
        -]New value: +[
        +  "id",
        +  "name",
        +  "provider",
        +  "visibility",
        +  "readable",
        +  "writable",
        +  "manageable",
        +  "sync_health"
        +]
    • Addedrespond_to_event
    • Changedsearch_events6 fields changed
      • addedOutput schema / properties / matches / items / properties / attendees
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "email": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "optional": {
        +        "type": "boolean"
        +      },
        +      "organizer": {
        +        "type": "boolean"
        +      },
        +      "self": {
        +        "type": "boolean"
        +      },
        +      "status": {
        +        "enum": [
        +          "accepted",
        +          "declined",
        +          "tentative",
        +          "needs_action"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / matches / items / properties / event_id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / matches / items / properties / has_other_attendees
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / matches / items / properties / is_organizer
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / matches / items / properties / is_recurring
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / matches / items / properties / more_attendees
        Added value: +{
        +  "type": "number"
        +}
  6. 2 tool updates
    • Changedcreate_event1 field changed
      • changedInput schema / properties / time_zone / description
        Previous value: -"IANA zone (e.g. Europe/Brussels) deciding which local day an all-day event covers. Defaults to UTC. Ignored for timed events, which carry their own offset."New value: +"IANA zone, e.g. America/New_York. For timed events it preserves the NAMED zone so the event follows daylight saving (without it the event is stored as UTC and shows as GMT in Apple Calendar, and a recurring series will not shift with the clocks). For all-day events it decides which local day is covered. Always send it when you know the user's zone; defaults to UTC."
    • Changedupdate_event1 field changed
      • changedInput schema / properties / time_zone / description
        Previous value: -"IANA zone deciding which local day an all-day event covers. Defaults to UTC."New value: +"IANA zone, e.g. America/New_York. Preserves the named zone for timed events (so recurrences follow daylight saving) and decides the local day for all-day ones. Defaults to UTC."
  7. 2 tool updates
    • Changedcreate_event4 fields changed
      • addedInput schema / properties / all_day
        Added value: +{
        +  "description": "Force an all-day event; time components in start/end are then discarded. Not needed when start/end are already bare dates.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / end / description
        Previous value: -"End, ISO 8601 with timezone"New value: +"End — same form as `start`. For all-day events this date is INCLUSIVE (end 2026-09-03 means the event runs through 3 September)."
      • changedInput schema / properties / start / description
        Previous value: -"Start, ISO 8601 WITH timezone — e.g. 2026-07-28T10:00:00+02:00 or …Z. Rejected without a zone."New value: +"Start — either an ISO 8601 timestamp WITH timezone (2026-07-28T10:00:00+02:00 or …Z), or a bare date (2026-07-28) for an all-day event. A timestamp without a zone is rejected."
      • addedInput schema / properties / time_zone
        Added value: +{
        +  "description": "IANA zone (e.g. Europe/Brussels) deciding which local day an all-day event covers. Defaults to UTC. Ignored for timed events, which carry their own offset.",
        +  "type": "string"
        +}
    • Changedupdate_event4 fields changed
      • addedInput schema / properties / all_day
        Added value: +{
        +  "description": "Force an all-day event; time components in start/end are discarded.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / end / description
        Previous value: -"New end, ISO 8601 with timezone"New value: +"New end — same form as `start`; INCLUSIVE for all-day events."
      • changedInput schema / properties / start / description
        Previous value: -"New start, ISO 8601 with timezone (e.g. …+02:00 or …Z)"New value: +"New start — ISO 8601 with timezone (…+02:00 or …Z), or a bare date (2026-07-28) for an all-day event."
      • addedInput schema / properties / time_zone
        Added value: +{
        +  "description": "IANA zone deciding which local day an all-day event covers. Defaults to UTC.",
        +  "type": "string"
        +}
  8. 2 tool updates
    • Changedget_availability1 field changed
      • addedOutput schema / properties / sources / items / properties / retryable
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedsearch_events1 field changed
      • addedOutput schema / properties / sources / items / properties / retryable
        Added value: +{
        +  "type": "boolean"
        +}
  9. 1 tool update
    • Changedsend_feedback1 field changed
      • changedInput schema / properties / contact_ok / description
        Previous value: -"true ONLY if the user explicitly agreed to one reply about this feedback."New value: +"May the team send one reply about this feedback? Omit to use the default: yes for `bug`, no for the other categories. Set false if the user declined a reply, true if the user asked for one."
  10. 1 tool update
    • Changedlist_calendars1 field changed
      • addedOutput schema / properties / notice
        Added value: +{
        +  "type": "string"
        +}
  11. 1 tool update
    • Changedlist_calendars2 fields changed
      • addedOutput schema / properties / calendars / items / properties / writable
        Added value: +{
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / calendars / items / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "provider",
        -  "visibility",
        -  "readable",
        -  "sync_health"
        -]New value: +[
        +  "id",
        +  "name",
        +  "provider",
        +  "visibility",
        +  "readable",
        +  "writable",
        +  "sync_health"
        +]
  12. 7 tool updates
    • First observedcreate_event
    • First observeddelete_event
    • First observedget_availability
    • First observedlist_calendars
    • First observedsearch_events
    • First observedsend_feedback
    • First observedupdate_event

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources