Agent-Native Calendar
Agent-Native Google Calendar - manage events, sync, and public booking
Beschreibung vom Entwickler (englisches Original)
List, create, update, and delete events in Apple Calendar on macOS.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
APPLE_CALENDAR_MCP_SAFETY_MODE, APPLE_CALENDAR_MCP_ALLOWED_CALENDARS, APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARSDu brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Die .mcpb-Datei des Entwicklers herunterladen
Der Link führt zur Datei des Entwicklers selbst; wir hosten sie nicht und verpacken sie nicht neu. Öffne die Datei, dann installiert Claude Desktop sie.
Führe das in deinem Terminal aus
claude mcp add apple-calendar --env APPLE_CALENDAR_MCP_SAFETY_MODE=your-value --env APPLE_CALENDAR_MCP_ALLOWED_CALENDARS=your-value --env APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS=your-value -- uvx apple-calendar-mcpTrag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"apple-calendar": {
"command": "uvx",
"args": [
"apple-calendar-mcp"
],
"env": {
"APPLE_CALENDAR_MCP_SAFETY_MODE": "your-value",
"APPLE_CALENDAR_MCP_ALLOWED_CALENDARS": "your-value",
"APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"apple-calendar": {
"type": "stdio",
"command": "uvx",
"args": [
"apple-calendar-mcp"
],
"env": {
"APPLE_CALENDAR_MCP_SAFETY_MODE": "your-value",
"APPLE_CALENDAR_MCP_ALLOWED_CALENDARS": "your-value",
"APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
APPLE_CALENDAR_MCP_SAFETY_MODE envAPPLE_CALENDAR_MCP_ALLOWED_CALENDARS envAPPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS envDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 8. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto JonathanRReed bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (1.1.6) kam vorgestern in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv), MCPB auf deinem Computer.
In derselben Kategorie: Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:↓ Downloads pro Wochei★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
Agent-Native Google Calendar - manage events, sync, and public booking
Create and edit Excel files with AI: charts, PivotTables, formulas. No Excel needed.
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
MCP server for Apple Calendar on macOS.
Provides access to calendars and events through EventKit. Keep Calendar as the system of record while enabling agents to read, create, update, and delete events.
search_tools and get_tool_info for context-constrained clientscalendar_permission_guide, calendar_recheck_permissionsQuick start (uvx, from PyPI)
With uv installed:
uvx apple-calendar-mcp
No clone, no venv management.
From a clone
git clone https://github.com/JonathanRReed/Apple-MCPs.git
cd Apple-MCPs uv sync --all-packages
This builds one workspace environment with every server's entry point in .venv/bin (for example .venv/bin/apple-calendar-mcp). You can also point an MCP client at Apple-Calendar-MCP/start.sh, which prefers uv run and falls back to a plain venv bootstrap (Python 3.11+ required).
Generic MCP client config
{
"mcpServers": { "apple-calendar": { "command": "uvx", "args": ["apple-calendar-mcp"], "env": { "APPLE_CALENDAR_MCP_SAFETY_MODE": "safe_manage" } } } }
Running from a clone instead? Use /path/to/Apple-MCPs/Apple-Calendar-MCP/start.sh as the command with empty args.
Claude Code example
claude mcp add --transport stdio --scope user apple-calendar -- uvx apple-calendar-mcp
--scope user makes the server available in every project. To share it with one repository through its .mcp.json instead, use --scope project.
Call calendar_list_calendars, select the intended calendar by its displayed name and source, and pass its returned calendar_id unchanged to calendar_list_events, calendar_create_event or the destination of calendar_update_event. Native EventKit listings return native identifiers; automation listings use calendar names as identifiers. When EventKit can read calendars, a calendar name passed to calendar_create_event or calendar_update_event is resolved to its native calendar, ignoring case and extra whitespace, so the write keeps full alarm support. A name shared by several calendars returns AMBIGUOUS_CALENDAR with the candidates; pass the intended calendar_id instead. Unknown names return CALENDAR_NOT_FOUND and read-only calendars return CALENDAR_READ_ONLY. Without native calendar read access, names still use automation.
After changing Calendar permissions, restart the MCP server and call calendar_list_calendars again to refresh identifiers. For full alarm replacement or clearing, list events with the native calendar_id and pass the returned native event_id to calendar_update_event. Existing applescript:: event IDs still use automation after permissions change. Treat event IDs as opaque: re-list to obtain native IDs instead of rewriting an existing token. Calendar writability, safety modes and allowlists still apply.
The internal Python CalendarBridge.get_events(event_ids) method batches native lookups without adding an MCP tool. Pass a sequence of non-empty strings, at most 10000 input IDs. Duplicate input IDs are resolved once. Requests are chunked to an exact 32768-byte UTF-8 JSON argv budget, including JSON escaping; an individual oversized ID is rejected before any lookup.
The returned mapping distinguishes:
JXA-issued IDs are opaque versioned tokens that identify the Automation backend, calendar scope, and exact UID or id() namespace/value. Do not parse or construct them. UID-less events keep their actual typed id() value; distinct events with identical metadata no longer collapse. Rows without usable identifiers, or duplicate provider identities, receive display-only weak tokens. Weak tokens cannot prove absence or authorize writes.
Versioned tokens resolve directly through verified, server-filtered JXA lookups. A single matching calendar and event are required; ambiguous, unavailable, malformed, or mismatched lookups remain unknown. No unfiltered event-directory scan is used. Lookup snapshots are capped at 1000 calendars and 1000 returned matches per query, and identifiers at 32768 characters. Legacy bare UID/id values still resolve when their namespaces unambiguously identify the same event. Legacy calendar/start/title composites remain readable when unique, but cannot authorize mutations or definitive batch absence. Legacy values that resemble versioned tokens are rejected if their meanings conflict.
Legacy fallback identifiers, including encoded identifiers that could also be literal provider UIDs, require collision checks across calendars. Those exact queries can exceed the 30-second fallback deadline on large calendar stores. A timeout is an explicit error and does not establish absence or permit a mutation. Full native EventKit access avoids that fallback lookup for native identifiers: grant the host app full Calendar access, list events again to obtain native IDs, then retry. Existing fallback identifiers retain their strict collision checks.
Native misses retry the single-get/JXA path. If the whole native batch cannot answer, a fallback miss for an opaque native ID remains unknown because JXA may use a different identifier format. A verified versioned JXA miss can establish absence. Permission or per-ID confirmation failures remain unknown; non-fallback whole-helper transport failures remain explicit errors. A valid native reply with a different canonical ID requires a separate single-get lookup confirming that canonical ID. Conflicting or unconfirmed aliases remain unknown. Unsupported legacy uid: IDs remain unknown without a lookup. Callers must not delete mappings for absent keys.
JXA in-place updates and deletion require a strong, unique identity and reject stale calendar names before writing. Calendar moves through the JXA fallback are explicitly unsupported because cloning cannot safely preserve every event field. Native Calendar moves remain available. Recurrence updates through versioned JXA IDs are also unsupported.
The native batch command itself reports EventKit-only lookup outcomes. Synthetic IDs produce UNSUPPORTED_IDENTIFIER; native EVENT_NOT_FOUND alone is not a confirmed absence across both backends.
safe_readonlysafe_managefull_accessSet these environment variables in your MCP client's configuration, then restart the server:
| Variable | Effect |
|---|---|
APPLE_CALENDAR_MCP_ALLOWED_CALENDARS | Comma-separated calendar names the server may read or modify. Calendar listings, event listings, event details, and Calendar resources respect this scope. |
APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS | Additional comma-separated calendar names the server may create, update, or delete events in. It does not hide other readable calendars. |
For an assistant that may read your schedule but only write to a dedicated calendar:
{
"APPLE_CALENDAR_MCP_SAFETY_MODE": "safe_manage", "APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS": "AI Planning" }
Leaving either allowlist unset or empty applies no restriction from that list. When both are set, writes must pass both; safe_readonly blocks all writes regardless of either list. Moving an event checks both the source and destination calendar. A write with an unresolved target is rejected when an allowlist is configured.
Names are exact, case-sensitive matches after trimming configuration whitespace. Every calendar with a matching name is included, so use unique calendar names for security-sensitive scopes. calendar_health reports the configured write allowlist.
These are policies enforced by the Python MCP server, not a macOS sandbox. Direct use of the native helper or bridge library does not enforce them. macOS permissions still apply, and your MCP client may send returned data to its model provider.
stdio is the default and recommended transport. Set APPLE_CALENDAR_MCP_TRANSPORT=streamable-http (with optional APPLE_CALENDAR_MCP_HOST and APPLE_CALENDAR_MCP_PORT) to serve Streamable HTTP instead.
calendar_health reports native access_status, read access, and write access without trying AppleScript fallback or requesting permissions. Explicit Calendar reads can still use the existing automation fallback.uvx apple-calendar-mcp (or a clone's Apple-Calendar-MCP/start.sh) to your MCP clientcalendar_health firstaccess_status is not_determined, call calendar_permission_guidecalendar_recheck_permissionstools/list returns the full Calendar tool surface. Context-constrained clients can use search_tools first, then get_tool_info for the Calendar tool they need.calendar_create_event and calendar_update_event accept alarms: an array of { "minutes_before": 15 } or { "absolute_iso": "2030-10-11T10:00:00Z" } objects. Absolute dates require an explicit Z or UTC offset; timezone-naive dates are rejected. Relative offsets must be whole minutes from 0 through 525600; each event accepts at most 100 alarms. Omit alarms to preserve existing alerts on update, or pass [] to clear them.
Event detail and list responses include alarm metadata. EventKit reports relative, absolute, and location alerts. Full alarm replacement and clearing require native EventKit access. The Calendar scripting fallback can create initial display alerts and read the alert types exposed by Calendar's scripting dictionary. If an alarm edit requires removing existing alerts, or the existing alert collections cannot be read, it returns ALARM_EDIT_REQUIRES_NATIVE before changing any event fields. Omit alarms to preserve existing alerts while updating other fields. Fallback updates that combine explicit alarms (including []) with any non-null title, time, location, notes or all-day field require native EventKit, even if that field already has the supplied value. An unchanged calendar_id is not a field write; moves remain unsupported. Alarm-only updates can add initial display alerts when all four alert collections are readable and empty; [] is then a no-op. Fallible event-record reads finish before insertion. If an insertion fails or a mutation times out, the outcome may be unknown: no individual alerts are deleted, and the event must be inspected before retrying. Fallback parity
Nur der Anfang wird gezeigt; den Rest findest du im Repo