Jmap Calendar Mcp

io.github.robertdoneillPublished by GitHub account robertdoneillv0.2.0Updated Nov 1, 2026

Read calendars and create, change or (opt-in) delete events on any JMAP server, such as Stalwart.

Overview

AI-generated overview

Local MCP server that lets an assistant list calendars and find, create or update events on any JMAP calendar server, with delete opt-in.

What you can do
  • List the account's calendars and identify the default one
  • Find events in a time range, optionally matching text, with recurring events expanded into occurrences
  • Create events with title, start, time zone, length or all-day, description, location and attendees
  • Update only the given fields of an existing event, or move it to another calendar
  • Delete an event, including all occurrences of a recurring one, only when deletion is enabled
When to use it
Useful when your calendars live on a JMAP server such as Stalwart and you want an assistant to check upcoming events or draft and adjust entries without giving it mail access. It suits users who want calendar write access with deletion and invitations off by default.
Requirements
Runs locally as a Python package (uvx jmap-calendar-mcp) over stdio. Needs JMAP_SESSION_URL, usually the host's well-known JMAP endpoint, and JMAP_BEARER_TOKEN, an API key for the account. Optional JMAP_ALLOW_DELETE and JMAP_ALLOW_INVITES must be set to 1 to enable those features. Network access to the JMAP server is required.
Before you install
The server holds a bearer token that can act on the account; scope it to calendar permissions only so it cannot read or send mail, and keep it out of shell history and config files. Creating and updating events writes to real calendars, and attendees are added without being emailed unless invitations are explicitly enabled. Enabling JMAP_ALLOW_DELETE lets the assistant remove events, including every occurrence of a recurring one, and sends no cancellations.

Installation

In SourceWeft

  1. Open Jmap Calendar Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

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

ToolWhat it does
list_calendarsCalendars on the account, and which one is the default
find_calendar_eventsEvents in a time range (default: the next 30 days), optionally matching text; recurring events are expanded
create_calendar_eventNew event: title, start, time zone, length or all-day, description, location, attendees
update_calendar_eventChange only the given fields of an existing event, or move it to another calendar
delete_calendar_eventDelete 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:

bash
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).

VariableMeaning
JMAP_SESSION_URLThe server's JMAP session URL, usually https://<host>/.well-known/jmap
JMAP_BEARER_TOKENAPI key for the account
JMAP_ALLOW_INVITES1 to allow sending invitations when a call asks for it; off by default
JMAP_ALLOW_DELETE1 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

Source: README.md at commit 60c20f0

Tools

4

list_calendars

List the calendars this account can see, with which is the default.

Takes no parameters.

find_calendar_events

Find events between two times (default: the next 30 days), optionally matching text. Recurring events are expanded into their occurrences.

Parameterstextafterlimitbeforecalendar

create_calendar_event

Create an event. Confirm title, time and time zone with the user first. Attendees are added without being emailed unless send_invitations is true.

Parametersdaysstartrequiredtitlerequiredall_daycalendarlocationattendeestime_zonedescriptionduration_minutessend_invitations

update_calendar_event

Change an existing event: give event_id and only the fields to change.

Parametersdaysstarttitleall_daycalendarevent_idrequiredlocationattendeestime_zonedescriptionduration_minutessend_invitations

Version history

1
  1. v0.2.0LatestNov 1, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts