Skip to main content
Glama
frizzy
by frizzy

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
CALDAV_URLNoOverride for a non-iCloud CalDAV serverhttps://caldav.icloud.com
ICLOUD_USERNAMEYesFull iCloud email address
ICLOUD_APP_PASSWORDYesApp-specific password
CALDAV_DEFAULT_TIMEZONENoIANA name used for input times with no offset, and for rendering times backUTC

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_calendarsA

List the iCloud calendars available to the account, with their names and CalDAV URLs. Use this to discover the exact calendar_name that create_event and list_events expect.

create_eventA

Publish a new event to an iCloud calendar. Returns the created event's ID (its iCalendar UID). Times are ISO 8601; a value with no UTC offset is read in the configured default timezone. Give date-only values for both start_time and end_time to create an all-day event, where end_time is the last day it covers. To make it repeat, pass recurrence as an iCalendar RRULE, e.g. 'FREQ=WEEKLY;BYDAY=MO,WE', 'FREQ=DAILY;COUNT=10' or 'FREQ=MONTHLY;BYMONTHDAY=1;UNTIL=20271231'; start_time/end_time then describe the first occurrence, which must itself match the rule. Repeating timed events keep their local time across daylight-saving changes.

get_eventA

Fetch one event by its event_id. For a repeating event this is the series itself: its first occurrence, its recurrence rule, the excluded_occurrences that were deleted, and the modified_occurrences that were changed individually.

update_eventA

Change an existing event. Only the fields you pass are changed; pass an empty string to clear description or location. Changing only start_time moves the event and keeps its duration. For a repeating event, leave occurrence out to change the whole series, or set it to an occurrence's recurrence_id from list_events to change just that one. recurrence (whole series only) replaces the RRULE; an empty string stops the event repeating, and an RRULE makes a one-off event repeat. Moving a series moves its individually changed and deleted occurrences with it; any that no longer fit the new rule are discarded and counted in removed_exceptions. Changing "this and all following" occurrences is not supported: end the series with delete_event(..., and_following=true) and create a new one. Invitations are not sent to attendees. Check warnings in the result.

delete_eventA

Delete an event. Without occurrence this removes the event, or the whole series if it repeats. For a repeating event, set occurrence to an occurrence's recurrence_id from list_events to delete only that one, and add and_following=true to also delete every occurrence after it (the series then ends before it). Cancellations are not sent to attendees. Check warnings in the result.

list_eventsA

Fetch events from an iCloud calendar within a time range. Defaults to the next 30 days when no range is given. Recurring events are expanded, so each occurrence in the range is returned separately. Ranges longer than 400 days are rejected.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool maps to a distinct resource and action: list_calendars handles calendar discovery, while create/get/update/delete_event and list_events cleanly separate single-event, bulk-listing, and write operations. Recurring-event behavior is described carefully so get_event and list_events are not confused.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun convention: list_calendars, create_event, get_event, update_event, delete_event, list_events. The only variation is singular vs. plural nouns, which is appropriate for single-resource vs. collection operations.

Tool Count5/5

Six tools is well-scoped for a calendar integration: four event lifecycle operations plus calendar discovery and range-based event listing. Each tool has a clear purpose and none feel redundant.

Completeness4/5

Event CRUD is fully covered, including recurring-event exceptions and range queries, and calendar discovery exists to support event operations. Minor gaps remain, such as no calendar creation/update/delete and no attendee/invitation management, but the core scheduling workflow is complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues