Read-only MCP server over Thunderbird's local mail index (GLODA) — search and read email from any MCP client.
Thunderbird-MCP has well-structured tool definitions with consistent naming (all start with 'tb_' verb prefix) and comprehensive parameter descriptions. All 7 tools have clear, actionable descriptions (avg ~150 chars). Input schemas are present and typed for all tools. However, output schemas are not documented, LLMs cannot predict response structure. Error handling is absent; tools return None or empty lists on failure with no guidance. No tool annotations (readOnlyHint, etc.). Parameter descriptions are good but lack explicit constraints (e.g., limit bounds, date format validation). Overall solid foundation but missing production-grade error recovery and output documentation.
List known folders (INBOX, Sent, local folders, ...) with per-folder counts.
Fetch a single message by id with its full body (up to body_chars).
List the mail accounts configured in Thunderbird (parsed from prefs.js). Returns the configured emails plus the IMAP hostnames/usernames of each server.
History of messages with a contact or domain (incoming and outgoing). Useful to reconstruct the context of a conversation before replying. Args: email_or_domain: e.g. "[email protected]", "example.com" or "@example.com". limit: max results (default 20).
Search the Thunderbird index. Args: query: text to match in subject + body + attachment names (LIKE %query%). since: ISO date, inclusive (YYYY-MM-DD or a full ISO timestamp). until: ISO date, inclusive. from_addr: filter by sender (substring of the From header). to_addr: filter by recipient (substring of To/Cc/Bcc). account: account email (e.g. "[email protected]"); filters by folder URI. folder: folder name (e.g. "Inbox", "Sent"). limit: max results (default 20, keep <= 50). Returns matches ordered newest-first, each with a 600-char body preview. Use tb_get_message for the full body.
Output schemas not documented. LLMs cannot predict response structure (dict vs list, field names, types). Forces trial-and-error parsing.
No error handling or recovery guidance. Tools return None or empty lists on failure (e.g., missing profile, DB errors) with no message explaining what went wrong or how to fix it.
Parameter constraints not explicit. 'limit' parameter lacks bounds (min/max). Date parameters (since, until) lack format validation. LLMs may pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Index stats: total indexed messages and the date range they span.
All messages in a conversation, oldest first. body_chars caps the body length per message (default 1500) to keep the response small for long threads.
No tool annotations. Tools lack readOnlyHint, destructiveHint, or idempotentHint. Agents cannot determine safety/retry semantics without reading descriptions.
tb_stats and tb_folders descriptions too generic (60 chars). Do not explain what data structure is returned or when to call them vs other discovery tools.