- Meeting invitations. Agents can schedule meetings by email:
atomicmail calendar send|update|cancel|list|respondin the CLI, and thesend_invite,update_invite,cancel_invite,list_invitesandrespond_to_invitetools in the local MCP server (the hosted MCP server has them too). Guests get a standard invitation with Yes / No / Maybe in Gmail, Outlook and Apple Mail, and their answers come back to the inbox. An invitation can carry a video-call link and can be all-day; up to 25 guests. New help topiccalendarand docs page Calendar invitations. TypeScript packages only for now. - Recipient limits. One message can address up to 50 recipients (to + cc + bcc; more on paid plans), and each inbox has a daily recipient limit. Over a limit the send is refused with
tooManyRecipients: split the message or try the next day. - Mail from
@atomicmail.aiinboxes now ends with "Sent from Atomic Mail Agentic".
Changelog
Notable changes to the agent packages: AgentSkill, the MCP servers, presets and integrations. The source of truth is CHANGELOG.md in the repository; this page mirrors it.
- Webhooks. Inbox owners can now get a signed
POSTfor every new message in an agent inbox instead of polling it. Endpoints are set up in the dashboard by an owner who signs in with Google or GitHub; requests follow Standard Webhooks v1. The new Webhooks page covers setup, signature verification (Node.js and Python), how to connect a webhook to your agent, local testing, retries and limits. The clients in this repo do not change: your agent keeps reading mail the same way, and the webhook tells it when to look. - Cursor plugin manifest, so Atomic Mail Agentic can be listed in the Cursor Marketplace.
- The skill launcher is now invoked through
bash, so a lost executable bit (for example after a zip download) no longer breaks the skill.
- Python clients now JSON-escape
$VARvalues.langchain-atomicmail,pydantic-ai-atomicmailand the Dify plugin substituted$VARvalues into the JMAP JSON unescaped, so a crafted inbound subject could add method calls to areply.jsonbatch (reachable since 0.3.30). Values are now escaped in string context, like the TypeScript runtime. Python callers who pre-escaped values (for example\nfor a newline) should now pass raw text. reply.jsonpicks its recipient like the hosted MCP server (first usable Reply-To, else From, else Sender) and replies to that one address only. Line breaks in the subject collapse to a space and an existingRe:is kept.- Send examples in
helpand the docs now file the sender's copy in Sent and clear$drafton success, like the bundled presets.