Skip to main content

jmap-calendar-mcp

An MCP server that lets an AI agent see your calendars, find events, and create, change or (if you allow it) delete events on any JMAP server that supports JMAP for Calendars, such as Stalwart 1.0 and later.

One Python file, standard library only.

Tools

Tool What it does
list_calendars Calendars on the account, and which one is the default
find_calendar_events Events in a time range (default: the next 30 days), optionally matching text; recurring events are expanded
create_calendar_event New event: title, start, time zone, length or all-day, description, location, attendees
update_calendar_event Change only the given fields of an existing event, or move it to another calendar
delete_calendar_event Delete an event, every occurrence if it repeats. Only offered with JMAP_ALLOW_DELETE=1

Built to be safe to hand to an agent:

  • No delete by default. An agent can move or rename an event but cannot remove one. Set JMAP_ALLOW_DELETE=1 to offer delete_calendar_event; it sends no cancellations.
  • No invitations by default. Attendees are added without being emailed. Sending invitations needs both JMAP_ALLOW_INVITES=1 on the server and send_invitations: true on the call.
  • Use a key with calendar permissions only, so the agent cannot read or send mail through it.

Setup

  1. Create an API key for the account. On Stalwart, open the account in the admin (Directory → Accounts), set the key's permissions to Replace all permissions, and give it only these:

    • Sign in to the server
    • JMAP: Retrieve calendar details and properties
    • JMAP: Track changes to calendars since a given state
    • JMAP: Retrieve calendar event details
    • JMAP: Track changes to calendar events since a given state
    • JMAP: Search for calendar events matching criteria
    • JMAP: Track changes to calendar event query results
    • JMAP: Create new calendar events
    • JMAP: Modify existing calendar events
    • JMAP: Remove calendar events (only if you set JMAP_ALLOW_DELETE=1)

    The key then cannot read or send mail.

  2. Add the server to your MCP client. For Claude Code:

claude mcp add calendar \
  -e JMAP_SESSION_URL=https://mail.example.com/.well-known/jmap \
  -e JMAP_BEARER_TOKEN=your-api-key \
  -- uvx jmap-calendar-mcp

For several accounts, add one server per account (calendar-work, calendar-home).

Variable Meaning
JMAP_SESSION_URL The server's JMAP session URL, usually https://<host>/.well-known/jmap
JMAP_BEARER_TOKEN API key for the account
JMAP_ALLOW_INVITES 1 to allow sending invitations when a call asks for it; off by default
JMAP_ALLOW_DELETE 1 to offer delete_calendar_event; off by default

Keep the key out of shell history and config files where you can: load it from your password manager or secret store when the server starts.

License

MIT

Metadata

Release files for jmap-calendar-mcp 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jmap-calendar-mcp 0.2.0
File Size Uploaded Provenance Actions
jmap_calendar_mcp-0.2.0.tar.gz 8.7 kB Without provenance Details for jmap_calendar_mcp-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for jmap-calendar-mcp 0.2.0
File Interpreter ABI Platform Actions
jmap_calendar_mcp-0.2.0-py3-none-any.whl Python 3 none any Details for jmap_calendar_mcp-0.2.0-py3-none-any.whl

Total release size: 16.9 kB

Release files / jmap_calendar_mcp-0.2.0.tar.gz

Download URL jmap_calendar_mcp-0.2.0.tar.gz
Size 8.7 kB
Tags Source
SHA-256 checksum
How to use checksums
1f477ddeb61c5a0fab14045f50ce2a2e13749c1ced307311907f0ad791393e23
BLAKE2b-256 checksum
How to use checksums
f4f35c90900fda4c12cfeb3cd5a67424b8157cb42dcb456253a65fd988418aa0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / jmap_calendar_mcp-0.2.0-py3-none-any.whl

Download URL jmap_calendar_mcp-0.2.0-py3-none-any.whl
Size 8.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b8e4768b34466b6184141e1a67c8bea6639256f06b8bcc658c527220ad3c22e3
BLAKE2b-256 checksum
How to use checksums
7ca0fbe03b9faf50beb57c006caa245a927acc8cb2ede23d116f9482b99a4fc1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Security for jmap-calendar-mcp 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page