Skip to main content
Glama
reinthal

icloud-calendar-mcp

by reinthal

Remote iCloud calendar MCP Server

uv Python 3.13+ FastMCP CalDAV Remote MCP server so Claude Code (or any MCP-compatible client) can manage calendar events directly you can deploy at https://horizon.prefect.io/.

Works with

  • Claude Code / Claude Desktop / Claude.ai

  • ChatGpt

  • Anything that supports Oauth MCP servers

Environment Variables

Variable

Required

Default

Description

ICLOUD_USERNAME

Yes

iCloud account email address

ICLOUD_PASSWORD

Yes

iCloud app-specific password

ICLOUD_CALENDAR

No

Alex Plugg

Name of the target iCloud calendar

Credentials are stored encrypted in secrets.env via SOPS + Age and loaded automatically by direnv.

Related MCP server: iCloud CalDAV MCP Connector

ICS Import (CLI)

Import an ICS file directly into iCloud:

uv run python main.py SchemaICAL.ics
# or, if inside the devenv shell:
import SchemaICAL.ics

Options:

usage: main.py [-h] [--username USERNAME] [--password PASSWORD] [--calendar CALENDAR] ics_file

positional arguments:
  ics_file                    Path to the ICS file to import

options:
  -u, --username USERNAME     iCloud username (falls back to ICLOUD_USERNAME)
  -p, --password PASSWORD     iCloud app-specific password (falls back to ICLOUD_PASSWORD)
  -c, --calendar CALENDAR     Target calendar name (default: Alex Plugg)

MCP Server

server.py is a FastMCP server that exposes CRUD operations on iCloud calendar events.

Tools

Tool

Description

list_events

List events in a date range (defaults to current month)

get_event

Fetch a single event by UID

create_event

Create a new event with title, time, description, and location

update_event

Update any fields of an existing event by UID

delete_event

Delete an event by UID

Installation — Claude Code (user-level)

Register the server globally so it is available in every project:

claude mcp add --scope user icloud-calendar \
  uv -- run fastmcp run /home/kog/repos/ics-icloud-import/server.py

The server reads ICLOUD_USERNAME, ICLOUD_PASSWORD, and ICLOUD_CALENDAR from the environment. These are already available in any shell that loads this repo's direnv config.

Installation — Claude Desktop (macOS / Windows)

Add the following to your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "icloud-calendar": {
      "command": "uv",
      "args": [
        "run",
        "--project", "/path/to/ics-icloud-import",
        "fastmcp", "run", "/path/to/ics-icloud-import/server.py"
      ],
      "env": {
        "ICLOUD_USERNAME": "your@icloud.com",
        "ICLOUD_PASSWORD": "xxxx-xxxx-xxxx-xxxx",
        "ICLOUD_CALENDAR": "My Calendar"
      }
    }
  }
}

Replace /path/to/ics-icloud-import with the actual path to this repository.

Running the server manually

uv run fastmcp run server.py

Available Tools

7 tools
create_eventA

Create a new calendar event in an iCloud calendar.

Args: summary: Title of the event. start: ISO 8601 start datetime. end: ISO 8601 end datetime. calendar_name: Full calendar name with provider prefix (e.g. '[iCloud] Work'). Defaults to DEFAULT_CALENDAR for backward compatibility. description: Optional event description. location: Optional event location. rrule: Optional iCalendar RRULE string for recurring events.

Returns: The created event as a dict with its assigned UID.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
rruleNo
startYes
summaryYes
locationNo
descriptionNo
calendar_nameNoAlex Plugg

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It discloses that a new event is created and returns the event with an assigned UID, and mentions backward-compatibility behavior for calendar_name. However, it does not mention permissions, idempotency, conflict behavior, or side effects beyond creation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear one-line purpose, followed by a compact, well-organized parameter list and return note. Every line earns its place, and the formatting makes it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter creation tool with no annotations, the description covers parameters, formats, defaults, and the return value well. It lacks explicit guidance on error cases, permission requirements, or when to prefer sibling tools, but the core information an agent needs to invoke it correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates thoroughly by explaining all 7 parameters, including ISO 8601 format for start/end, the calendar_name provider-prefix rule, the default fallback, and the meaning of description, location, and rrule. This adds substantial value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Create a new calendar event'), a specific resource ('iCloud calendar'), and is clearly distinct from update_event/delete_event. It also enumerates the main fields immediately, so an agent knows exactly what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use case by saying 'Create a new', but it never explicitly contrasts with update_event or delete_event, or says when not to use it. The usage context is clear, but no direct alternative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_eventA

Delete a calendar event by its UID.

Args: uid: The unique identifier of the event to delete. calendar_name: Full calendar name with provider prefix.

