Skip to main content
Glama
codefuturist

Email MCP Server

by codefuturist

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MCP_EMAIL_ADDRESSYesEmail address (required)
MCP_EMAIL_IMAP_TLSNoIMAP TLStrue
MCP_EMAIL_PASSWORDYesPassword or app password (required)
MCP_EMAIL_SMTP_TLSNoSMTP TLStrue
MCP_EMAIL_USERNAMENoLogin username (defaults to email)
MCP_EMAIL_FULL_NAMENoDisplay name
MCP_EMAIL_IMAP_HOSTYesIMAP server hostname (required)
MCP_EMAIL_IMAP_PORTNoIMAP port993
MCP_EMAIL_SMTP_HOSTYesSMTP server hostname (required)
MCP_EMAIL_SMTP_PORTNoSMTP port465
MCP_EMAIL_RATE_LIMITNoMax sends per minute10
MCP_EMAIL_ACCOUNT_NAMENoAccount namedefault
MCP_EMAIL_SMTP_STARTTLSNoSMTP STARTTLSfalse
MCP_EMAIL_SMTP_VERIFY_SSLNoVerify SSL certificatestrue
MCP_EMAIL_SMTP_POOL_ENABLEDNoEnable SMTP transport poolingtrue
MCP_EMAIL_SMTP_POOL_MAX_MESSAGESNoMax messages per pooled connection100
MCP_EMAIL_SMTP_POOL_MAX_CONNECTIONSNoMax pooled SMTP connections1

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}
resources
{
  "subscribe": true,
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_accountsA

List all configured email accounts. Call this first to discover available account names for use with other tools.

list_mailboxesA

List all mailbox folders for an account with unread counts and special-use flags. Use list_accounts first to get the account name.

list_emailsA

List emails in a mailbox with optional filters. Returns paginated results with metadata (read/unread πŸ”΅, flagged ⭐, replied ↩️, attachments πŸ“Ž, labels 🏷️). List or machine-generated mail is marked πŸ“° newsletter / πŸ€– automated from its RFC headers, with the unsubscribe URI when the sender offers one β€” personal mail carries no marker. Use get_email to fetch full body content. ProtonMail note: labels are represented as IMAP folders β€” use list_labels to discover them, then list_emails with mailbox="Labels/X" to find labeled emails.

get_emailA

Get the full content of a specific email by ID. Does NOT mark the email as seen (uses IMAP BODY.PEEK β€” non-destructive). format: text (default) = HTML converted to readable text with markdown; stripped = text minus quoted replies and signatures; full = raw body part (HTML mail returns raw HTML). Body is capped at 10000 chars by default β€” pass maxLength (0 = unlimited) to change. Set markRead=true only when you want to explicitly mark the email as read. A Bulk: line appears for list or machine-generated mail (πŸ“° newsletter / πŸ€– automated), derived from RFC headers, with the unsubscribe URI when the sender offers one.

get_emailsA

Fetch the full content of multiple emails in a single call (max 20). More efficient than calling get_email repeatedly when triaging or summarising several emails. Does NOT mark emails as seen. Defaults to format="text" (HTML stripped) for compact, AI-friendly output. Each message carries the same πŸ“° newsletter / πŸ€– automated marker as get_email.

get_email_statusA

Get the current read/flag/label state of an email without fetching its body. Much cheaper than get_email when you only need to check whether an email is unread, flagged, or which labels it has. Also useful to confirm the result of a mark_email call. Does NOT mark the email as seen.

search_emailsA

Search emails by keyword across subject, sender, and body β€” and, where the local mirror is enabled, attachment filenames (searching "report" finds an email carrying Q3-report.pdf). Omit query (or pass an empty string) to use it as a pure filter β€” e.g. find all emails from a specific sender without a keyword. Supports additional filters for sender, recipient, date range (since/before β€” INTERNALDATE; sent_since/sent_before β€” Date: header), attachments, size, and reply status. At least one of query/from/to/since/before/sent_since/sent_before/has_attachment/larger_than/smaller_than/answered must be set; otherwise the call errors (use list_emails to browse without filters). Results carry the same πŸ“° newsletter / πŸ€– automated markers as list_emails.

download_attachmentA

Download an email attachment by filename or part id. First use get_email to see available attachments with their filenames and partIds (partId is unambiguous β€” use it for duplicate filenames and inline cid images). Returns base64-encoded content for files ≀5MB. saveToDownloadDir is unavailable β€” no attachment download directory is configured on this server.

extract_contactsA

Extract unique contacts from recent email headers. Returns contacts sorted by frequency (most frequent first). Useful for finding frequent correspondents or building an address book.

get_threadA

Reconstruct a full email conversation thread by following References and In-Reply-To headers. Returns all related messages. Does NOT mark emails as seen. format: text (default) = HTML converted to readable text with markdown; stripped = text minus quoted replies; full = raw body part. Each body is capped at 5000 chars by default β€” pass maxLength (0 = unlimited) to change. Use newestFirst=true to show the most recent message in full and older messages as header-only summaries. Use get_email first to obtain the message_id. Each message carries a Bulk line when it is list or machine-generated mail.

list_templatesA

List all available email templates. Templates are TOML files in ~/.config/email-mcp/templates/ with {{variable}} placeholders for subject and body.

extract_calendarB

Extract calendar events (ICS/iCalendar) from an email. Returns structured event data including time, location, attendees, and status.

add_to_calendarA

Add an email event to the local calendar (macOS Calendar.app / Linux via xdg-open). Automatically extracts event data from the email: ICS attachments, meeting URL (Zoom/Teams/Meet), conference dial-in / ID / passcode, attendees, and email body excerpt. All relevant email attachments (PDFs, docs, etc.) are saved locally and linked in the event notes. A native confirmation dialog is shown on macOS before the event is written. Returns one of: added | cancelled | timed_out | no_display.

check_calendar_permissionsA

Check whether the local calendar is accessible. On macOS, verifies Calendar.app access (requires Privacy & Security β†’ Calendars permission). Returns granted status and step-by-step setup instructions if access is denied.

list_calendarsA

List all available local calendars (macOS Calendar.app / Linux default). Use the returned calendar names with add_to_calendar to target a specific calendar.

list_eventsA

List local calendar events with optional filters. Search by title, date range, or calendar name. Use to check for existing events before creating new ones, or to verify a recently added event. Returns event id, title, start/end time, location, and calendar name.

list_remindersA

List reminders from macOS Reminders.app with optional filters. Search by title or list name. By default only shows incomplete reminders. Use to check for existing reminders before creating new ones, or to verify a recently added reminder. Returns reminder id, title, due date, completion status, priority, and list name.

create_reminderA

Create a reminder in macOS Reminders.app from an email. Shows a native confirmation dialog before adding. The reminder notes include a message: deep link that reopens the source email in Mail.app. Use for action items, deadlines, and follow-up tasks extracted from emails. Use analyze_email_for_scheduling first to let the AI decide if a reminder is appropriate.

analyze_email_for_schedulingA

Analyze an email to detect calendar events and/or reminder-worthy content. Returns structured analysis so the AI can decide whether to call add_to_calendar, create_reminder, both, or neither. Use this as the first step before creating any scheduling resource.

get_email_statsA

Get email statistics and analytics for a mailbox. Shows volume, top senders, daily trends, and read/flagged counts.

check_healthA

Check connection health, quota, and capabilities for email accounts, plus local cache size, coverage and hit ratio. Useful for diagnosing issues.

find_email_folderA

Find a real mailbox folder an email belongs to. Required before move_email or delete_email when the email was found in a virtual folder (e.g., "All Mail", "Starred"). Returns the first real folder path found, to use as sourceMailbox; on a label-based server a message may also sit in other folders.

get_watcher_statusB

Get the status of IMAP IDLE watcher connections and recent activity.

list_presetsA

List all available AI triage presets with their descriptions and suggested labels.

get_hooks_configA

Get the current AI hooks configuration including preset, rules, and custom instructions.

check_notification_setupA

Diagnose desktop notification support on this platform. Checks if required OS tools are available and provides setup instructions to enable notification permissions (macOS, Linux, Windows).

test_notificationA

Send a test desktop notification to verify that OS permissions are correctly configured. Use check_notification_setup first to diagnose any issues.

configure_alertsA

Update alert/notification settings at runtime. Changes take effect immediately. Use save=true to persist changes to the config file. Omit any field to leave it unchanged.

get_verification_codeA

Find the newest verification code (OTP/2FA) or sign-in magic link in recent mail, using false-positive-resistant scoring (EN/DE). Use wait_seconds (max 45) to wait for a mail still in flight; if nothing arrives, simply call again. Works without the watcher via polling β€” with [settings.watcher] enabled, hits land within ~1 second. Set copy_to_clipboard=true to also place the value on the clipboard (concealed from clipboard managers, auto-cleared). The code/link is returned in the result by design.

check_clipboard_setupA

Diagnose the clipboard integration used for caught verification codes: platform tools, concealed-write support, current [settings.verification] values, and the watcher prerequisite. With test_write=true it performs a harmless clipboard round-trip (writes a test string, reads it back, clears it).

configure_verificationA

Update [settings.verification] at runtime β€” changes take effect immediately, including starting/stopping the ambient catcher via enabled. Use save=true to persist to config.toml (previous file is backed up). Omit every field to see the current configuration. Registered in read-only mode too: this writes config, never the mailbox.

send_emailB

Send a new email. Supports plain text or HTML body, CC, and BCC.

reply_emailA

Reply to an email with proper threading (In-Reply-To & References headers). Use get_email first to read the original. The original message is quoted below the reply by default (Thunderbird/Outlook style) β€” set quoteOriginal=false for the bare body only.

forward_emailA

Forward an email to new recipients with optional additional message. The original is converted to readable text and "> "-quoted below your note; its attachments are re-attached unless includeAttachments is false. Set html=true to also send an HTML part carrying the original HTML in a blockquote.

move_emailA

Move an email to a different mailbox folder. The sourceMailbox must be a real folder, not a virtual one like "All Mail". Use find_email_folder first if the email was discovered in a virtual folder.

delete_emailA

Delete an email. By default moves to Trash. Set permanent=true for permanent deletion (⚠️ irreversible). The mailbox must be a real folder. Use find_email_folder first if the email was found in a virtual folder.

mark_emailA

Change email flags β€” mark as read/unread, flag/unflag. Idempotent: marking an already-read email as read is a no-op.

list_labelsA

List available labels for an email account. Auto-detects the label system: ProtonMail folder-labels, Gmail X-GM-LABELS, or IMAP keywords. ProtonMail note: labels are represented as IMAP folders under the Labels/ prefix. Use list_emails with mailbox="Labels/" to find emails tagged with a ProtonMail label.

add_labelA

Add a label to an email. For ProtonMail, this copies the email into the corresponding Labels/ folder. For Gmail and standard IMAP, this sets a keyword flag on the message.

remove_labelA

Remove a label from an email. For ProtonMail, this removes the email from the label folder. For Gmail and standard IMAP, this removes a keyword flag.

create_labelA

Create a new label. For ProtonMail, creates a folder under Labels/. For standard IMAP keywords, labels are auto-created on first use β€” this is a no-op.

delete_labelA

Delete a label. For ProtonMail, deletes the label folder. For standard IMAP keywords, labels cannot be deleted server-wide β€” use remove_label on individual emails.

bulk_actionA

Batch operation on multiple emails by UID list. Supports mark_read, mark_unread, flag, unflag, move, and delete. Max 100 IDs per call. Returns success/failure counts.

save_draftA

Save an email draft to the Drafts folder. Compose over time, then use send_draft to send it. Use list_emails with the Drafts mailbox to see saved drafts.

send_draftA

Send an existing draft email and remove it from Drafts. The draft is fetched, sent via SMTP, then deleted. Use list_emails with the Drafts mailbox to find draft IDs.

create_mailboxA

Create a new mailbox (folder). Use '/' as separator for nested folders (e.g., 'Work/Projects'). Use list_mailboxes to see existing folders.

rename_mailboxA

Rename an existing mailbox (folder). Use list_mailboxes to see current folder paths.

delete_mailboxA

⚠️ DESTRUCTIVE: Permanently delete a mailbox and ALL its contents. This cannot be undone. Use list_mailboxes to verify the folder path.

apply_templateA

Apply an email template with variable substitution. Use action "preview" to see the result, "draft" to save as draft, or "send" to send immediately.

schedule_emailA

Schedule an email to be sent at a specific time in the future. The email is queued locally and sent automatically when the time arrives.

list_scheduledB

List scheduled emails. Shows pending, sent, or all scheduled emails.

cancel_scheduledA

Cancel a scheduled email. Removes it from the queue and deletes the associated draft.

Prompts

Interactive templates invoked by user choice

NameDescription
triage_inboxAnalyze unread emails and categorize by urgency. Produces a structured triage report with recommended actions.
summarize_threadSummarize an email conversation thread. Produces a structured report with participants, timeline, decisions, and action items.
compose_replyDraft a professional reply to an email with tone control. Fetches the original email and optionally the full thread for context.
draft_from_contextCompose a new email about a topic, searching past emails for relevant context to reference naturally.
extract_action_itemsScan recent emails and extract action items, deadlines, and commitments. Produces a structured task list with source references.
summarize_meetingsScan recent emails for calendar invites and produce a meeting overview grouped by timeframe.
cleanup_inboxAI-guided inbox cleanup β€” categorizes emails and suggests or executes organization actions.

Resources

Contextual data attached and managed by the client

NameDescription
accountsList of all configured email accounts
scheduledList of pending scheduled emails
default β€” Mailbox treeFolder structure and message counts for user@example.com
default β€” Unread summaryUnread email counts by folder for user@example.com
default β€” Inbox StatsEmail statistics snapshot for user@example.com

TDQS

A3.5/5.0

Scored across 52 tools

Disambiguation3/5

Many tools target the same resource with overlapping actionsβ€”e.g., list_emails vs search_emails, get_email vs get_emails vs get_email_status, and mark_email vs bulk_actionβ€”so an agent could easily misselect despite detailed descriptions. Calendar/reminder tools (extract_calendar, analyze_email_for_scheduling, add_to_calendar) also have blurry boundaries. Some overlap exists but descriptions help.

Naming Consistency4/5

Tool names consistently use snake_case and mostly follow a verb_noun pattern (list_emails, send_email, create_label, delete_mailbox). A few deviations like bulk_action (noun phrase) and list_scheduled (missing noun) are minor. The convention is predictable overall.

Tool Count1/5

52 tools is far beyond the 3–15 typical for a well-scoped server and exceeds the 50+ threshold for extreme mismatch. Even accounting for the broad email+calendar+reminders scope, the surface is heavily overloaded with many niche configuration and diagnostic tools.

Completeness4/5

Email lifecycle is thoroughly covered: list/get/search/send/reply/forward/move/delete/mark/label/draft/schedule/templates. However, calendar and reminder operations lack update/delete tools, and account management (add/remove) is absent, leaving some dead ends.

Maintenance

ActivityMaintained
ResponsivenessResponsive