Thunderbird MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| mail_searchA | Search the user's mail. Combine
|
| mail_listA | List messages in one folder, newest first by default. Use |
| mail_getA | Read one message.
|
| mail_get_manyA | Read up to 50 messages in one round trip — for triaging a search result. |
| mail_get_sourceA | Fetch a message's raw RFC 5322 source, for header forensics. On IMAP this needs the message to be available offline; the tool says so rather than returning a partial. |
| mail_attachmentsB | List a message's attachments with part names, sizes and content types. |
| mail_save_attachmentA | Write one attachment to a directory on this machine.
|
| mail_markA | Set read/flagged/junk state or adjust tags on one or more messages. Cheap and reversible, so no confirmation is required. Tag keys come from
|
| mail_moveB | Move messages into another folder. On IMAP the move is asynchronous — the tool waits for Thunderbird to confirm before returning, so a following search reflects the change. |
| mail_copyC | Copy messages into another folder, leaving the originals in place. |
| mail_archiveA | Archive messages using each account's configured archive layout. |
| mail_deleteA | Delete messages. Moves to Trash unless A permanent delete cannot be undone from Thunderbird, so prefer the default and let the user empty Trash themselves. |
| mail_tagsA | List the tags defined in Thunderbird, with keys, labels and colours. |
| mail_tag_upsertA | Create a tag, or recolour/rename an existing one.
|
| mail_tag_deleteB | Remove a tag definition. Messages keep the raw keyword but lose the label. |
| folder_listA | List mail folders with their ids and message counts. With no filters this browses: every account's root folder plus one level
below it. Raise Counts come from Thunderbird's own folder database. On IMAP that database can lag until the folder has been selected once in Thunderbird, so treat unread and total counts as close rather than exact. |
| folder_getA | Get one folder: counts, special use, flags and IMAP quota. Use this to re-check a count after a move or a delete; |
| folder_capabilitiesA | Report what may be done to a folder before attempting it. Answers whether the folder can hold messages, take subfolders, be renamed, be deleted, or have messages deleted from it. Worth a call before offering the user a plan that a server would refuse. |
| folder_get_unifiedA | Get the unified folder that spans every account, e.g. all inboxes at once. Its id works anywhere a folder id is accepted, so |
| folder_createC | Create a folder inside another folder, or at the top of an account. |
| folder_renameB | Rename a folder, keeping its messages and subfolders. |
| folder_moveA | Move a folder under a different parent, with its subfolders.
|
| folder_copyA | Copy a folder and its contents under another parent, leaving the original. |
| folder_deleteA | Delete a folder, its subfolders and every message in them. Thunderbird moves the folder to Trash unless it is already inside Trash, in
which case it goes for good. Check |
| folder_mark_readA | Mark every message in a folder as read. There is no per-message undo for this, which is why it asks first. On IMAP the flags are pushed to the server. |
| folder_set_favoriteA | Add or remove a folder from the user's favourites. Cosmetic and reversible — it only affects the folder pane's Favourites view, so it is not gated. Prompting for something this harmless would only train the user to click through the prompts that do matter. |
| folder_empty_trashA | Permanently delete everything in one account's Trash. This is not recoverable from Thunderbird. Give |
| folder_empty_junkA | Permanently delete everything in one account's Junk folder. Subfolders of Junk are emptied but kept, since they are usually filter targets the user set up deliberately. Not recoverable. |
| folder_sync_offlineA | Fetch an IMAP folder's message bodies so they are available offline. This is what |
| folder_compactA | Reclaim the disk space left behind by deleted messages. Deleted mail stays in the message store until the folder is compacted. Pass
|
| mail_sendA | Write a message. Saves a reviewable draft unless
|
| mail_replyA | Reply to a message. Saves a reviewable draft unless Thunderbird derives the recipients, the subject and the quoted original;
|
| mail_forwardB | Forward a message. Saves a reviewable draft unless
|
| mail_draft_saveA | Save a message without sending it, as a draft or a template. Nothing leaves the machine, so this is not gated — a draft is exactly the thing to produce when you want the user to review before anything is sent. A template is the reusable kind: Thunderbird keeps it in Templates and opens a copy when the user picks it. Recipients are optional here, unlike a send. |
| mail_compose_openA | Open a populated compose window for the user to finish by hand. The right answer whenever the wording matters more than the automation, or when the user declined a send: they get the draft in front of them with the cursor in it. Nothing is sent or saved, and the user sees the window appear, so this is not gated. |
| mail_send_statusA | List messages sitting in the Outbox, unsent. An empty list is the normal answer. Anything here was queued with
|
| search_globalA | Ranked full-corpus search across every indexed folder and account. Best for open questions — "what did we agree about the shipment", "anything
from the accountant about VAT". Results carry a relevance score and a
conversation id you can pass to If this returns nothing unexpectedly, call |
| search_conversationA | Every message in one thread, oldest first, across folders and accounts. Give either a |
| search_index_statusA | Whether Thunderbird's global index is enabled, and how far along it is. Call this to explain an empty |
| search_saved_listA | List the saved searches (virtual folders) and what each one matches. |
| search_saved_createA | Create a saved search that appears in the folder pane.
Nothing is copied or moved — a saved search is a stored query. |
| search_saved_updateA | Redefine an existing saved search, by name or uri. Only what you pass is replaced; |
| search_saved_deleteA | Remove a saved search. The messages it listed are not touched. A saved search only stores a query, so deleting one loses the query and nothing else — but the query itself is not recoverable, hence the prompt. |
| tb_statusA | Whether Thunderbird is attached, and which halves of the add-on loaded. Answered by the local daemon, so it works when Thunderbird is closed. Call it first whenever another tool reports that it cannot reach Thunderbird. |
| tb_waitA | Block until Thunderbird attaches to the bridge, then report status. Use it after |
| tb_eventsA | Read buffered Thunderbird notifications: new mail, folder and account changes. Poll with |
| tb_diagnosticsA | One report: versions, profile, which capabilities loaded, accounts, indexing. The first thing to fetch when anything behaves oddly. It includes whether this build permits unsigned add-ons and experiment APIs, which is what explains a half-installed bridge, and the message store type per account. |
| tb_consoleA | Recent lines from Thunderbird's error console, newest last. Narrow it with |
| tb_addonsA | List installed add-ons with their enabled and signature state.
|
| tb_restartA | Restart Thunderbird. Every call in flight fails, including other clients'. The bridge connection drops, so this returns before the restart happens and
the result says nothing about whether it succeeded — wait with |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/U-C4N/Thunderbird-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server