Returns: Confirmation dict with the deleted event's UID and summary.

Raises: ValueError: If event not found

ParametersJSON Schema
NameRequiredDescriptionDefault
uidYes
calendar_nameNoAlex Plugg

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does disclose meaningful behaviors: it returns a confirmation dict with the deleted event's UID and summary and raises ValueError if the event is not found. It also implicitly signals destructiveness through the word 'Delete,' though it does not explicitly state permanence or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence purpose, then concise Args, Returns, and Raises sections. Every part contributes useful information, and the core action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential invocation aspects: action, parameter semantics, return shape, and error behavior, which is sufficient for a simple two-parameter delete tool with an output schema. A minor gap is that it doesn't mention calendar_name is optional or has a default, but the schema provides that detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining both parameters: uid is the unique identifier and calendar_name must be the full name with provider prefix. This adds real semantic meaning beyond the bare schema titles and helps the agent supply correct values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Delete'), a resource ('calendar event'), and the identifying key ('UID'), making the tool's function immediately unambiguous. It clearly distinguishes from siblings like list_events, get_event, and update_event by focusing solely on deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance about when to use this tool versus alternatives such as update_event or create_event. It does not state exclusions or conditions, leaving an agent to infer usage solely from the verb 'Delete'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_eventA

Get a single calendar event by its UID.

Args: uid: The unique identifier of the event. calendar_name: Optional full calendar name with provider prefix. Defaults to searching all iCloud calendars.

Returns: Event dict with 'calendar' and 'provider' fields.

Raises: ValueError: If event not found

ParametersJSON Schema
NameRequiredDescriptionDefault
uidYes
calendar_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It adds meaningful details: return shape ('Event dict with 'calendar' and 'provider' fields'), error behavior ('ValueError: If event not found'), and the default calendar selection behavior. It does not discuss permissions or side effects, but this is a read-only get operation, making these less critical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly structured with a leading summary, Args, Returns, and Raises sections. Every sentence conveys necessary information with no filler, and the most important purpose statement is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter get operation with an output schema and no annotations, the description covers the essential invocation details: required uid, optional calendar_name with default behavior, return format, and error condition. Nothing critical is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies uid as the event identifier and, more valuably, explains calendar_name as an optional full name with provider prefix and its default of searching all iCloud calendars. This adds meaning beyond raw schema properties, though the uid description is somewhat tautological.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Get a single calendar event by its UID,' specifying a precise verb, resource, and identifier. This clearly differentiates it from siblings like list_events (plural listing) and create_event/update_event/delete_event (mutations).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by stating it retrieves a single event by UID, and the calendar_name parameter defaults to searching all iCloud calendars. However, it does not explicitly mention alternatives (e.g., use list_events to search) or state when not to use this tool, leaving routing partially to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_calendarsA

List all available iCloud calendars with comprehensive metadata.

