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=1to offerdelete_calendar_event; it sends no cancellations. - No invitations by default. Attendees are added without being emailed. Sending invitations needs both
JMAP_ALLOW_INVITES=1on the server andsend_invitations: trueon the call. - Use a key with calendar permissions only, so the agent cannot read or send mail through it.
Setup
-
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.
-
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.