by MadLlama25
Unofficial MCP server for the Fastmail JMAP API — email, contacts, and calendar tools for AI assistants. Not affiliated with Fastmail. Includes a DXT for Claude Desktop.
# Add to your Claude Code skills
git clone https://github.com/MadLlama25/fastmail-mcpLast scanned: 5/30/2026
{
"issues": [
{
"type": "npm-audit",
"message": "express-rate-limit: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "fast-uri: fast-uri vulnerable to path traversal via percent-encoded dot segments",
"severity": "high"
},
{
"type": "npm-audit",
"message": "hono: Hono has CSS Declaration Injection via Style Object Values in JSX SSR",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "ip-address: ip-address has XSS in Address6 HTML-emitting methods",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "qs: qs has a remotely triggerable DoS: qs.stringify crashes with TypeError on null/undefined entries in comma-format arrays when encodeValuesOnly is set",
"severity": "medium"
}
],
"status": "WARNING",
"scannedAt": "2026-05-30T16:26:07.842Z",
"npmAuditRan": true,
"pipAuditRan": true
}fastmail-mcp is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by MadLlama25. Unofficial MCP server for the Fastmail JMAP API — email, contacts, and calendar tools for AI assistants. Not affiliated with Fastmail. Includes a DXT for Claude Desktop. It has 124 GitHub stars.
fastmail-mcp returned warnings in SkillsLLM's automated security scan. It has no critical vulnerabilities, but review the flagged issues in the Security Report section before adding it to your workflow.
Clone the repository with "git clone https://github.com/MadLlama25/fastmail-mcp" and add it to your Claude Code skills directory (see the Installation section above).
fastmail-mcp is primarily written in TypeScript. It is open-source under MadLlama25 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh fastmail-mcp against similar tools.
No comments yet. Be the first to share your thoughts!
Requires a passing catalog security scan. Resolve the flagged issues and resubmit to enable featuring.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
An unofficial Model 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 is not 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.
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,
# 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"
Start the MCP server:
npm start
For development with auto-reload:
npm run dev
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-mcpdoes not work on npm 10 (a known npmGitFetcherbug). Use the clone above, or install the packaged Desktop Extension.
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)~/Downloads/fastmail-mcp/save_attachment_to_webdav (see WebDAV 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 — total is the server-reported match count, items the returned page. When the server reports no total, a bare array is returned.
🎯 Most Popular Tools:
properties for a slim view.
properties (optional array of fields to return), parentId (optional; only children of this mailbox, null for top level)Inbox/Receipts)
path (required)name (required), parentId (optional, omit or null for top level)mailboxId (optional), limit (default: 20, max: 100), ascending (optional, oldest first)mailboxId (optional), limit (default: 20, max: 100), ascending (optional, oldest first)emailId (required)emailId (required)inReplyTo and references headers)
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 — see Email attachments on send)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), attachments (optional array — see Email attachments on send)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 — see Email attachments on send)emailId (required), to, cc, bcc, from, subject, textBody, htmlBody, replyTo, attachments (all optional)emailId (required)query (required), limit (default: 20, max: 100), ascending (optional, oldest first), excludeDrafts (optional, omit draft messages)excludeDrafts: true to filter them out server-side.advanced_search with excludeMailboxIds) rather than trusting a bare search count.limit (default: 10, max: 50), mailboxName (optional), ascending (optional, oldest first)mailboxName is omitted, all mailboxes are searched except Trash and Spam. Pass a mailbox