← Back to search

cal-scheduler

limey Scanned 25d ago

Timezone-correct CalDAV scheduling MCP server with validated recurrence and single-occurrence edits.

B
75.4 / 100

Versions

1.0.0latest
first seen Jun 30, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 11

list_calendars
annotations: none low

List the calendars available on the account. Returns `{"calendars": [name, ...]}` with account calendar names sorted alphabetically.

create_calendar
annotations: none low

Create a new calendar with the given display name. Returns `{"ok": True, "created": name}`. The name must be unique; a duplicate name raises an error.

name str
delete_calendar
annotations: none low

Delete a calendar and all of its events. Irreversible. Returns `{"ok": True, "deleted": name}`.

name str
list_events
annotations: none low

List event occurrences in [start, end], expanding recurring series. Dates are interpreted in the calendar's configured zone. Returns one entry per occurrence (recurring instances are expanded), sorted by start.

end str start str calendar string
resolve_datetime
annotations: none low

Show how a datetime string will be interpreted, without writing anything. Use this to confirm a zone before committing an event.

value str
create_event
annotations: none low

Create an event (single, or recurring if `rrule` is given). `start`/`end` are ISO 8601 (see parameter docs for zone + default-duration details — read those before writing). `rrule` is a raw RRULE body, e.g. "FREQ=WEEKLY;COUNT=12". `calendar` is required in practice — there is no default calendar. Pick deliberately; events are not validated against calendar type.

end string rrule string start string summary str calendar string location string description string
update_event
annotations: none low

Edit a whole event/series. Only the fields you pass change. Preserves the UID and any single-occurrence exclusions/overrides. If you move `start` without giving `end`, the duration is kept. Moving `start` re-anchors the whole series — occurrences before the new start stop being generated (this retimes an entire series; it does not split one at a date).

end string uid str rrule string start string summary string calendar string location string description string
delete_event
annotations: none low

Delete a whole event/series (and any of its overrides). Irreversible.

uid str calendar string
mark_done
annotations: none low

Mark an event (or one occurrence of a series) done at the current UTC moment. `occurrence=None` marks the whole event / series; otherwise marks only that occurrence (via a RECURRENCE-ID override). Idempotent: re-marking replaces the prior timestamp. The response includes `series_remaining` and `overrides` for parity with move_occurrence / exclude_occurrence.

uid str calendar string occurrence string
exclude_occurrence
annotations: none low

Drop a single occurrence of a recurring series (EXDATE). `occurrence` is the instance's current start exactly as returned by `list_events`, including the UTC offset (e.g. `2026-06-18T09:00:00+12:00`). Bare local times may not match. The response includes `series_remaining` (occurrences left in the series) and `overrides` (RECURRENCE-ID overrides on the series) so the rest-of-series-unchanged claim is observable.

uid str calendar string occurrence str
move_occurrence
annotations: none low

Reschedule a single occurrence of a series (RECURRENCE-ID override). `occurrence` is the instance's current start exactly as returned by `list_events`, including the UTC offset (e.g. `2026-06-18T09:00:00+12:00`). Bare local times may not match. `new_start`/`new_end` are where it moves to. Omit `new_end` to keep the occurrence's existing duration. The rest of the series is unchanged. The response includes `series_remaining` (occurrences left in the series) and `overrides` (RECURRENCE-ID overrides on the series) so the rest-of-series-unchanged claim is observable.

uid str new_end string calendar string new_start string occurrence str

Permissions 2

filesystem low
Server uses filesystem capabilities via: os, pathlib
env_vars low
Server uses env_vars capabilities via: os.environ

Scan Findings 40

medium
Vulnerable dependency: mcp@2.0.0,<3 (PYSEC-2026-1616) dependency_analyzer · 95%
low
Tool 'list_calendars' has no annotations annotation_checker · 100%
low
Tool 'create_calendar' has no annotations annotation_checker · 100%
low
Tool 'delete_calendar' has no annotations annotation_checker · 100%
low
Tool 'list_events' has no annotations annotation_checker · 100%
low
Tool 'resolve_datetime' has no annotations annotation_checker · 100%
low
Tool 'create_event' has no annotations annotation_checker · 100%
low
Tool 'update_event' has no annotations annotation_checker · 100%
low
Tool 'delete_event' has no annotations annotation_checker · 100%
low
Tool 'mark_done' has no annotations annotation_checker · 100%
low
Tool 'exclude_occurrence' has no annotations annotation_checker · 100%
low
Tool 'move_occurrence' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Vulnerable dependency: mcp@2.0.0,<3 (GHSA-3qhf-m339-9g5v) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (GHSA-9h52-p55h-vw2f) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (GHSA-j975-95f5-7wqh) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (GHSA-jpw9-pfvf-9f58) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (GHSA-vj7q-gjh5-988w) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (PYSEC-2026-1617) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (PYSEC-2026-1618) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (PYSEC-2026-3482) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (PYSEC-2026-3483) dependency_analyzer · 95%
info
pyproject.toml metadata manifest_parser · 100%
info
Tool: list_calendars manifest_parser · 90%
info
Tool: create_calendar manifest_parser · 90%
info
Tool: delete_calendar manifest_parser · 90%
info
Tool: list_events manifest_parser · 90%
info
Tool: resolve_datetime manifest_parser · 90%
info
Tool: create_event manifest_parser · 90%
info
Tool: update_event manifest_parser · 90%
info
Tool: delete_event manifest_parser · 90%
info
Tool: mark_done manifest_parser · 90%
info
Tool: exclude_occurrence manifest_parser · 90%
info
Tool: move_occurrence manifest_parser · 90%
info
Required env vars (1) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
low
Permission: filesystem access detected permission_analyzer · 70%
low
Permission: env_vars access detected permission_analyzer · 90%
info
No dependency files found for SBOM generation sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%