A MCP server that reads email with notmuch and uses sendmail for LaTeX-enhanced email composition
This server has moderate definition quality with some significant gaps. Tools are registered with basic descriptions and schemas, but several critical issues limit their production readiness. The server provides 6 tools with varying quality: find_email_thread and view_email_thread have reasonable descriptions but lack comprehensive schema documentation for output. The compose tools have detailed descriptions with conditional signature and image notes, but schemas are inferred from function signatures rather than explicitly documented. The send_email and sync_emails tools have minimal parameter validation (empty input dicts). Error handling guidance is absent across all tools, LLMs receive no recovery hints on failure. Output schemas are undocumented, forcing LLMs to guess response structure. Parameter descriptions exist but lack format constraints, ranges, or validation rules. The average tool scores 48/100, placing this in the 'poor' (D) tier: descriptive labels are present but incomplete specifications and missing output documentation significantly limit agent safety and correctness.
Compose a reply to an existing email thread. You can embed inline images with markdown image syntax using absolute local file paths inside SENDMAIL_ALLOWED_UPLOAD_DIRECTORIES, e.g. . NEVER write an email signature, it will be automatically added after your content!
Compose a new email draft from markdown. You can embed inline images with markdown image syntax using absolute local file paths inside SENDMAIL_ALLOWED_UPLOAD_DIRECTORIES, e.g. . NEVER write an email signature, it will be automatically added after your content!
Find email threads in the notmuch database. Returns tab-separated list with thread_id, date, subject, authors. Use max_threads to control how many results are returned (default: 25).
Sends the composed email draft
Sync emails by running the configured script
View all messages for an email thread
Output schemas completely undocumented. No tool declares what fields/structure it returns (find_email_thread returns tab-separated text, view_email_thread returns message content, compose_* return draft IDs or markdown, send_email returns confirmation). LLMs cannot plan downstream calls or extract required data without seeing response schemas.
Irreversible operations (send_email) lack confirmation/dry-run pattern and error recovery guidance. If send_email fails mid-transmission, the agent receives no hint on whether the email was sent and how to recover. No documented error classification (retryable vs fatal).
Parameter descriptions lack format constraints and validation rules. E.g. 'notmuch_search_query' has no specification of valid query syntax; 'max_threads' has no bounds (default 25, but min/max not stated); recipient email arrays lack format validation. Descriptions should state: 'must be 1-100', 'email format (RFC 5322)', 'notmuch query syntax'.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 41 | - | v1 |
Minimal parameter descriptions for send_email and sync_emails. 'Sends the composed email draft' and 'Sync emails by running the configured script' are bare-bones (<20 chars). LLMs cannot determine state dependencies (is a draft required before calling send_email?) or side effects (does sync_emails modify local state?).
view_email_thread description is incomplete: 'View all messages for an email thread' does not explain format (plaintext? HTML? markdown?), whether it includes attachments, or how large threads are handled. Missing dependency hints: 'Call find_email_thread first to get a thread_id'.
No documented error handling or recovery paths. Tools lack guidance on what happens when: notmuch database is corrupted, sendmail service is unavailable, recipient email is invalid, or draft file is missing. LLMs receive no actionable next steps on failure.
Conditional tool registration (compose_new_email, compose_email_reply, send_email only registered if SENDMAIL_FROM_EMAIL is set; sync_emails only if NOTMUCH_SYNC_SCRIPT is set) is not documented in tool availability or error messages. If a user asks to send an email but the server has no SENDMAIL_FROM_EMAIL configured, the LLM receives a 'tool not found' error with no hint on what configuration is missing.
compose_new_email and compose_email_reply both accept 'to', 'cc', 'bcc' as arrays but lack validation of email format. LLMs could pass 'John' or 'john@' (invalid). Descriptions should state: 'Each email must be a valid RFC 5322 address (e.g., user@example.com)'.