A model context protocol server that reads mails with notmuch and sends mail with sendmail
What is runekaagaard mcp notmuch sendmail
MCP Notmuch Sendmail
Status: Works great and is in daily use without any known bugs.
Status2: I just added the package to PyPI and updated the usage instructions. Please report any issues :)
Let Claude be your email assistant! MCP Notmuch Sendmail connects Claude Desktop to your notmuch email database, allowing it to:
- Search and browse your email threads
- View conversations in a clean text format
- Compose new emails using markdown
- Reply to threads with smart deduplication of quoted content
- Create beautiful emails with LaTeX-inspired styling
- Synchronize your email database by running a configured script
Uses html2text for HTML email rendering and markdown-it for composing rich HTML emails with inline images.
!MCP Notmuch Sendmail in action
Installation
Ensure you have uv installed:
# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
Usage with Claude Desktop
Add to your claude_desktop_config.json
:
{
"mcpServers": {
"email": {
"command": "uvx",
"args": ["--from", "mcp-notmuch-sendmail==2025.04.09.174710", "--python", "3.10",
"--refresh", "mcp-notmuch-sendmail"]
"env": {
"NOTMUCH_DATABASE_PATH": "/path/to/your/notmuch/db",
"NOTMUCH_REPLY_SEPARATORS": "Pipe|Separated|Phrases",
"SENDMAIL_FROM_EMAIL": "[email protected]",
"SENDMAIL_EMAIL_SIGNATURE_HTML": "<p>Optional HTML signature</p>",
"NOTMUCH_SYNC_SCRIPT": "/path/to/your/sync/script.sh",
"LOG_FILE_PATH": "/path/to/log/file.log",
"DRAFT_DIR": "/path/for/email/drafts"
}
}
}
}
Environment Variables
NOTMUCH_DATABASE_PATH
: Path to your notmuch database (required)NOTMUCH_REPLY_SEPARATORS
: Pipe-separated list of text markers - keeps email content up until the first line starting with any of these markers, removing quoted replies (required)SENDMAIL_FROM_EMAIL
: Your email address for the From: field (required)SENDMAIL_EMAIL_SIGNATURE_HTML
: HTML signature to append to emails (optional)NOTMUCH_SYNC_SCRIPT
: Path to a script for synchronizing emails (optional)LOG_FILE_PATH
: Path for logging file (optional)DRAFT_DIR
: Directory for storing email drafts (optional, defaults to /tmp/mcp-notmuch-sendmail)
API
Tools
-
find_email_thread
- Find email threads in the notmuch database
- Input:
notmuch_search_query
(string) - Returns tab-separated list of threads with format:
thread_id date subject authors
-
view_email_thread
- View all messages for an email thread
- Input:
thread_id
(string) - Returns conversation in text format with HTML->text conversion
FROM: [email protected] DATE: 2024-01-25 Message content... - - - FROM: [email protected] DATE: 2024-01-24 Earlier message...
-
compose_new_email
- Compose a new email draft from markdown. A signature will be automatically added if SENDMAIL_EMAIL_SIGNATURE_HTML is set.
- Inputs:
subject
(string): Email subjectbody_as_markdown
(string): Email body in markdownto
(list): Recipient email addressescc
(list, optional): CC recipientsbcc
(list, optional): BCC recipients
- Creates draft files and returns paths:
Created drafts: - /path/to/draft/dir/draft.md (edit this) - /path/to/draft/dir/draft.html (preview)
-
compose_email_reply
- Compose a reply to an existing email thread. A signature will be automatically added if SENDMAIL_EMAIL_SIGNATURE_HTML is set.
- Inputs:
thread_id
(string): Thread ID to reply tosubject
(string): Email subjectbody_as_markdown
(string): Email body in markdownto
(list): Recipient email addressescc
(list, optional): CC recipientsbcc
(list, optional): BCC recipients
- Creates draft files and returns paths:
Created drafts: - /path/to/draft/dir/draft.md (edit this) - /path/to/draft/dir/draft.html (preview)
-
send_email
- Sends the composed email draft
- No input required
- Returns success/error message
-
sync_emails
- Synchronizes emails by running the configured script
- No input required
- Returns the script's output including stdout and stderr
- Only available if NOTMUCH_SYNC_SCRIPT is configured
Reply Separators
The NOTMUCH_REPLY_SEPARATORS
environment variable controls email reply detection. When viewing a thread, each email's content is trimmed at the first line that starts with any of the configured separators. This effectively removes quoted replies while keeping the new content.
Here are recommended separator patterns for different languages:
English
On|wrote:|From:|Sent:|To:|Subject:|Date:|Cc:|Best regards|Kind Regards|Thanks,|Thank you,|Best,|All the best|regards,|Sent from my|Get Outlook for|CAUTION:|Disclaimer:|Warning:|Confidential:|CONFIDENTIALITY:|---------- Original Message ----------
German
Am.*schrieb|Von:|Gesendet|An:|Betreff:|Datum:|Cc:|Organisation:|Mit freundlichen Grüßen|Beste Grüße|Viele Grüße|Hinweis:|Achtung:|Gesendet von
French
Le.*a écrit|De |Envoyé |À |Objet |Cc |cordialement|salutations|bonne réception|bonne journée|Envoyé depuis
Dutch
Op.*schreef:|Van:|Verzonden|Aan:|Onderwerp:|Datum:|Cc:|Met vriendelijke groet|Hartelijke groeten|Bedankt,|Dank u,|Verzonden vanaf
Italian
Il.*ha scritto:|Da:|Inviato|A:|Oggetto:|Data:|Cc:|Cordiali saluti|Inviato da
Note: Use | (pipe) to separate patterns. These are simplified patterns derived from common email clients - you may need to adjust them based on your specific needs.
Contributing
Contributions are warmly welcomed! Whether it's bug reports, feature requests, documentation improvements, or code contributions - all input is valuable. Feel free to:
- Open an issue to report bugs or suggest features
- Submit pull requests with improvements
- Enhance documentation or share your usage examples
- Ask questions and share your experiences
The goal is to make email management with Claude even better, and your insights and contributions help achieve that.
Acknowledgments
This project builds on the excellent work of others:
- mail-parser-reply - For the comprehensive email reply marker patterns
- notmuch - The fast mail indexing and search engine
- html2text - For converting HTML emails to readable text
- markdown-it-py - For generating beautiful HTML emails
- latex.css - For the LaTeX-style email formatting
License
Mozilla Public License Version 2.0
My Other LLM Projects
- MCP Alchemy - Connect Claude Desktop to databases for exploring schema and running SQL.
- MCP Redmine - Let Claude Desktop manage your Redmine projects and issues.
- Diffpilot - Multi-column git diff viewer with file grouping and tagging.
- Claude Local Files - Access local files in Claude Desktop artifacts.
Leave a Comment
Frequently Asked Questions
What is MCP?
MCP (Model Context Protocol) is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications, providing a standardized way to connect AI models to different data sources and tools.
What are MCP Servers?
MCP Servers are lightweight programs that expose specific capabilities through the standardized Model Context Protocol. They act as bridges between LLMs like Claude and various data sources or services, allowing secure access to files, databases, APIs, and other resources.
How do MCP Servers work?
MCP Servers follow a client-server architecture where a host application (like Claude Desktop) connects to multiple servers. Each server provides specific functionality through standardized endpoints and protocols, enabling Claude to access data and perform actions through the standardized protocol.
Are MCP Servers secure?
Yes, MCP Servers are designed with security in mind. They run locally with explicit configuration and permissions, require user approval for actions, and include built-in security features to prevent unauthorized access and ensure data privacy.
Related MCP Servers
chrisdoc hevy mcp
sylphlab pdf reader mcp
An MCP server built with Node.js/TypeScript that allows AI agents to securely read PDF files (local or URL) and extract text, metadata, or page counts. Uses pdf-parse.
aashari mcp server atlassian bitbucket
Node.js/TypeScript MCP server for Atlassian Bitbucket. Enables AI systems (LLMs) to interact with workspaces, repositories, and pull requests via tools (list, get, comment, search). Connects AI directly to version control workflows through the standard MCP interface.
aashari mcp server atlassian confluence
Node.js/TypeScript MCP server for Atlassian Confluence. Provides tools enabling AI systems (LLMs) to list/get spaces & pages (content formatted as Markdown) and search via CQL. Connects AI seamlessly to Confluence knowledge bases using the standard MCP interface.
prisma prisma
Next-generation ORM for Node.js & TypeScript | PostgreSQL, MySQL, MariaDB, SQL Server, SQLite, MongoDB and CockroachDB
Zzzccs123 mcp sentry
mcp sentry for typescript sdk
zhuzhoulin dify mcp server
zhongmingyuan mcp my mac
zhixiaoqiang desktop image manager mcp
MCP 服务器,用于管理桌面图片、查看详情、压缩、移动等(完全让Trae实现)
zhixiaoqiang antd components mcp
An MCP service for Ant Design components query | 一个减少 Ant Design 组件代码生成幻觉的 MCP 服务,包含系统提示词、组件文档、API 文档、代码示例和更新日志查询
Submit Your MCP Server
Share your MCP server with the community
Submit Now