Fastmail
About
Interact with Fastmail email, contacts, and calendar data using the Fastmail API.
Details
- Author
- madllama25
- Categories
- Communication, Automation, Other, Productivity, Community
- Tags
- #calendar
Jump to
Install as a Claude Desktop Extension (DXT)
You can install this server as a Desktop Extension for Claude Desktop using the packaged.dxtfile.
npm run build npx @anthropic-ai/dxt pack
This producesfastmail-mcp.dxtin the project root.
- Open the.dxtfile, or drag it into Claude Desktop
- When prompted:
- Fastmail API Token: paste your token (stored encrypted by Claude) — required
- Fastmail Base URL: leave blank to usehttps://api.fastmail.com(default)
- Download Directory: leave blank for~/Downloads/fastmail-mcp/
- CalDAV Username / Password / Display Name: optional — required for calendar tools (use an app-specific password; see](#install-as-a-claude-desktop-extension-dxt)CalDAV Calendar Support)
- WebDAV URL / Username / Password: optional — required forsave_attachment_to_webdav(seeWebDAV file storage)
Use any of the tools (e.g.get_recent_emails).
Response shape for list/search tools:the query tools (list_emails,list_emails_metadata,search_emails,search_emails_metadata,get_recent_emails,advanced_search,advanced_search_metadata,list_contacts,search_contacts) return a{"total", "items"}JSON envelope —totalis the server-reported match count,itemsthe returned page. When the server reports no total, a bare array is returned.
- check_function_availability: Check what's available and get setup guidance
- test_bulk_operations: Safely test bulk operations with dry-run mode
- send_email: Full-featured email sending with proper draft/sent handling
- advanced_search: Powerful multi-criteria email filtering
- get_recent_emails: Quick access to recent emails from any mailbox
- list_mailboxes: Get all mailboxes in your account. On accounts with many mailboxes the full output can be large — passpropertiesfor a slim view.
- Parameters:properties(optional array of fields to return),parentId(optional; only children of this mailbox,nullfor top level)
- Parameters:name(required),parentId(optional, omit or null for top level)
- Parameters:mailboxId(optional),limit(default: 20, max: 100),ascending(optional, oldest first)
- Parameters:mailboxId(optional),limit(default: 20, max: 100),ascending(optional, oldest first)
- Parameters:to(required — array or comma-separated string),cc(optional array),bcc(optional array),from(optional),mailboxId(optional),subject(required),textBody(optional),htmlBody(optional),inReplyTo(optional array),references(optional array),replyTo(optional array),attachments(optional array — seeEmail attachments on send)
- Parameters:originalEmailId(required),to(optional array, defaults to original sender),cc(optional array),bcc(optional array),from(optional),textBody(optional),htmlBody(optional),send(optional boolean, default: true),replyTo(optional array),attachments(optional array — seeEmail attachments on send)
- Parameters:to(optional array),cc(optional array),bcc(optional array),from(optional),mailboxId(optional),subject(optional),textBody(optional),htmlBody(optional),replyTo(optional array),inReplyTo(optional array),references(optional array),attachments(optional array — seeEmail attachments on send)
- Parameters:emailId(required),to,cc,bcc,from,subject,textBody,htmlBody,replyTo,attachments(all optional)
- Parameters:query(required),limit(default: 20, max: 100),ascending(optional, oldest first),excludeDrafts(optional, omit draft messages)
- Drafts areincluded by default. SetexcludeDrafts: trueto filter them out server-side.
- Searchesall mailboxes including Trash and Spam. For cleanup/verification flows, exclude the Trash mailbox explicitly (e.g.advanced_searchwithexcludeMailboxIds) rather than trusting a bare search count.
- Parameters:limit(default: 10, max: 50),mailboxName(optional),ascending(optional, oldest first)
- WhenmailboxNameis omitted, all mailboxes are searchedexcept Trash and Spam. Pass a mailbox name (e.g.'inbox','sent') to scope to one folder.
- Parameters:query(required),limit(default: 20, max: 100),ascending(optional, oldest first)
- Parameters:emailId(required),read(default: true)
- Parameters:emailId(required),pinned(default: true)
- Parameters:emailId(required),targetMailboxId(required)
- Parameters:emailId(required),targetMailboxId(required)
- Parameters:emailId(required),mailboxIds(required array)
- Parameters:emailId(required),mailboxIds(required array)
- get_email_attachments: Get list of attachments for an email
- Parameters:emailId(required)
- Parameters:emailId(required),attachmentId(required),savePath(optional)
- savePathmay be absolute or relative. Relative paths (including a bare filename) resolve against the download directory, so an attachment lands there in one step. Absolute paths must fall within that directory; traversal or symlink escape outside it is rejected. To save directly into your own location, setFASTMAIL_DOWNLOAD_DIRto that root — confinement stays on, scoped to the directory you choose.
- Parameters:emailId(required),attachmentId(required),remotePath(required, relative),overwrite(default false),createParents(default true)
- The storage server and credentials come fromFASTMAIL_WEBDAV_*env config; the tool only chooses the relative path beneath that base. Existing files are never replaced unlessoverwrite: true.
- Parameters:query(optional),from(optional),to(optional),subject(optional),hasAttachment(optional),isUnread(optional),isPinned(optional),mailboxId(optional),requiredMailboxIds(optional array — email must be in ALL of these),excludeMailboxIds(optional array — exclude emails in any of these),after(optional),before(optional),limit(default: 50, max: 100),ascending(optional, oldest first)
- Likesearch_emails, searchesall mailboxes including Trash and Spam— scope withmailboxId/excludeMailboxIdswhen that matters. (get_recent_emailsis the one that excludes Trash/Spam by default.)
- Parameters:threadId(required),includeDrafts(optional, include in-progress drafts)
- Draft messages areexcluded by default(an in-progress reply is noise when reading a conversation). SetincludeDrafts: trueto include them. Drafts are identified by the$draftkeyword, so the asymmetry withsearch_emails(which includes drafts by default) is deliberate: a search should still find everything you've written.
- Parameters:threadId(required),includeDrafts(optional)
- get_mailbox_stats: Get statistics for a mailbox (unread count, total emails, etc.)
- Parameters:mailboxId(optional, defaults to all mailboxes)
- bulk_mark_read: Mark multiple emails as read/unread
- Parameters:emailIds(required array),read(default: true)
- Parameters:emailIds(required array),pinned(default: true)
- Parameters:emailIds(required array),targetMailboxId(required)
- Parameters:emailIds(required array),mailboxIds(required array)
- Parameters:emailIds(required array),mailboxIds(required array)
- list_contacts: List all contacts
- Parameters:limit(default: 50, max: 200)
- Parameters:query(required),limit(default: 20, max: 100)
- Parameters:name{given, surname, full},emails[{address, label}],phones[{number, label}],addresses[{full, label}],notes,addressBookId(all optional, but a name or one email is required)
- Parameters:contactId(required), same fields as create,expectState(optional JMAP state precondition)
- Parameters:contactId(required),expectState(optional)
- list_calendars: List all calendars
- list_calendar_events: List calendar events (core fields only — no participants for token efficiency)
- Parameters:calendarId(optional),startDate(optional, ISO 8601),endDate(optional, ISO 8601),limit(default: 50, max: 500)
- Parameters:calendarId(required),title(required),description(optional),start(required, ISO 8601 or date-only),end(required, ISO 8601 or date-only),location(optional),participants(optional array of{email, name?})
- Parameters:eventId(required),title,description,start,end,location,participants(array of{email, name?}),clearFields(array of"description"/"location"to delete),confirmRecurring(boolean)
- Recurring events: Only "all events" modification is supported (master VEVENT). "This event only" or "this and future events" are not supported. Changing start/end on recurring events with exception overrides requiresconfirmRecurring: true— orphaned exceptions are pruned to prevent server errors.
- Attendee parameters: RSVP, ROLE, CUTYPE and other attendee parameters are parsed on read but not settable on create/update — onlyemailandnameare accepted.
- list_identities: List sending identities (email addresses that can be used for sending)
- check_function_availability: Check which functions are available based on account permissions (includes setup guidance). Calendar tools run over CalDAV, so calendar is reported available when CalDAV credentials are configured, regardless of the JMAP calendar capability.
- test_bulk_operations: Safely test bulk operations with dry-run mode
- Parameters:dryRun(default: true),limit(default: 3)
This server uses the JMAP (JSON Meta Application Protocol) API provided by Fastmail. JMAP is a modern, efficient alternative to IMAP for email access.
Many features in this MCP server are inspired by the officialFastmail JMAP-Samplesrepository, including:
- Recent emails retrieval (based on top-ten example)
- Email management operations
- Efficient chained JMAP method calls
The server uses bearer token authentication with Fastmail's API. API tokens provide secure access without exposing your main account password.
Fastmail applies rate limits to API requests. The server handles standard rate limiting, but excessive requests may be throttled.
Fastmail does not currently expose calendar access via JMAP API tokens — theurn:ietf:params:jmap:calendarsscope is not available because the JMAP Calendars specification is still an IETF Internet-Draft (draft-ietf-jmap-calendars). Fastmail has stated they will add JMAP calendar support once the spec becomes an RFC, but there is no public timeline.
However, Fastmail fully supportsCalDAVfor calendar access viacaldav.fastmail.com. All calendar tools use CalDAV directly.
-
Create an app-specific password on Fastmail:
- Go toSettings → Privacy & Security → Manage app passwords
- Create a new app password (you can name it "CalDAV MCP" or similar)
Set the following environment variables:
export FASTMAIL_CALDAV_USERNAME="your-email@fastmail.com" export FASTMAIL_CALDAV_PASSWORD="your-app-specific-password" # Optional: display name for ORGANIZER when creating events with participants export FASTMAIL_CALDAV_DISPLAY_NAME="Your Name"
When these variables are set, all calendar tools are available. When they are not set, calendar tools will return an error with setup instructions.
save_attachment_to_webdavsaves attachments straight to cloud storage. Configure the target (never supplied by tools at runtime — this is deliberate, so a misbehaving caller cannot redirect uploads):
# Fastmail Files: export FASTMAIL_WEBDAV_URL="https://myfiles.fastmail.com/" export FASTMAIL_WEBDAV_USERNAME="your-email@fastmail.com" export FASTMAIL_WEBDAV_PASSWORD="app-password-with-files-scope" # ...or any WebDAV server, e.g. Nextcloud: # export FASTMAIL_WEBDAV_URL="https://cloud.example.com/remote.php/dav/files/USERNAME/"
The URL must be HTTPS. Note: Fastmail Files ignores the WebDAVIf-None-Matchprecondition, so the tool performs an explicit existence check before non-overwrite uploads.
send_email,create_draft,edit_draft, andreply_emailaccept anattachmentsarray. Each entry uses exactly one source:
- { "localPath": "report.pdf" }— a file insideFASTMAIL_DOWNLOAD_DIR(same confinement as downloads)
- { "emailId": "...", "attachmentId": "..." }— re-attach from an existing email (zero-copy: no bytes are transferred)
- { "blobId": "...", "name": "...", "type": "..." }— an already-uploaded JMAP blob
Uploads respect the server'smaxSizeUpload(~50 MB on Fastmail). Editing a draft preserves its existing attachments.
create_contact/update_contact/delete_contactneed the API token to haveread-writecontacts scope (Settings → Privacy & Security → API tokens). Read-only tokens keep the three read tools working and fail writes with aforbiddenerror.
AnunofficialModel Context Protocol (MCP) server that provides access to the Fastmail API, enabling AI assistants to interact with email, contacts, and calendar data.
Disclaimer:This is a community project. It isnot affiliated with, endorsed by, or supported by Fastmail. "Fastmail" is a trademark of Fastmail Pty Ltd; it is used here only to describe compatibility with their public JMAP/CalDAV/WebDAV APIs. Use at your own risk under the terms of the project license.
- List mailboxes and get mailbox statistics
- List, search, and filter emails with advanced criteria
- Get specific emails by ID with full content
- Send emails (text and HTML) with proper draft/sent handling
- Reply to emails with proper threading (In-Reply-To, References headers)
- Create, edit, and send email drafts (with or without threading)
- Email management: mark read/unread, delete, move between folders
- Attachment Handling: List, download, and send attachments; save attachments straight to WebDAV cloud storage
- Privacy-lean metadata tools: Metadata-only variants of list/search/thread tools (no body content)
- Threading Support: Get complete conversation threads
- Advanced Search: Multi-criteria filtering (sender, date range, attachments, read status)
- Bulk Operations: Process multiple emails simultaneously
- Statistics & Analytics: Account summaries and mailbox statistics
- List all contacts with full contact information
- Get specific contacts by ID
- Search contacts by name or email
- Create, update, and delete contacts (JMAP ContactCard/set; requires an API token with read-write contacts scope)
- List, get, create, update, and delete calendar events (via CalDAV)
- All-day and timed events, participants, recurrence-aware updates
- move_email/bulk_move: Replaces ALL mailboxes for an email (folder behavior)
- add_labels/remove_labels: Adds/removes SPECIFIC mailboxes while preserving others (label behavior)
- List available sending identities
- Account summary with comprehensive statistics
- Node.js 20+
- A Fastmail account with API access
- Fastmail API token
- Log in to Fastmail web interface
- Go to Settings → Privacy & Security
- Find "Connected apps & API tokens" section
- Click "Manage API tokens"
- Click "New API token"
- Copy the generated token
export FASTMAIL_API_TOKEN="your_api_token_here" # Optional: customize base URL (defaults to https://api.fastmail.com) # Only api.fastmail.com and www.fastmailusercontent.com are accepted by default, # each with an optional regional prefix (phl.api.fastmail.com, # phl-www.fastmailusercontent.com) as returned by JMAP session discovery. # For self-hosted JMAP servers, also set FASTMAIL_ALLOW_UNSAFE_BASE_URL=true. export FASTMAIL_BASE_URL="https://api.fastmail.com" # Optional: customize attachment download directory (defaults to ~/Downloads/fastmail-mcp/). # download_attachment savePaths are confined to this directory; set it to the root # you want attachments saved under to write there directly in one step. export FASTMAIL_DOWNLOAD_DIR="/path/to/your/downloads"
git clone https://github.com/MadLlama25/fastmail-mcp && cd fastmail-mcp npm install && npm run build FASTMAIL_API_TOKEN="your_token" node dist/index.js
Note:npx github:MadLlama25/fastmail-mcpdoesnotwork on npm 10 (a known npmGitFetcherbug). Use the clone above, or install the packagedDesktop Extension.
Install as a Claude Desktop Extension (DXT)
You can install this server as a Desktop Extension for Claude Desktop using the packaged.dxtfile.
npm run build npx @anthropic-ai/dxt pack
This producesfastmail-mcp.dxtin the project root.
- Open the.dxtfile, or drag it into Claude Desktop
- When prompted:
- Fastmail API Token: paste your token (stored encrypted by Claude) — required
- Fastmail Base URL: leave blank to usehttps://api.fastmail.com(default)
- Download Directory: leave blank for~/Downloads/fastmail-mcp/
- CalDAV Username / Password / Display Name: optional — required for calendar tools (use an app-specific password; seeCalDAV Calendar Support)
- WebDAV URL / Username / Password: optional — required forsave_attachment_to_webdav(seeWebDAV file storage)
Use any of the tools (e.g.get_recent_emails).
Response shape for list/search tools:the query tools (list_emails,list_emails_metadata,search_emails,search_emails_metadata,get_recent_emails,advanced_search,advanced_search_metadata,list_contacts,search_contacts) return a{"total", "items"}JSON envelope —totalis the server-reported match count,itemsthe returned page. When the server reports no total, a bare array is returned.
- check_function_availability: Check what's available and get setup guidance
- test_bulk_operations: Safely test bulk operations with dry-run mode
- send_email: Full-featured email sending with proper draft/sent handling
- advanced_search: Powerful multi-criteria email filtering
- get_recent_emails: Quick access to recent emails from any mailbox
- list_mailboxes: Get all mailboxes in your account. On accounts with many mailboxes the full output can be large — passpropertiesfor a slim view.
- Parameters:properties(optional array of fields to return),parentId(optional; only children of this mailbox,nullfor top level)
- Parameters:name(required),parentId(optional, omit or null for top level)
- Parameters:mailboxId(optional),limit(default: 20, max: 100),ascending(optional, oldest first)
- Parameters:mailboxId(optional),limit(default: 20, max: 100),ascending(optional, oldest first)
- Parameters:to(required — array or comma-separated string),cc(optional array),bcc(optional array),from(optional),mailboxId(optional),subject(required),textBody(optional),htmlBody(optional),inReplyTo(optional array),references(optional array),replyTo(optional array),attachments(optional array — seeEmail attachments on send)
- Parameters:originalEmailId(required),to(optional array, defaults to original sender),cc(optional array),bcc(optional array),from(optional),textBody(optional),htmlBody(optional),send(optional boolean, default: true),replyTo(optional array),attachments(optional array — seeEmail attachments on send)
- Parameters:to(optional array),cc(optional array),bcc(optional array),from(optional),mailboxId(optional),subject(optional),textBody(optional),htmlBody(optional),replyTo(optional array),inReplyTo(optional array),references(optional array),attachments(optional array — seeEmail attachments on send)
- Parameters:emailId(required),to,cc,bcc,from,subject,textBody,htmlBody,replyTo,attachments(all optional)
- Parameters:query(required),limit(default: 20, max: 100),ascending(optional, oldest first),excludeDrafts(optional, omit draft messages)
- Drafts areincluded by default. SetexcludeDrafts: trueto filter them out server-side.
- Searchesall mailboxes including Trash and Spam. For cleanup/verification flows, exclude the Trash mailbox explicitly (e.g.advanced_searchwithexcludeMailboxIds) rather than trusting a bare search count.
- Parameters:limit(default: 10, max: 50),mailboxName(optional),ascending(optional, oldest first)
- WhenmailboxNameis omitted, all mailboxes are searchedexcept Trash and Spam. Pass a mailbox name (e.g.'inbox','sent') to scope to one folder.
- Parameters:query(required),limit(default: 20, max: 100),ascending(optional, oldest first)
- Parameters:emailId(required),read(default: true)
- Parameters:emailId(required),pinned(default: true)
- Parameters:emailId(required),targetMailboxId(required)
- Parameters:emailId(required),targetMailboxId(required)
- Parameters:emailId(required),mailboxIds(required array)
- Parameters:emailId(required),mailboxIds(required array)
- get_email_attachments: Get list of attachments for an email
- Parameters:emailId(required)
- Parameters:emailId(required),attachmentId(required),savePath(optional)
- savePathmay be absolute or relative. Relative paths (including a bare filename) resolve against the download directory, so an attachment lands there in one step. Absolute paths must fall within that directory; traversal or symlink escape outside it is rejected. To save directly into your own location, setFASTMAIL_DOWNLOAD_DIRto that root — confinement stays on, scoped to the directory you choose.
- Parameters:emailId(required),attachmentId(required),remotePath(required, relative),overwrite(default false),createParents(default true)
- The storage server and credentials come fromFASTMAIL_WEBDAV_*env config; the tool only chooses the relative path beneath that base. Existing files are never replaced unlessoverwrite: true.
- Parameters:query(optional),from(optional),to(optional),subject(optional),hasAttachment(optional),isUnread(optional),isPinned(optional),mailboxId(optional),requiredMailboxIds(optional array — email must be in ALL of these),excludeMailboxIds(optional array — exclude emails in any of these),after(optional),before(optional),limit(default: 50, max: 100),ascending(optional, oldest first)
- Likesearch_emails, searchesall mailboxes including Trash and Spam— scope withmailboxId/excludeMailboxIdswhen that matters. (get_recent_emailsis the one that excludes Trash/Spam by default.)
- Parameters:threadId(required),includeDrafts(optional, include in-progress drafts)
- Draft messages areexcluded by default(an in-progress reply is noise when reading a conversation). SetincludeDrafts: trueto include them. Drafts are identified by the$draftkeyword, so the asymmetry withsearch_emails(which includes drafts by default) is deliberate: a search should still find everything you've written.
- Parameters:threadId(required),includeDrafts(optional)
- get_mailbox_stats: Get statistics for a mailbox (unread count, total emails, etc.)
- Parameters:mailboxId(optional, defaults to all mailboxes)
- bulk_mark_read: Mark multiple emails as read/unread
- Parameters:emailIds(required array),read(default: true)
- Parameters:emailIds(required array),pinned(default: true)
- Parameters:emailIds(required array),targetMailboxId(required)
- Parameters:emailIds(required array),mailboxIds(required array)
- Parameters:emailIds(required array),mailboxIds(required array)
- list_contacts: List all contacts
- Parameters:limit(default: 50, max: 200)
- Parameters:query(required),limit(default: 20, max: 100)
- Parameters:name{given, surname, full},emails[{address, label}],phones[{number, label}],addresses[{full, label}],notes,addressBookId(all optional, but a name or one email is required)
- Parameters:contactId(required), same fields as create,expectState(optional JMAP state precondition)
- Parameters:contactId(required),expectState(optional)
- list_calendars: List all calendars
- list_calendar_events: List calendar events (core fields only — no participants for token efficiency)
- Parameters:calendarId(optional),startDate(optional, ISO 8601),endDate(optional, ISO 8601),limit(default: 50, max: 500)
- Parameters:calendarId(required),title(required),description(optional),start(required, ISO 8601 or date-only),end(required, ISO 8601 or date-only),location(optional),participants(optional array of{email, name?})
- Parameters:eventId(required),title,description,start,end,location,participants(array of{email, name?}),clearFields(array of"description"/"location"to delete),confirmRecurring(boolean)
- Recurring events: Only "all events" modification is supported (master VEVENT). "This event only" or "this and future events" are not supported. Changing start/end on recurring events with exception overrides requiresconfirmRecurring: true— orphaned exceptions are pruned to prevent server errors.
- Attendee parameters: RSVP, ROLE, CUTYPE and other attendee parameters are parsed on read but not settable on create/update — onlyemailandnameare accepted.
- list_identities: List sending identities (email addresses that can be used for sending)
- check_function_availability: Check which functions are available based on account permissions (includes setup guidance). Calendar tools run over CalDAV, so calendar is reported available when CalDAV credentials are configured, regardless of the JMAP calendar capability.
- test_bulk_operations: Safely test bulk operations with dry-run mode
- Parameters:dryRun(default: true),limit(default: 3)
This server uses the JMAP (JSON Meta Application Protocol) API provided by Fastmail. JMAP is a modern, efficient alternative to IMAP for email access.
Many features in this MCP server are inspired by the officialFastmail JMAP-Samplesrepository, including:
- Recent emails retrieval (based on top-ten example)
- Email management operations
- Efficient chained JMAP method calls
The server uses bearer token authentication with Fastmail's API. API tokens provide secure access without exposing your main account password.
Fastmail applies rate limits to API requests. The server handles standard rate limiting, but excessive requests may be throttled.
Fastmail does not currently expose calendar access via JMAP API tokens — theurn:ietf:params:jmap:calendarsscope is not available because the JMAP Calendars specification is still an IETF Internet-Draft (draft-ietf-jmap-calendars). Fastmail has stated they will add JMAP calendar support once the spec becomes an RFC, but there is no public timeline.
However, Fastmail fully supportsCalDAVfor calendar access viacaldav.fastmail.com. All calendar tools use CalDAV directly.
-
Create an app-specific password on Fastmail:
- Go toSettings → Privacy & Security → Manage app passwords
- Create a new app password (you can name it "CalDAV MCP" or similar)
Set the following environment variables:
export FASTMAIL_CALDAV_USERNAME="your-email@fastmail.com" export FASTMAIL_CALDAV_PASSWORD="your-app-specific-password" # Optional: display name for ORGANIZER when creating events with participants export FASTMAIL_CALDAV_DISPLAY_NAME="Your Name"
When these variables are set, all calendar tools are available. When they are not set, calendar tools will return an error with setup instructions.
save_attachment_to_webdavsaves attachments straight to cloud storage. Configure the target (never supplied by tools at runtime — this is deliberate, so a misbehaving caller cannot redirect uploads):
# Fastmail Files: export FASTMAIL_WEBDAV_URL="https://myfiles.fastmail.com/" export FASTMAIL_WEBDAV_USERNAME="your-email@fastmail.com" export FASTMAIL_WEBDAV_PASSWORD="app-password-with-files-scope" # ...or any WebDAV server, e.g. Nextcloud: # export FASTMAIL_WEBDAV_URL="https://cloud.example.com/remote.php/dav/files/USERNAME/"
The URL must be HTTPS. Note: Fastmail Files ignores the WebDAVIf-None-Matchprecondition, so the tool performs an explicit existence check before non-overwrite uploads.
send_email,create_draft,edit_draft, andreply_emailaccept anattachmentsarray. Each entry uses exactly one source:
- { "localPath": "report.pdf" }— a file insideFASTMAIL_DOWNLOAD_DIR(same confinement as downloads)
- { "emailId": "...", "attachmentId": "..." }— re-attach from an existing email (zero-copy: no bytes are transferred)
- { "blobId": "...", "name": "...", "type": "..." }— an already-uploaded JMAP blob
Uploads respect the server'smaxSizeUpload(~50 MB on Fastmail). Editing a draft preserves its existing attachments.
create_contact/update_contact/delete_contactneed the API token to haveread-writecontacts scope (Settings → Privacy & Security → API tokens). Read-only tokens keep the three read tools working and fail writes with aforbiddenerror.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.


