# Calendar.app (npm · @p-l-ta/calendar-mcp)

List, search, and manage calendar events via macOS Calendar.app across all configured accounts.

- Trust score: 69/100 (medium)
- Change this week: +23
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- npm · `@p-l-ta/calendar-mcp`: 69/100 (this document), [markdown](https://verifymcp.io/servers/p-l-ta-calendar-mcp/p-l-ta-calendar-mcp.md), [page](https://verifymcp.io/servers/p-l-ta-calendar-mcp/p-l-ta-calendar-mcp)

## Channel facts

- Registry: `npm`
- Package: `@p-l-ta/calendar-mcp`
- Version: `1.0.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 87 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 76/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 838 tokens (~119/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 97/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 92% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add p-l-ta-calendar-mcp -- npx -y @p-l-ta/calendar-mcp
```

### Codex

```bash
codex mcp add p-l-ta-calendar-mcp -- npx -y @p-l-ta/calendar-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "p-l-ta-calendar-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@p-l-ta/calendar-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add p-l-ta-calendar-mcp --command npx --arg -y --arg @p-l-ta/calendar-mcp
```

### Hermes

```yaml
mcp_servers:
  p-l-ta-calendar-mcp:
    command: "npx"
    args: ["-y", "@p-l-ta/calendar-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "p-l-ta-calendar-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@p-l-ta/calendar-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-04 (score 69, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 65, +60)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional regression] Security disclosure: fail → unverified
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: MIT

### 2026-08-01 (score 5, −15)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-31 (score 20, −26)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (7)

### `list_calendars` (~50 tokens)

List all Calendar.app calendars across all accounts, with name, UUID, color, and account info. UUIDs can be passed to list_events, search_events, and get_event to filter by calendar.

### `list_events` (~158 tokens)

List calendar events within a date range. Queries the Calendar.app SQLite database via OccurrenceCache, which correctly expands recurring event instances rather than just listing master events. Returns events sorted by start time.

Input parameters:

- `calendar_uuid` (string): Restrict results to a single calendar. Pass a UUID from list_calendars.
- `end` (string, required): ISO 8601 end of the window (exclusive). Events whose occurrence starts before this time are included.
- `limit` (integer)
- `start` (string, required): ISO 8601 start of the window, e.g. '2026-05-01T00:00:00' or '2026-05-01'. Events whose occurrence starts on or after this time are included.

### `get_event` (~69 tokens)

Get full details of a single Calendar.app event by UUID, including attendees and all metadata. The uuid field is returned by list_events and search_events.

Input parameters:

- `uuid` (string, required): The event UUID (or iCal unique_identifier) returned by list_events, search_events, or a prior get_event call.

### `search_events` (~138 tokens)

Search Calendar.app events by text across title, description, and location. Queries CalendarItem directly for fast full-text matching. For recurring events returns the master event; use list_events for occurrence-level detail.

Input parameters:

- `calendar_uuid` (string): Restrict results to a single calendar. Pass a UUID from list_calendars.
- `end` (string): ISO 8601 date — only events starting before this date.
- `limit` (integer)
- `query` (string, required): Text to search for in event title, description, and location.
- `start` (string): ISO 8601 date — only events starting on or after this date.

### `create_event` (~200 tokens)

Create a new event in Calendar.app. Goes through AppleScript so Calendar.app syncs the new event to all connected accounts. Returns the uid of the created event.

Input parameters:

- `all_day` (boolean): True for an all-day event. When true, start/end times are ignored — only the dates are used.
- `calendar` (string, required): Name of the target calendar (e.g. 'Calendar', 'Work'). Must match an existing calendar name exactly.
- `description` (string): Event notes/body.
- `end` (string, required): ISO 8601 end datetime, e.g. '2026-05-10T10:00:00'.
- `location` (string): Location string.
- `start` (string, required): ISO 8601 start datetime, e.g. '2026-05-10T09:00:00'.
- `summary` (string, required): Event title.
- `url` (string): URL to attach to the event.

### `update_event` (~154 tokens)

Update properties of an existing Calendar.app event identified by its uid. Only provided fields are changed. Goes through AppleScript so changes sync to all connected accounts.

Input parameters:

- `description` (string): New event notes/body. Pass empty string to clear.
- `end` (string): New ISO 8601 end datetime.
- `location` (string): New location string. Pass empty string to clear.
- `start` (string): New ISO 8601 start datetime.
- `summary` (string): New event title.
- `uid` (string, required): The iCal uid of the event to update (uid field from list_events, search_events, or get_event).
- `url` (string): New URL. Pass empty string to clear.

### `delete_event` (~69 tokens)

Permanently delete a Calendar.app event identified by its uid. Goes through AppleScript so the deletion syncs to all connected accounts. This action cannot be undone.

Input parameters:

- `uid` (string, required): The iCal uid of the event to delete (uid field from list_events, search_events, or get_event).

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/p-l-ta-calendar-mcp/p-l-ta-calendar-mcp#diagnostics

## Score history

- 2026-08-04: 69
- 2026-08-03: 65
- 2026-08-02: 65
- 2026-08-01: 5
- 2026-07-31: 20
- 2026-07-30: 46
- 2026-07-28: 46
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/@p-l-ta/calendar-mcp
- Socket report: https://socket.dev/npm/package/@p-l-ta/calendar-mcp
- Repository: https://github.com/p-l-ta/calendar-mcp
- Changelog RSS feed: https://verifymcp.io/servers/p-l-ta-calendar-mcp/p-l-ta-calendar-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/p-l-ta-calendar-mcp/p-l-ta-calendar-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/p-l-ta-calendar-mcp/p-l-ta-calendar-mcp
