A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
A Model Context Protocol (MCP) server that provides access to the Fastmail API, enabling AI assistants to interact with
A Model Context Protocol (MCP) server that provides access to the Fastmail API, enabling AI assistants to interact with email, contacts, and calendar data.
Clone or download this repository
Install dependencies:
npm install
Build the project:
npm run build
Get your Fastmail API token:
Set environment variables:
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.
# 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/)
export FASTMAIL_DOWNLOAD_DIR="/path/to/your/downloads"
Start the MCP server:
npm start
For development with auto-reload:
npm run dev
Default to main branch:
FASTMAIL_API_TOKEN="your_token" FASTMAIL_BASE_URL="https://api.fastmail.com" \
npx --yes github:MadLlama25/fastmail-mcp fastmail-mcp
Windows PowerShell:
$env:FASTMAIL_API_TOKEN="your_token"
$env:FASTMAIL_BASE_URL="https://api.fastmail.com"
npx --yes github:MadLlama25/fastmail-mcp fastmail-mcp
Pin to a tagged release:
FASTMAIL_API_TOKEN="your_token" \
npx --yes github:MadLlama25/fastmail-mcp@v1.9.4 fastmail-mcp
You can install this server as a Desktop Extension for Claude Desktop using the packaged .dxt file.
Build and pack:
npm run build
npx @anthropic-ai/dxt pack
This produces fastmail-mcp.dxt in the project root.
Install into Claude Desktop:
.dxt file, or drag it into Claude Desktophttps://api.fastmail.com (default)Use any of the tools (e.g. get_recent_emails).
🎯 Most Popular Tools:
mailboxId (optional), limit (default: 20), ascending (optional, oldest first)emailId (required)inReplyTo and references headers)
to (required array), 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)send=false to save as draft instead of sending.
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)to (required array), cc (optional array), bcc (optional array), from (optional), subject (required), textBody (optional), htmlBody (optional), inReplyTo (optional array), references (optional array)to (optional array), cc (optional array), bcc (optional array), from (optional), mailboxId (optional), subject (optional), textBody (optional), htmlBody (optional), replyTo (optional array)query (required), limit (default: 20), ascending (optional, oldest first)limit (default: 10, max: 50), mailboxName (default: 'inbox'), ascending (optional, oldest first)emailId (required), read (default: true)emailId (required)emailId (required), targetMailboxId (required)emailId (required), mailboxIds (required array)emailId (required), mailboxIds (required array)emailId (required)emailId (required), attachmentId (required), savePath (optional)query (optional), from (optional), to (optional), subject (optional), hasAttachment (optional), isUnread (optional), mailboxId (optional), after (optional), before (optional), limit (default: 50), ascending (optional, oldest first)threadId (required)mailboxId (optional, defaults to all mailboxes)emailIds (required array), read (default: true)emailIds (required array), targetMailboxId (required)emailIds (required array)emailIds (required array), mailboxIds (required array)emailIds (required array), mailboxIds (required array)limit (default: 50)contactId (required)query (required), limit (default: 20)calendarId (optional), limit (default: 50)eventId (required)calendarId (required), title (required), description (optional), start (required, ISO 8601), end (required, ISO 8601), location (optional), participants (optional array)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 official Fastmail JMAP-Samples repository, including:
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 — the urn:ietf:params:jmap:calendars scope 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 supports CalDAV for calendar access via caldav.fastmail.com. This server automatically falls back to CalDAV when JMAP calendar access is unavailable.
Create an app-specific password on Fastmail:
Set the following environment variables:
export FASTMAIL_CALDAV_USERNAME="your-email@fastmail.com"
export FASTMAIL_CALDAV_PASSWORD="your-app-specific-password"
When these variables are set, the calendar tools (list_calendars, list_calendar_events, get_calendar_event, create_calendar_event) will automatically fall back to CalDAV if JMAP calendars are not available. When these variables are not set, the server behaves exactly as before (JMAP only).
src/
├── index.ts # Main MCP server implementation
├── auth.ts # Authentication handling
├── jmap-client.ts # JMAP client wrapper
├── contacts-calendar.ts # Contacts and calendar extensions
└── caldav-client.ts # CalDAV calendar client (fallback)
npm run build
npm run dev
MIT
Contributions are welcome! Please ensure that:
npm install to ensure all dependencies are installednpm run buildcheck_function_availability to see setup guidanceIf get_email, list_emails, search_emails, or advanced_search fail with "content serialization" or "Cannot read properties of undefined" errors, upgrade to v1.7.1+. This was caused by incomplete JMAP response validation that surfaced after the MCP SDK v1.x upgrade added stricter result checking.
If calendar and contacts functions return "Forbidden" errors, this is likely due to:
Solution: Run check_function_availability for step-by-step setup guidance.
Use the built-in testing tools:
For more detailed error information, check the console output when running the server.
A Jetbrains IDE IntelliJ plugin aimed to provide coding agents the ability to leverage intelliJ's indexing of the codeba
MCP server integration for DaVinci Resolve Studio
Run Claude Code as an MCP server so any agent can delegate coding tasks to it