Returns: A list of dicts containing: - name: Display name with provider prefix - provider: Provider identifier (icloud) - url: CalDAV URL for the calendar - description: Calendar description (if set) - timezone: Calendar timezone information (extracted from VTIMEZONE data) - supported_components: List of supported component types (VEVENT, VTODO, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden and largely meets it by clearly indicating read-only listing behavior and detailing the return contract: name, provider, url, description, timezone, and supported_components. It does not explicitly mention side-effect-freedom, authentication, or pagination, but for a simple parameterless list operation these omissions are minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a single-sentence purpose followed by a compact bulleted return list. Every line adds concrete, non-redundant information, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter listing tool with an output schema indicated, the description is fully sufficient: it states the resource, the scope, and the complete metadata shape. An agent can invoke it with no inputs and interpret the results without needing additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool has zero parameters and an empty input schema, so there is no parameter detail for the description to clarify. The phrase 'all available' reinforces that no filters are needed, and the parameterless baseline of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a clear resource ('all available iCloud calendars') while signaling the return of comprehensive metadata. This cleanly distinguishes it from event-focused siblings like list_events and adds context beyond the tool name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance or named alternatives are provided. The scope 'all available iCloud calendars' implies this is the calendar-discovery/listing operation, and the sibling list_events is naturally differentiated by resource type, but the description does not explicitly say when to choose this over another tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_eventsA

List calendar events from specified calendar or all calendars.

Args: calendar_name: Full calendar name with provider prefix (e.g. '[iCloud] Work'). Defaults to all iCloud calendars. start: ISO 8601 start datetime. Defaults to start of current month. end: ISO 8601 end datetime. Defaults to 30 days after start.

Returns: List of event dicts with 'calendar' and 'provider' fields added.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo
calendar_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden. It provides defaults, ISO 8601 format expectations, and states that returned event dicts include 'calendar' and 'provider' fields, which adds useful behavior beyond the schema. It does not explicitly state read-only behavior, but 'List' strongly implies it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The summary sentence is front-loaded with the core action, followed by clearly grouped Args and Returns sections. Every sentence provides necessary information without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all parameters, defaults, formats, and return information, which is sufficient for invoking the tool. It is slightly incomplete because it does not clarify behavior across providers or when to prefer alternative sibling tools, but the tool itself is low-complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no descriptions, and the description fully compensates by explaining all three parameters: calendar_name with an example and provider-prefix requirement, start with ISO 8601 format, and end with default behavior. This adds meaning that the input schema alone does not provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists calendar events and supports either a specified calendar or all calendars. It is distinct from siblings like list_calendars and get_event, though it does not explicitly name or contrast them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives parameter defaults but no guidance on when to choose this tool over get_event, list_calendars, or other siblings. It does not mention exclusions or alternative tool recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_calendar_metadataA

Update metadata for a calendar.

Args: calendar_name: Full calendar name with provider prefix (e.g. '[iCloud] Work') description: New description for the calendar (optional)

Returns: Dict with the updated calendar metadata including provider information

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNo
calendar_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of disclosing behavior. It states that the operation updates and returns the updated metadata including provider information, which is useful. But it does not mention side effects, permissions, error behavior, or whether calendar_name must already exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the action, then uses Args/Returns sections for structure. No filler sentences; every part adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter update tool, the description covers the operation, parameter formats, and return value, and an output schema exists. It is still missing usage guidance, side-effect disclosure, and error semantics, which keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does: calendar_name is explained with the provider-prefix format and an example, and description is marked optional. This adds real meaning beyond the bare type declarations in the input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The one-line 'Update metadata for a calendar' names a specific verb and resource, making the tool's core action clear. It is distinguishable from the event-focused siblings like update_event and list_events, though it does not explicitly differentiate itself beyond the resource being a calendar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for changing calendar-level metadata such as the description, and the sibling list shows event tools are separate. However, there is no explicit statement of when to prefer this over alternatives, no prerequisites, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_eventA

Update an existing calendar event by UID. Only provided fields are changed.

Args: uid: The unique identifier of the event to update. summary: New title (optional). start: New ISO 8601 start datetime (optional). end: New ISO 8601 end datetime (optional). description: New description (optional). location: New location (optional). calendar_name: Full calendar name with provider prefix.

Returns: The updated event as a dict.

Raises: ValueError: If event not found

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
uidYes
startNo
summaryNo
locationNo
descriptionNo
calendar_nameNoAlex Plugg

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and covers partial update semantics, return value ('updated event as a dict'), and error behavior ('ValueError: If event not found'). It omits permission/reversibility details, but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The one-sentence summary is front-loaded, followed by clean Args/Returns/Raises sections. Every part adds value and the formatting makes it easy for an agent to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description, combined with the output schema, gives enough to call the tool correctly: required UID, updatable fields, return shape, and error condition. Minor gaps remain around whether null clears a field and the calendar_name default, which are not explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the Args section documents all seven parameters, adding useful semantics such as ISO 8601 format for start/end and the provider-prefix requirement for calendar_name. Some entries are terse ('New title', 'New description') and null/default behavior is not explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Update an existing calendar event by UID.' This clearly distinguishes update_event from sibling list/get/create/delete tools and from update_calendar_metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clarifies this is for an existing calendar event and describes partial-update behavior ('Only provided fields are changed'). It does not explicitly list when-not-to-use or alternative tools, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 7 tool updatesv1.0.0
    • First observedcreate_event
    • First observeddelete_event
    • First observedget_event
    • First observedlist_calendars
    • First observedlist_events
    • First observedupdate_calendar_metadata
    • First observedupdate_event

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct resource-action pair: calendars vs. events, and list/get/create/update/delete are clearly separated. No two tools overlap in purpose, and the parameter descriptions reinforce their differences.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (list_calendars, create_event, delete_event, etc.). The naming convention is uniform and predictable across the entire set.

Tool Count5/5

Seven tools is well-scoped for an iCloud calendar server, covering calendar listing/metadata and event CRUD without unnecessary bloat. Each tool has a clear role and the count feels intentional.

Completeness4/5

Event lifecycle is fully covered (list, get, create, update, delete), and calendar metadata can be updated. The main gap is lack of create/delete calendar operations, but that may not be supported by iCloud CalDAV and is a minor omission.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server for Apple Calendar and CalDAV providers. Enables listing, creating, updating, deleting events, and checking free/busy status with per-calendar write protection.
    6
    MIT
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    An MCP server for iCloud Calendar, Contacts, and Mail, usable from any MCP-capable AI client.
    -