thunderbird-mcp-server
Centralizes Thunderbird email operations as MCP tools: read, send, draft, search, attachments.
README
Thunderbird MCP Server v0.2.0
Centralizes Thunderbird email operations as MCP tools: read, send, draft, search, attachments.
Status
| Aspect | State |
|---|---|
| Core development | Complete |
| Unit tests | 5/5 PASS |
| Deployment | Active (opencode MCP) |
| Agent integration | communication-drafter (draft-only) |
Tools
| Tool | Description | Agent access |
|---|---|---|
tb_list_folders |
List available Thunderbird mail folders | ✅ read |
tb_read_messages |
Read messages from a folder with pagination | ✅ read |
tb_search_messages |
Search messages by keyword | ✅ read |
tb_download_attachments |
Download attachments from a message | ✅ read |
tb_draft_message |
Create a draft email in Thunderbird | ✅ write |
tb_send_message |
Send email via Thunderbird compose command | ❌ forbidden |
Configuration
Environment variables:
THUNDERBIRD_PROFILE_DIR— Thunderbird profile directory (default: ~/.thunderbird)THUNDERBIRD_MAIL_DIR— Local mail data directory (default: ~/Downloads/thunderbird.tmp)THUNDERBIRD_SEND_COMMAND— Command to invoke Thunderbird (default: thunderbird)THUNDERBIRD_DEFAULT_ACCOUNT— Default account identifier (optional)THUNDERBIRD_DRAFT_FOLDER— Drafts folder name (default: Drafts)
Installation
Due to PEP 668 restrictions, use PYTHONPATH approach:
export PYTHONPATH=src
python3 -m thunderbird_mcp_server
Or use the provided wrapper:
bash run.sh
Development:
.venv/bin/pip install -e ".[dev]"
Running
bash run.sh
# or directly with PYTHONPATH:
PYTHONPATH=src python3 -m thunderbird_mcp_server
Testing
PYTHONPATH=src .venv/bin/pytest tests/ -v
Test coverage:
test_list_folders— discovers mbox folders from temp mail dirtest_read_messages— parses mbox with verified subject/body extractiontest_search_messages— keyword search across folderstest_list_folders_uses_unique_relative_names— multi-account path deduptest_modified_utf7_folder_name_decoding— IMAP modified UTF-7 decoding (e.g. Chinese folder names)
Integration with opencode
Registered in .opencode/opencode.json:
{
"mcp": {
"thunderbird-mcp-server": {
"type": "local",
"command": ["bash", "/home/gw/opt/thunderbird-mcp-server/run.sh"],
"enabled": true,
"environment": {
"THUNDERBIRD_PROFILE_DIR": "/home/gw/snap/thunderbird/common/.thunderbird/34p30y9x.default",
"THUNDERBIRD_MAIL_DIR": "/home/gw/snap/thunderbird/common/.thunderbird/34p30y9x.default/ImapMail",
"THUNDERBIRD_SEND_COMMAND": "/snap/bin/thunderbird"
}
}
}
}
Agent integration: communication-drafter is the sole authorized agent, granted read/search/draft tools only. tb_send_message is forbidden at the static check level (scripts/check_agent_tool_budget.py). Sending remains a manual user action.
Architecture
config.py— ThunderbirdConfig dataclass, reads from env varsclient.py— ThunderbirdClient: reads mbox folders, parses messages, sends via CLIserver.py— MCP Server with 6 tool definitions and stdio transporttools/— Shared tool parameter schemas
Limitations
- Large mbox timeout: Folders with thousands of messages (e.g. INBOX) may exceed MCP timeouts during read/search. Mitigation: use
limitandoffsetfor pagination, or target smaller subfolders. - Local mbox dependency: Read operations require Thunderbird to have downloaded mail locally (offline storage enabled). Folders with only
.msfindexes return placeholder messages. - Send is interactive:
tb_send_messageopens the Thunderbird compose window; it is not fully automated. This tool is explicitly denied to all agents — sending is a manual user action. - MSF-only folders: Return
[MSF index only — no message data]placeholder. - PEP 668:
pip install -e .is blocked; usePYTHONPATH=srcapproach. tb_send_messagedenied: Static check inscripts/check_agent_tool_budget.pyprevents any agent from being granted this tool.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.