Jmap Calendar Mcp

io.github.robertdoneill由 GitHub 账号 robertdoneill 发布v0.2.0更新于 Nov 1, 2026

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

已验证STDIO仅桌面效率与工作流沟通与协作

概览

AI 生成的概览

本地 MCP 服务器,让助手在任意 JMAP 日历服务器上列出日历、查找、创建或修改事件,删除需显式开启。

可以做什么
  • 列出账户可见的日历并指出默认日历
  • 在指定时间范围内查找事件,可按文本匹配,重复事件会展开为各次发生
  • 创建事件,可设置标题、开始时间、时区、时长或全天、描述、地点和参与者
  • 只修改现有事件的指定字段,或将其移动到其他日历
  • 仅在开启删除功能时删除事件,重复事件会删除全部发生
适用场景
当你的日历托管在 Stalwart 等 JMAP 服务器上,希望助手查看近期事件或起草、调整日程,同时不授予邮件访问权限时适用。适合希望默认关闭删除和邀请发送、只给日历写权限的用户。
运行要求
以 Python 包形式在本地通过 stdio 运行(uvx jmap-calendar-mcp)。需要 JMAP_SESSION_URL(通常是主机的 well-known JMAP 地址)和 JMAP_BEARER_TOKEN(账户 API 密钥)。可选的 JMAP_ALLOW_DELETE 与 JMAP_ALLOW_INVITES 需设为 1 才启用相应功能。需要能访问 JMAP 服务器的网络。
安装前请注意
服务器持有可代表账户操作的 bearer 令牌,应仅授予日历权限,使其无法读取或发送邮件,并避免写入 shell 历史或配置文件。创建和修改事件会写入真实日历;除非显式开启邀请,参与者不会被邮件通知。开启 JMAP_ALLOW_DELETE 后助手可删除事件,重复事件会删除全部发生,且不会发送取消通知。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Jmap Calendar Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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

来源:README.md,提交 60c20f0

工具

4

list_calendars

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

无需输入参数。

find_calendar_events

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

输入参数textafterlimitbeforecalendar

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.

输入参数daysstart必填title必填all_daycalendarlocationattendeestime_zonedescriptionduration_minutessend_invitations

update_calendar_event

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

输入参数daysstarttitleall_daycalendarevent_id必填locationattendeestime_zonedescriptionduration_minutessend_invitations

版本历史

1
  1. v0.2.0最新Nov 1, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分