Thunderbird MCP
The Thunderbird MCP server enables deep AI agent control over a running Thunderbird instance, providing 112 tools across 10 toolsets for managing emails, folders, composition, search, contacts, calendar, filters, accounts, settings, and diagnostics, with safety features like confirmations and dry runs.
Email Management: Search, list, read (summary, text, full MIME, raw source), manage attachments (list/save), mark (read/flagged/junk/tags), move, copy, archive, delete; manage tag definitions.
Folder Operations: List (with details, unified folders), create, rename, move, copy, delete; mark all as read, favorite, empty Trash/Junk, sync offline, compact.
Compose & Send: Send, reply, forward (draft by default, with send and later modes), save drafts/templates, open compose window, check Outbox.
Search: Full-text ranked search across indexed folders, reconstruct conversations, check index status, manage saved searches (virtual folders).
Contacts & Address Books: Search, list, get, create, update, delete contacts; manage address books and mailing lists.
Calendar & Tasks: Manage calendars; create, read, update, delete events and tasks, including recurring series.
Message Filters: List, create, update, enable/disable, reorder, delete filters; run on demand.
Account & Server Settings: Configure incoming servers, junk settings, folder filing, offline/sync, identities (addresses, signatures), SMTP servers.
Preferences & Settings: Read/write/reset preferences, manage junk training and OpenPGP keys.
Diagnostics & Admin: Check connection, wait for reconnect, events, diagnostics, error console, add-ons, restart.
Provides tools to control the Thunderbird email client, including mail search, folder management, compose, settings, calendar, and message filters.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Thunderbird MCPdraft an email to Sarah about the quarterly report"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Thunderbird MCP
An MCP server that lets an AI agent drive the Thunderbird already running on your machine — mail, folders, contacts, calendar, filters and settings — through Thunderbird's own internals. Not a copy of your mailbox and not an IMAP client: the same Thunderbird you have open.
Built for Claude Code and Codex CLI, and able to serve both at once.
What is new in 1.3.0
Search works. Every search tool in 1.2.0 was broken by six separate defects (reported in #3).
mail_search,search_globalandsearch_conversationnow return results, dates, scores and participants, and folder scoping actually scopes.Paging keeps every message. A cursor no longer skips the rest of the page it stopped in.
Errors mean something. No more "An unexpected error occurred": a failure says what to change, on every
mcpSDK version, and a large answer no longer drops the connection.The bridge explains itself.
tb_statusandtbmcp doctorreport both sides of the connection, name the remedy, warn when the installed add-on is older than the package, and point at the daemon's log.Tests that see the add-on. 111 node tests run the real add-on scripts; 288 Python tests; CI on Windows, macOS and Linux with Python 3.11–3.14.
Details in CHANGELOG.md.
Related MCP server: Thunderbird MCP
Quick start
git clone https://github.com/U-C4N/Thunderbird-MCP
cd Thunderbird-MCP
python bootstrap.py --clients claude-code,codexOne command builds the environment, installs the add-on (Thunderbird restarts
once), registers the clients you name and verifies the chain. Re-running it is safe.
Agents can parse python bootstrap.py --json instead of the human output.
Then ask your agent something — "what did the accountant say about VAT in June?", "archive everything from newsletters older than a month", "draft a reply to the last mail from Ali and let me read it first".
Prefer to register a client by hand? tbmcp setup --print-config all prints the
exact block for Claude Code, Codex, Claude Desktop, Cursor, VS Code, Gemini CLI and
Zed. Use python -m tbmcp serve as the command, with an absolute interpreter path.
What you can do
Find | ranked full-text search across every account, threads rebuilt across Inbox, Sent and archives, substring filters by folder, sender, date, tag |
Triage | mark, tag, move, archive, file in bulk — with the source folder reported so a wrong move is reversible |
Write |
|
Configure | server ports and security, identities and signatures, SMTP servers, junk handling, ~5,700 preferences — every write reports the old value so it can be undone |
Automate | create, reorder and run message filters; events and tasks on the calendar |
Diagnose |
|
Safety
Reads are unrestricted. Anything that sends, deletes or changes configuration needs
confirm=true, carries destructiveHint, and prompts for approval on clients that
support elicitation. mail_send drafts unless told mode="send"; dry_run_only
previews a write; preference writes are allowlisted and credentials, proxy and
security prefs are refused at both layers. --read-only registers no mutating tool
at all.
Toolsets
Tools are grouped so an agent only pays context for what it uses. The default set is
mail, folders, compose, search and admin; add the rest with --toolsets.
tbmcp serve --toolsets all # everything
tbmcp serve --toolsets +calendar # the default set plus one
tbmcp tools --toolsets all # list what would be registered112 tools across 10 toolsets; 48 of them read-only. Full signatures in docs/TOOL-REFERENCE.md.
Tool | What it does | |
| read | Search the user's mail. Combine |
| read | List messages in one folder, newest first by default |
| read | Read one message. |
| read | Read up to 50 messages in one round trip — for triaging a search result |
| read | Fetch a message's raw RFC 5322 source, for header forensics |
| read | List a message's attachments with part names, sizes and content types |
| write | Write one attachment to a directory on this machine |
| write | Set read/flagged/junk state or adjust tags on one or more messages |
| write | Move messages into another folder |
| write | Copy messages into another folder, leaving the originals in place |
| write | Archive messages using each account's configured archive layout |
| destructive | Delete messages. Moves to Trash unless |
| read | List the tags defined in Thunderbird, with keys, labels and colours |
| write | Create a tag, or recolour/rename an existing one |
| destructive | Remove a tag definition. Messages keep the raw keyword but lose the label |
Tool | What it does | |
| read | List mail folders with their ids and message counts |
| read | Get one folder: counts, special use, flags and IMAP quota |
| read | Report what may be done to a folder before attempting it |
| read | Get the unified folder that spans every account, e.g. all inboxes at once |
| write | Create a folder inside another folder, or at the top of an account |
| write | Rename a folder, keeping its messages and subfolders |
| write | Move a folder under a different parent, with its subfolders |
| write | Copy a folder and its contents under another parent, leaving the original |
| destructive | Delete a folder, its subfolders and every message in them |
| write | Mark every message in a folder as read |
| write | Add or remove a folder from the user's favourites |
| destructive | Permanently delete everything in one account's Trash |
| destructive | Permanently delete everything in one account's Junk folder |
| write | Fetch an IMAP folder's message bodies so they are available offline |
| write | Reclaim the disk space left behind by deleted messages |
Tool | What it does | |
| destructive | Write a message. Saves a reviewable draft unless |
| destructive | Reply to a message. Saves a reviewable draft unless |
| destructive | Forward a message. Saves a reviewable draft unless |
| write | Save a message without sending it, as a draft or a template |
| write | Open a populated compose window for the user to finish by hand |
| read | List messages sitting in the Outbox, unsent |
Tool | What it does | |
| read | Ranked full-corpus search across every indexed folder and account |
| read | Every message in one thread, oldest first, across folders and accounts |
| read | Whether Thunderbird's global index is enabled, and how far along it is |
| read | List the saved searches (virtual folders) and what each one matches |
| write | Create a saved search that appears in the folder pane |
| write | Redefine an existing saved search, by name or uri |
| destructive | Remove a saved search. The messages it listed are not touched |
Tool | What it does | |
| read | Look someone up in the address book |
| read | List contacts, across every address book unless one is named |
| read | Read one contact in full, including its raw vCard |
| write | Add a contact to an address book |
| write | Change fields on an existing contact |
| destructive | Delete a contact. There is no Trash for contacts, so this cannot be undone |
| read | List the address books, with how many contacts and lists each holds |
| write | Create an empty local address book |
| destructive | Delete an address book together with all its contacts and mailing lists |
| read | List address book mailing lists, with member counts |
| write | Create an empty mailing list in an address book |
| write | Add an existing contact to a mailing list |
| write | Take a contact off a mailing list. The contact itself is left alone |
Tool | What it does | |
| read | List the user's calendars, with ids, types and whether each is writable |
| write | Create a calendar and register it with Thunderbird |
| write | Rename or recolour a calendar, or toggle read-only and disabled |
| destructive | Remove a calendar. Deletes its events and tasks with it |
| read | List events in a time window, soonest first |
| read | Read one event or task in full, including attendees and recurrence |
| write | Create an event. Omit |
| write | Change an event. Only the fields you pass are touched |
| destructive | Delete an event or a task. Calendars have no trash, so this is final |
| read | List tasks, soonest due first. Completed ones are hidden by default |
| write | Create a task. Everything but the title is optional |
| write | Change a task, or tick it off with |
Tool | What it does | |
| read | List filters in execution order, with their conditions and actions |
| read | Read one filter in full, by account and index |
| write | Create a filter. It is appended, so existing rules keep their order |
| write | Change a filter in place. Only what you pass is touched |
| write | Turn one filter on or off without changing its definition |
| write | Move a filter to a different position in the execution order |
| destructive | Delete a filter. Thunderbird keeps no history, so the rule is gone |
| write | Apply filters to folders on demand, as "Run Filters on Folder" does |
Tool | What it does | |
| read | List the mail accounts and how each one is configured |
| read | Read one account's incoming server settings |
| write | Change one incoming server setting. Getting the connection wrong stops mail |
| read | Read one account's junk-mail handling: level, whitelist, move and purge rules |
| write | Change one junk-mail setting for an account |
| read | Read where an identity files sent mail, drafts, templates and archives |
| write | Change where an identity files sent mail, drafts, templates or archives |
| read | Read an account's offline and synchronisation settings |
| write | Change one offline or synchronisation setting for an account |
| read | List the sending identities, across every account or just one |
| read | Read one identity in full: addresses, signature, outgoing server, filing folders |
| write | Change an identity's addresses and composition defaults |
| write | Replace an identity's signature text, or point it at a file |
| read | List the SMTP servers, and which one is the default |
| write | Add an SMTP server. Nothing sends through it until an identity points at it |
| write | Change an existing SMTP server. Only the fields you pass are touched |
| destructive | Remove an SMTP server. Identities using it will be left unable to send |
| write | Make one SMTP server the default for identities that have none of their own |
Tool | What it does | |
| read | Read one Thunderbird preference |
| read | Read up to 100 preferences in one round trip |
| read | List preferences under a branch, e.g. |
| read | Everything the user has changed from the shipped defaults |
| read | Map a human request onto the preference that controls it |
| write | Change one Thunderbird preference |
| write | Clear a user-set preference so the shipped default applies again |
| read | Read the global junk (bayesian) filter settings |
| write | Change the global junk filter settings. Only the fields you pass are touched |
| write | Teach the junk filter that these messages are junk, or are not |
| read | List the OpenPGP keys in Thunderbird's keyring |
Tool | What it does | |
| read | Whether Thunderbird is attached, and which halves of the add-on loaded |
| read | Block until Thunderbird attaches to the bridge, then report status |
| read | Read buffered Thunderbird notifications: new mail, folder and account changes |
| read | One report: versions, profile, which capabilities loaded, accounts, indexing |
| read | Recent lines from Thunderbird's error console, newest last |
| read | List installed add-ons with their enabled and signature state |
| destructive | Restart Thunderbird. Every call in flight fails, including other clients' |
How it works
Claude Code ──stdio──▶ tbmcp serve ─┐
├─local RPC─▶ tbmcp daemon ◀══WebSocket══ add-on
Codex CLI ──stdio──▶ tbmcp serve ─┘ owns the socket, inside
multiplexes clients ThunderbirdThunderbird has no external API, so an add-on runs inside it: the official
MailExtension API for mail and folders, plus a WebExtension Experiment for what that
API cannot reach (preferences, accounts, filters, calendar). Python listens on
loopback and the add-on dials out with a token from <profile>/tbmcp-bridge.json, so
nothing is bound inside Thunderbird and nothing leaves the machine. A small daemon
owns the one connection and shares it between clients.
More in docs/ARCHITECTURE.md and docs/PROTOCOL.md.
When something is wrong
Run tbmcp doctor. It checks every link — Python, the profile, the add-on that is
installed versus the one in this package, the daemon, the handshake from both sides —
and names the broken one with the command that fixes it.
Symptom | What to do |
"Thunderbird is not connected" | start Thunderbird; if it is running, |
the add-on connects but never completes the handshake | restart Thunderbird; |
|
|
settings tools fail, mail tools work | the privileged half did not load → |
full-text search finds nothing | the global indexer is off (Settings → General), or |
a dependency fails to load on Windows | Windows Application Control blocked a wheel; |
TBMCP_DEBUG=1 logs verbosely to stderr; TBMCP_STATE_DIR moves the daemon's
files; tb_console returns the add-on's [tbmcp] lines as a tool.
Requirements
Thunderbird 128 or newer (verified on 155), Python 3.11–3.14, Windows, macOS or Linux including Snap and Flatpak Thunderbird.
Development
uv venv && uv pip install -e ".[dev]"
pytest # 288 tests, no Thunderbird needed
node --test "tests/js/*.test.mjs" # 111 add-on tests under node:vm
ruff check . && ruff format --check .
python tools/check_consistency.py # the three layers still agree
python tools/smoke_search.py # live acceptance, against a running ThunderbirdThe add-on's real scripts run under node:vm against fakes of the WebExtension and
XPCOM surfaces (tests/js), which is how the sandbox rules that broke 1.2.0's search
are now caught before a release. Everything documented here was verified against a
live Thunderbird; the measurements are in
docs/VERIFIED-FINDINGS.md.
Author
GitHub @U-C4N · X @UEdizaslan
Related: Autocad-MCP · U-Pool · Deuz-SDK
Issues and pull requests are welcome. Report a security problem through GitHub rather than a public issue.
Licence
MIT — see LICENSE. The add-on contains no Mozilla-licensed code.
Available Tools
50 toolsfolder_capabilitiesGet folder capabilitiesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| folder_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds context on what capabilities are checked, but no additional behavioral traits beyond those implied by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with purpose, no redundant words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Includes usage rationale and specific capabilities checked. Does not explain return format but output schema exists; still adequate for a simple introspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has folder_id with 0% description. Description does not elaborate on folder_id format or purpose, leaving the parameter semantically unclear despite low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reports folder capabilities, listing specific checks (hold messages, subfolders, rename, delete, message deletion). It distinguishes from sibling mutation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises calling before attempting folder actions to avoid refusal, giving clear context. Does not explicitly list when not to use but implies preventive use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_compactCompact foldersA
Reclaim the disk space left behind by deleted messages.
Deleted mail stays in the message store until the folder is compacted. Pass
folder_id for one folder or account_id for all of an account's. Nothing
readable is lost, but the store is rewritten, so do not interrupt it.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| folder_id | No | ||
| account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behaviors beyond sparse annotations: 'the store is rewritten' (non-idempotent, not read-only) and 'Nothing readable is lost' (not destructive despite rewriting). It also warns 'do not interrupt it,' which is critical for a mutation operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only three sentences, all essential: first states purpose, second provides context, third gives parameter guidance and a warning. It is front-loaded and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main effect, parameter options, and a key warning. However, it does not explain the confirm parameter or the expected duration. Since an output schema exists, return values need not be described, so the omission is minor but notable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the core parameters folder_id and account_id, but the confirm parameter (boolean, default false) is not mentioned. With 0% schema description coverage, the description should cover all parameters; the omission of confirm leaves a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Reclaim the disk space left behind by deleted messages.' It explains the compaction operation and distinguishes between compacting a single folder vs. all folders for an account, aligning precisely with the title 'Compact folders'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use each parameter: 'Pass folder_id for one folder or account_id for all of an account's.' It also warns not to interrupt the operation, but does not provide alternatives or explicit when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_copyCopy a folderA
Copy a folder and its contents under another parent, leaving the original.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| folder_id | Yes | ||
| destination_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds 'leaving the original,' confirming non-destructive behavior, which aligns with annotations. However, no details on conflict resolution, recursion depth, or permissions needed beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, 12 words, front-loaded with verb and resource. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no param descriptions, and an output schema, the description is insufficient. Missing details on confirm parameter, prerequisites, and edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with no parameter descriptions. The description does not explain folder_id, destination_id, or confirm. It adds no value over the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Copy a folder and its contents under another parent, leaving the original.' It specifies the action (copy), resource (folder), and distinguishes from siblings like folder_move (which moves) or folder_create (creates new).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (use when you want a copy under a different parent), but no explicit when-to-use or when-not-to-use guidance. No mention of alternatives or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_createCreate a folderC
Create a folder inside another folder, or at the top of an account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| parent_id | No | ||
| account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds no behavioral insight. It does not mention permissions, whether the operation is reversible, or any side effects. For a mutation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise. It front-loads the core purpose and scope. However, it could be more structured by including parameter hints without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (not detailed), the description should still cover usage context like error conditions, uniqueness constraints, or account limits. It only states where creation occurs, leaving many gaps for a multi-parameter creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, and the tool description does not explain any parameters. The 'name' parameter is required but lacks format, uniqueness, or length constraints. 'parent_id', 'account_id', and 'confirm' have no guidance. The description adds no value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool name 'folder_create' and title 'Create a folder' clearly indicate the action. The description adds the scope: 'inside another folder, or at the top of an account', making it unambiguous. It distinguishes from sibling tools like folder_copy or folder_delete by stating creation specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool compared to alternatives (e.g., folder_copy for duplication). No mention of prerequisites or context. It only states where the folder can be created, not when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_deleteDelete a folderADestructive
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_get first if the count matters —
the reply reports what was removed, but cannot put it back.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| folder_id | Yes | ||
| dry_run_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations: explains recursive deletion, Trash behavior (moves to Trash unless already in Trash), and that removal cannot be undone. Does not mention the confirm or dry_run_only parameters, which are relevant to behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. No fluff. The first sentence states the action, the second adds essential behavioral notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Explains destructive behavior well, but fails to document the confirm and dry_run_only parameters. Given the tool has an output schema, return values are not required, but parameter guidance is missing for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds no parameter details beyond implying folder_id. The confirm and dry_run_only parameters are important for safety but are not explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: delete a folder, its subfolders, and all messages. It distinguishes from folder manipulation siblings (e.g., folder_rename, folder_copy).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides advice to check folder_get first if count matters and warns about irreversibility in Trash. Does not explicitly mention when to use alternatives like mail_delete for message-level deletion, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_empty_junkEmpty JunkADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| folder_id | No | ||
| account_id | No | ||
| dry_run_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint: true. The description adds that subfolders are emptied but kept and that the action is not recoverable, providing context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action. It is concise but could be more structured to include parameter information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose and key behavioral notes but omits parameter details. With 4 parameters, no schema descriptions, and an output schema not described, it leaves significant gaps for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain any parameters (confirm, folder_id, account_id, dry_run_only). The agent gains no guidance on parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool permanently deletes everything in one account's Junk folder. It specifies the scope (one account) and action (permanently delete), distinguishing it from siblings like folder_empty_trash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the goal is to empty the Junk folder. It does not explicitly mention when not to use or alternatives, but the context of sibling tools like folder_empty_trash provides differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_empty_trashEmpty TrashADestructive
Permanently delete everything in one account's Trash.
This is not recoverable from Thunderbird. Give account_id and the account's
configured Trash is used; give folder_id to empty a specific one. Subfolders
of Trash are removed too unless remove_subfolders=false.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| folder_id | No | ||
| account_id | No | ||
| dry_run_only | No | ||
| remove_subfolders | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true. The description adds that deletions are permanent and not recoverable, and explains subfolder behavior. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences. Purpose is stated first, followed by parameter guidance and a note on subfolders. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Main behavior is explained, and parameter guidance is given for three of five parameters. Missing explanation for confirm (a safety guard) and dry_run_only. Output schema exists but not shown.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description explains account_id, folder_id, and remove_subfolders. However, confirm and dry_run_only are not explained, leaving gaps for a destructive tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Permanently delete everything in one account's Trash,' which is a specific verb-resource combination. It distinguishes from sibling tool 'folder_empty_junk' by targeting trash specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use account_id vs folder_id and notes that subfolders are removed unless remove_subfolders=false. It does not explicitly state when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_getGet a folderARead-onlyIdempotent
Get one folder: counts, special use, flags and IMAP quota.
Use this to re-check a count after a move or a delete; folder_list is the
cheaper way to find the id in the first place.
| Name | Required | Description | Default |
|---|---|---|---|
| folder_id | Yes | ||
| include_subfolders | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds specific context about return data (counts, flags, quota) beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences, no filler. Front-loaded with purpose, followed by usage guidance. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and description mentions return content, it's mostly complete. Minor gap: no mention of whether include_subfolders affects output, but assumption is reasonable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameter descriptions in the schema or description. folder_id and include_subfolders are undocumented, leaving the agent to infer meaning from context. With 0% schema coverage, description should compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a single folder including counts, special use, flags, and IMAP quota. It distinguishes from folder_list, which is for finding IDs cheaply.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use (re-check after move/delete) and when not (for initial ID lookup, use folder_list). Provides clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_get_unifiedGet a unified folderARead-onlyIdempotent
Get the unified folder that spans every account, e.g. all inboxes at once.
Its id works anywhere a folder id is accepted, so mail_list on the unified
inbox lists new mail across all accounts in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| folder_type | Yes | ||
| include_subfolders | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, indicating safe read behavior. The description adds important behavioral context that the returned folder id works anywhere a folder id is accepted (e.g., in mail_list), which is beyond annotations. No contradictions; description complements annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that front-load the core purpose and then provide a useful example. Every sentence adds value without redundancy. Perfect structure for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, presence of output schema, and thorough annotations, the description is nearly complete. It explains the unified concept and id reusability. Minor gaps: no mention of what happens if folder_type is invalid (though enum constrains it), and no details on response structure (covered by output schema). Overall, adequate for a getter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning no parameter descriptions exist. The tool description does not explain the parameters (folder_type enum, include_subfolders). While enum values are somewhat self-explanatory, the include_subfolders parameter is completely undocumented. The description fails to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool gets a 'unified folder that spans every account' and provides a concrete example with the unified inbox. It distinguishes from sibling tools like folder_get (specific folder) and mail_list (can use unified id). The verb 'get' and resource 'unified folder' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like folder_get or mail_list. It implies use for cross-account operations via the example, but lacks explicit 'when-not-to-use' or comparison with siblings. Some guidance is provided through the example, but it's not directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_listList foldersARead-onlyIdempotent
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 depth to walk further, or give a filter — name is a
case-insensitive substring — and the whole tree is searched instead. Pass
tree=true to get folders nested under children rather than flat.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| tree | No | ||
| depth | No | ||
| limit | No | ||
| is_tag | No | ||
| is_root | No | ||
| parent_id | No | ||
| account_id | No | ||
| is_unified | No | ||
| is_virtual | No | ||
| is_favorite | No | ||
| special_use | No | ||
| include_counts | No | ||
| has_unread_messages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true. Description adds critical detail that counts come from Thunderbird's folder database and may lag on IMAP until folder is selected. This goes beyond annotation scope and is highly valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured and front-loaded with the main purpose. Uses plain English and section breaks for readability. Could be slightly shorter but remains focused and no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 14 parameters and no schema descriptions, the description covers core functionality (default browsing, depth, name filter, tree structure, count accuracy) but omits explanations for most filtering options. Adequate for basic use but incomplete for advanced filtering needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% but description only explains three parameters (name, depth, tree) out of fourteen. Many filtering parameters (limit, is_tag, special_use, etc.) are not described at all, forcing the agent to rely on parameter names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists mail folders with IDs and message counts. The title 'List folders' is unambiguous. Description distinguishes from similar tools by explaining default browsing behavior and filter options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on default behavior (browse root+1 level), how to increase depth, or use name filter for case-insensitive substring search. Mentions tree=true for nested output. Lacks explicit when-not-to-use comparisons but covers major usage patterns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_mark_readMark a folder readAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| folder_id | Yes | ||
| include_subfolders | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behaviors beyond annotations: no per-message undo, confirmation required, and IMAP server sync. Complements the annotations (idempotentHint=true, destructiveHint=false) well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: two sentences with front-loaded purpose. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects (undo, confirmation, server sync) but is brief for a tool with 3 params and an output schema. Agent would need to infer return values from output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, description only hints at the confirm parameter through 'asks first'. Does not explain folder_id or include_subfolders, leaving the agent to infer from schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Mark' and resource 'every message in a folder as read', which is specific and distinguishes from sibling tools like mail_mark (individual messages) or folder_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions the need for confirmation due to no per-message undo, implicitly guiding when to use with confirm=true. However, does not explicitly compare to alternatives or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_moveMove a folderA
Move a folder under a different parent, with its subfolders.
destination_id is the new parent folder — use an account's root folder to
move it to the top level. Across accounts this copies then deletes, which on
IMAP can take a while.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| folder_id | Yes | ||
| dry_run_only | No | ||
| destination_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavioral context beyond annotations: cross-account moves copy then delete, which is destructive, and warns about IMAP slowness. Annotations are neutral (all false), but description contradicts destructiveHint by explicitly describing deletion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded and efficient. Every sentence provides essential information without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main purpose and important cross-account behavior but fails to document non-obvious parameters like confirm and dry_run_only. With an output schema present, lack of return value explanation is acceptable, but parameter gaps reduce completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description only explains destination_id. It does not describe the other three parameters (folder_id, confirm, dry_run_only), leaving their semantics unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Move a folder under a different parent, with its subfolders', specifying the action and resource. It distinguishes from siblings like folder_copy and folder_delete by its purpose and notes cross-account behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to relocate a folder) but lacks explicit guidance on when not to use or alternatives. It mentions cross-account slowness but no prerequisites or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_renameRename a folderB
Rename a folder, keeping its messages and subfolders.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| new_name | Yes | ||
| folder_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral detail that messages and subfolders are kept, which is beyond the annotations (all false). However, it does not disclose potential side effects like changes to links or constraints, so it is only moderately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action. It is appropriately sized for a simple tool, though it could be slightly more structured with additional explicit sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core operation and mentions preservation of content, but given the tool has 3 parameters and an output schema, it lacks completeness in usage guidelines and parameter details. Suitable for a simple tool but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the tool description does not explain any parameters. While parameter names are self-explanatory, the description adds no additional meaning, and the optional 'confirm' parameter's purpose remains unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Rename') and resource ('a folder'), and adds the detail that messages and subfolders are preserved, distinguishing it from sibling tools like folder_move or folder_copy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or restrictions (e.g., permissions, folder not in use). This omission increases ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_set_favoriteFavourite a folderAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| favorite | No | ||
| folder_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations idempotentHint=true and destructiveHint=false are supplemented by the description's statement that the operation is cosmetic and reversible, and not gated. This adds valuable context about impact and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action, and no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers purpose, usage, and behavioral aspects, it omits parameter details. Given the existence of an output schema and simple tool, it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description does not explain the parameters. The 'favorite' boolean defaulting to true and 'folder_id' are not clarified, leaving ambiguity about their meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title 'Favourite a folder' and description explicitly state the action (add/remove) and resource (folder). It clearly distinguishes from sibling tools like folder_create or folder_rename which handle different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the tool is cosmetic and reversible, affecting only the folder pane's Favourites view, and that it is not gated. This provides clear context on when to use it, but does not explicitly list alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder_sync_offlineDownload a folder for offline useA
Fetch an IMAP folder's message bodies so they are available offline.
This is what mail_get_source needs before it can return raw source for an
IMAP message. A large folder means a long download and real network traffic.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| folder_id | Yes | ||
| include_subfolders | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral context: fetches message bodies, requires network traffic, can be long. Annotations are non-contradictory (destructiveHint=false, readOnlyHint=false). No annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a note, concise and front-loaded. Could be more structured but generally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite output schema existence, description lacks parameter explanations, which are essential for correct invocation with 3 parameters. Behavioral context is good but incomplete for agent to use correctly without parameter guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no parameter descriptions). Description does not explain any of the three parameters (confirm, folder_id, include_subfolders). Agent has no guidance on how to use them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Title and description clearly state downloading folder for offline use, specifically fetching IMAP message bodies for mail_get_source. Distinguishes from siblings by linking to mail_get_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states it's needed before mail_get_source for offline source. Warns about large folders causing long download and network traffic. No explicit when-not-to-use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_archiveArchive messagesA
Archive messages using each account's configured archive layout.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| message_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide non-destructive hint; description adds 'configured archive layout' detail but doesn't clarify if archiving moves, marks, or changes visibility. Behavioral traits beyond annotations are minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, front-loaded sentence with no wasted words. Efficiently conveys core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 2 parameters and an output schema, the description is minimal but adequate for a simple action. Lacks details on permissions, irreversibility, or return value behavior, but output schema reduces burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description does not explain the 'confirm' boolean or clarify 'message_ids'. Parameter names are self-explanatory, but description adds no additional meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states action (archive) and resource (messages), with added context about account-specific archive layout. Distinguishes from sibling tools like mail_delete or mail_move.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for archiving messages, but no explicit guidance on when to use vs alternatives. Siblings include mail_move and mail_delete, but no rationale for choosing archive over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_attachmentsList attachmentsBRead-onlyIdempotent
List a message's attachments with part names, sizes and content types.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe read operation. The description adds value by specifying the return fields (part names, sizes, content types) beyond what annotations provide, but does not elaborate on potential edge cases (e.g., messages with no attachments). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded with the key action and result. It contains no unnecessary words. However, it could be slightly more structured by adding a separate sentence for usage context, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has only one required parameter and an output schema, the description is nearly adequate. It explains what the tool lists but lacks guidance on usage context (e.g., when to retrieve a message's attachments) or parameter clarification. The output schema covers return values, so that gap is mitigated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the description adds no information about the sole parameter (message_id). The schema only provides type and title. The description should compensate by clarifying the parameter's meaning (e.g., 'ID of the message to list attachments for'), but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description ('List a message's attachments with part names, sizes and content types.') clearly specifies the action ('list'), the resource ('attachments of a message'), and the output details ('part names, sizes and content types'). It distinguishes from sibling tools like mail_save_attachment or mail_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., mail_save_attachment to download). It does not mention prerequisites like needing a message_id or the context in which the tool is useful. The input schema indicates required message_id but no contextual hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_compose_openOpen a compose windowA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | No | ||
| bcc | No | ||
| body | No | ||
| is_html | No | ||
| subject | No | ||
| reply_all | No | ||
| attachments | No | ||
| identity_id | No | ||
| quote_original | No | ||
| forward_message_id | No | ||
| reply_to_message_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations: it reveals that the tool opens a UI window, does not send or save, and is not gated. Given annotations only show readOnlyHint=false, etc., the description meaningfully informs behavior without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise at 4 sentences, front-loading key info. However, some phrasing like 'the right answer whenever...' is slightly verbose, and 'so this is not gated' may not be universally clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 12 parameters and no parameter descriptions in the tool description, the description fails to explain parameter usage. The output schema exists but isn't referenced. Completeness is low for a tool with this many parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the tool description provides NO information about any of the 12 parameters (to, cc, subject, etc.). It only says 'populated compose window' without explaining what each parameter does. This is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it opens a populated compose window for manual finishing, distinguishing it from send/save tools. It explicitly says 'nothing is sent or saved' and 'user sees window appear', differentiating it from siblings like mail_send and mail_draft_save.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use: 'when the wording matters more than the automation, or when the user declined a send'. It also clarifies what the tool does not do: 'nothing is sent or saved' and that it is 'not gated'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_copyCopy messagesC
Copy messages into another folder, leaving the originals in place.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| message_ids | Yes | ||
| destination_folder_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the non-destructive nature hinted by destructiveHint=false with 'leaving the originals in place', but adds no further behavioral details like permissions or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, efficient but lacks detail on parameters and usage, making it under-informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is too minimal for a tool with three parameters and no schema descriptions. Missing parameter guidance reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description does not explain the parameters (message_ids, destination_folder_id, confirm), leaving the agent without guidance on their use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (copy) and resource (messages) and distinguishes from siblings like mail_move by specifying 'leaving the originals in place'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as mail_move or mail_archive. The description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_deleteDelete messagesADestructive
Delete messages. Moves to Trash unless permanent=true.
A permanent delete cannot be undone from Thunderbird, so prefer the default and let the user empty Trash themselves.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| permanent | No | ||
| message_ids | Yes | ||
| dry_run_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds that messages are moved to Trash unless permanent=true, and that permanent deletes are irreversible in Thunderbird. This provides valuable behavioral context beyond the annotation's binary hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences: the first states the action and behavior, the second provides a usage guideline. It is front-loaded with the key information and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the core behavior and gives a warning, it lacks explanation for parameters like 'confirm' and 'dry_run_only', and does not mention that multiple messages can be deleted. Given the existence of an output schema, return value details are not required, but the parameter gap makes it only adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain all parameters. It only mentions the 'permanent' parameter. The 'message_ids', 'confirm', and 'dry_run_only' parameters are left unexplained, leaving the agent to infer their purpose from the tool name or context, which is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete messages' with the specific verb and resource. It distinguishes the behavior from siblings by noting the default move to trash and the permanent delete option, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises preferring the default trash behavior over permanent delete because it cannot be undone, providing clear context. However, it does not explicitly compare to sibling tools like mail_archive or mail_move, but the guidance is sufficient for most use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_draft_saveSave a draft or templateA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | No | ||
| bcc | No | ||
| body | No | ||
| kind | No | draft | |
| is_html | No | ||
| subject | No | ||
| attachments | No | ||
| identity_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by stating 'Nothing leaves the machine, so this is not gated,' revealing that the operation is local and safe. It also explains the difference between draft (user review) and template (reusable, opened as copy). This adds valuable context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (5 sentences), front-loaded with the primary purpose, and each sentence adds value. There is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 9 parameters and two modes (draft/template), the description provides reasonable context: it explains the two use cases, the optionality of recipients, and the local nature. However, it omits details about attachments and identity_id. The presence of an output schema partially offsets the need to describe return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description primarily explains the 'kind' parameter (draft vs. template) and notes that recipients are optional. However, there is no explanation for other parameters (cc, bcc, body, subject, attachments, identity_id, is_html), leaving the agent without sufficient guidance for the 9 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Save a message without sending it, as a draft or a template.' It specifies the verb (save) and resource (message), distinguishes between draft and template, and contrasts with sending. This effectively differentiates from sibling tools like `mail_send`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool: 'when you want the user to review before anything is sent,' and clarifies that recipients are optional. It implies not to use for sending by mentioning 'unlike a send.' However, it does not explicitly name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_forwardForward a messageBDestructive
Forward a message. Saves a reviewable draft unless mode="send".
inline quotes the original in the body; attachment attaches it as a
.eml, which preserves the headers a recipient may need. body is your
covering note and goes above the forwarded text.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | ||
| bcc | No | ||
| body | No | ||
| mode | No | ||
| confirm | No | ||
| is_html | No | ||
| subject | No | ||
| forward_as | No | inline | |
| message_id | Yes | ||
| attachments | No | ||
| identity_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context about saving a draft unless mode='send' and explains forward_as options, which goes beyond annotations. However, it does not clarify the destructiveHint=true (e.g., what is destroyed) or mention auth or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief (three sentences) and front-loaded with the primary purpose, then details. It is efficient and well-organized, though some parameter explanations could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, output schema present), the description covers the core function and key options but omits details on return values, destructive behavior, and many parameters. It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining 'body', 'forward_as', and 'mode' parameters. But most parameters (cc, bcc, confirm, etc.) are left unexplained, limiting its value for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as forwarding a message and explains the draft vs send behavior. However, it does not explicitly differentiate from siblings like mail_reply, though the tool name and action are distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lacks explicit guidance on when to use this tool versus alternatives (e.g., mail_reply, mail_send). It states what the tool does but not the conditions or prerequisites for using it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_getRead a messageARead-onlyIdempotent
Read one message. text gives headers plus the plain-text body.
summary skips the body entirely; full adds the MIME part tree and every
header. Encrypted mail is decrypted when Thunderbird can.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | text | |
| decrypt | No | ||
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive. The description adds value by explaining detail level behaviors (MIME tree in full, no body in summary) and decryption context, which are not covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with front-loaded purpose. No wasted words; every sentence provides distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and clear annotations, the description covers key behavioral aspects (detail modes, decryption). It could mention prerequisites or edge cases, but for a simple read tool it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%; description explains the `detail` enum well (summary/text/full behaviors) but does not document the `decrypt` or `message_id` parameters. Partial compensation leaves a gap for two of three parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read one message' with a specific verb and resource. It distinguishes detail levels (summary, text, full) and even mentions decryption, which sets it apart from sibling tools like mail_get_many or mail_get_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to use each detail mode (text, summary, full) and decryption behavior. However, it does not explicitly compare to alternatives or state when not to use this tool, leaving some ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_get_manyRead several messages at onceARead-onlyIdempotent
Read up to 50 messages in one round trip — for triaging a search result.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | summary | |
| message_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral constraint of 'up to 50 messages', which is not evident from annotations. Annotations already indicate read-only, idempotent, and non-destructive nature, and the description aligns without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with 14 words, front-loading the action and constraint. Every word is necessary and no space is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and tool complexity is low, the description covers core behavior. Missing parameter details are the only gap, but the schema partially addresses that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides no information about the 'message_ids' or 'detail' parameters. With 0% schema description coverage, the description should compensate but fails to explain parameter meaning or usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads up to 50 messages in one round trip, with a specific use case of triaging search results. It uses a specific verb ('Read') and resource ('messages'), and implies differentiation from single-message or search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions the context 'for triaging a search result', indicating when to use it. While it does not list alternatives or when not to use, the purpose is clear enough to guide selection among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_get_sourceGet raw message sourceARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| decrypt | No | ||
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds a key behavioral detail: on IMAP, the message must be available offline or the tool will error rather than return partial data. This goes beyond annotations but could still benefit from mentioning authentication requirements or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose and followed by an essential behavioral note. No filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description covers the core functionality and key constraint (IMAP offline requirement). It is sufficient for the tool's complexity but could mention the return format or edge cases for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of the two parameters (message_id, decrypt). It does not clarify the meaning of decrypt or the format of message_id, leaving the agent to rely solely on the schema which lacks descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('raw RFC 5322 source'), clearly distinguishing it from siblings like mail_get (which returns parsed message). The phrase 'for header forensics' further clarifies its specialized use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context ('for header forensics') and a practical constraint on IMAP ('needs the message to be available offline'). It implicitly guides the agent to use this when raw source is needed, avoiding alternatives like mail_get. However, it lacks explicit when-not-to-use or alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_listList a folderARead-onlyIdempotent
List messages in one folder, newest first by default.
Use folder_list to discover folder ids. For anything selective, prefer
mail_search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| sort_by | No | date | |
| folder_id | Yes | ||
| descending | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's safe. The description adds value by stating the default ordering ('newest first'), but it does not disclose other behavioral traits like pagination via cursor or limit behavior. With strong annotations, the description is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the purpose and then adding guidance. Every sentence is necessary and contributes to understanding. There is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality and provides sibling guidance, but it lacks details about parameters like pagination (cursor), limit, and sorting options. Given there are 5 parameters and an output schema, the description is minimally adequate but could be more helpful, especially around pagination and limit behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the description doesn't explain any parameter meaning. While the schema provides defaults and enums, the description fails to add context beyond what is in the schema. For example, it doesn't mention that 'cursor' is for pagination or that 'sort_by' can be used to change ordering. The description should compensate for low schema coverage but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List messages in one folder, newest first by default.' It specifies the verb (List), resource (messages in one folder), and default ordering. It also distinguishes from siblings by mentioning folder_list for discovering folder ids and mail_search for selective queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use `folder_list` to discover folder ids. For anything selective, prefer `mail_search`.' This tells the agent when to use this tool and when to use alternatives, making the decision clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_markMark messagesAIdempotent
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_tags.
| Name | Required | Description | Default |
|---|---|---|---|
| junk | No | ||
| read | No | ||
| flagged | No | ||
| add_tags | No | ||
| message_ids | Yes | ||
| remove_tags | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (idempotentHint=true, destructiveHint=false), the description adds that the operation is 'cheap and reversible,' which clarifies its benign nature. This provides useful context not present in structured fields, though it does not cover all possible behaviors (e.g., no rate limits or auth details).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the purpose, and every word earns its place. No redundant or vague phrasing, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, 1 required, and an output schema (handling return values), the description covers the main operations and a key constraint. It could elaborate on multiple message handling or interactions between parameters, but it is sufficiently complete for a marking tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description compensates by listing the actions (read, flagged, junk, add_tags, remove_tags) and directing to `mail_tags` for tag values. This adds meaning beyond the schema's types and defaults, though it could explain the effect of null defaults (no change) more explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sets read/flagged/junk state or adjusts tags on messages, specifying the verb 'set' and the resource 'messages'. It distinguishes from siblings like folder_mark_read, mail_delete, and mail_tags by focusing on per-message marking operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes that the operation is 'cheap and reversible, so no confirmation is required,' providing guidance on when it is safe to use. It also references `mail_tags` for valid tag keys, implying a prerequisite. However, it does not explicitly compare to alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_moveMove messagesB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| message_ids | Yes | ||
| dry_run_only | No | ||
| destination_folder_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by describing IMAP asynchronous behavior and confirmation wait. Annotations already indicate non-destructive, so this is additive context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences front-loading purpose and adding a key behavioral note. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While output schema exists, the lack of parameter descriptions is a major gap. The tool's behavior (e.g., cross-account moves, failure conditions) is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description provides no parameter details. With 0% schema coverage, the burden is on the description, but it fails to explain any of the 4 parameters (confirm, dry_run_only, message_ids, destination_folder_id).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool moves messages into another folder, distinguishing it from copy or delete operations. However, it doesn't specify if the move is restricted to the same account or possible across accounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool over alternatives like mail_copy or mail_delete. The description only mentions IMAP behavior, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_replyReply to a messageADestructive
Reply to a message. Saves a reviewable draft unless mode="send".
Thunderbird derives the recipients, the subject and the quoted original;
body goes above the quote. reply_all copies everyone, reply_to_list
answers the mailing list. Passing cc replaces the addresses Thunderbird
derived, so leave it unset unless that is the intent.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| bcc | No | ||
| body | Yes | ||
| mode | No | ||
| confirm | No | ||
| is_html | No | ||
| subject | No | ||
| reply_all | No | ||
| message_id | Yes | ||
| attachments | No | ||
| identity_id | No | ||
| reply_to_list | No | ||
| quote_original | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it indicates that the tool creates a draft or sends depending on mode, that Thunderbird derives recipients/subject/quote, and that setting cc replaces derived addresses. This aligns with destructiveHint=true and provides nuance not captured by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences with no extraneous words. The first sentence gives the core purpose and default behavior. Subsequent sentences logically detail derivation, variants, and warnings. It is front-loaded and earns each sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 parameters and an output schema, the description covers the main workflow but omits many parameter details. It explains the essential behavior (draft/send, derivation, reply variants) but lacks specifics on parameters like confirm, is_html, attachments, identity_id, and quote_original. The output schema presumably covers return values, so the missing param details limit completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions message_id, body, mode, reply_all, reply_to_list, and cc but does not explain bcc, confirm, is_html, subject, attachments, identity_id, or quote_original. Many important parameters are left undocumented, forcing the agent to infer from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Reply to a message' and specifies that it saves a draft unless mode='send'. It distinguishes between reply_all and reply_to_list, and implies how it differs from new mail or forward tools. The verb and resource are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to reply) and provides guidance on mode, reply_all, reply_to_list, and the implication of setting cc. It implicitly warns about overriding derived addresses. It does not explicitly mention alternatives like mail_send but the context is clear enough for an agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_save_attachmentSave an attachmentA
Write one attachment to a directory on this machine.
part_name comes from mail_attachments. Refuses to clobber an existing
file unless overwrite=true.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | ||
| directory | Yes | ||
| overwrite | No | ||
| part_name | Yes | ||
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, so write is expected. The description adds valuable behavioral detail: it refuses to overwrite existing files unless overwrite=true. This is beyond annotations and informs the agent of side-effect conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero wasted words. Critical information front-loaded (main action) followed by specific constraints. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (not shown) and low parameter count, the description covers the core behavior: saving one attachment with overwrite avoidance. It could mention potential permissions or directory creation, but it's adequate for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It explains part_name (from mail_attachments) and overwrite (controls clobbering), but does not describe message_id, directory, or filename. The schema provides basic types, but the description leaves gaps for half the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Write one attachment to a directory on this machine.' It specifies the resource (attachment) and the scope (directory on machine). It distinguishes from siblings as the only tool for saving attachments, without confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for use: saving an attachment, with note that part_name comes from mail_attachments. It doesn't explicitly state when not to use or list alternatives, but the purpose is straightforward and the sibling context shows no competing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_searchSearch mailARead-onlyIdempotent
Search the user's mail. Combine full_text with any filters below.
full_text uses Thunderbird's global index and searches headers and bodies
of already-indexed messages; subject/author/body are substring matches
evaluated per folder. Dates are ISO-8601. Results are summaries — call
mail_get for a body. Continue with cursor=nextCursor. A first page
carries scope — the folder and account ids the query covered — so an empty
result can be read against what was actually searched.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| junk | No | ||
| tags | No | ||
| limit | No | ||
| to_me | No | ||
| author | No | ||
| cursor | No | ||
| unread | No | ||
| flagged | No | ||
| from_me | No | ||
| subject | No | ||
| to_date | No | ||
| max_size | No | ||
| min_size | No | ||
| tag_mode | No | any | |
| folder_id | No | ||
| from_date | No | ||
| full_text | No | ||
| account_id | No | ||
| recipients | No | ||
| has_attachment | No | ||
| include_subfolders | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely non-obvious behavior: `full_text` only hits the already-indexed set, substring filters are evaluated per folder, dates are ISO-8601, results are summaries not full messages, and a first page carries `scope` so empty results can be interpreted. That is real disclosure beyond structured fields, though it omits rate/latency or index-coverage caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short paragraphs, front-loaded with the primary distinction between search modes, followed by format, pagination, and return-summary notes. Every sentence carries information an agent needs; nothing is restated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 22-parameter tool with an output schema and full annotation coverage, the description supplies the operational essentials: how the two matching modes differ, date format, result granularity, pagination, and the follow-up call for message bodies. The remaining shortfall is the undocumented filter parameters, which no other field compensates for.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 22 parameters, so the description carries the full burden and only covers roughly five of them (`full_text`, `subject`, `author`, `body`, dates, `cursor`). The index-vs-substring distinction for those fields is valuable, but filters like `tag_mode`, `min_size`/`max_size` units, `include_subfolders`, `junk`, and `recipients` are left entirely undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource ('Search the user's mail') and then distinguishes the two search modes: index-backed `full_text` vs per-folder substring `subject`/`author`/`body`. It does not explicitly contrast itself with siblings `mail_list`/`search_global`, so the agent must infer the boundary, but the search semantics themselves are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: combine `full_text` with filters, use `cursor=nextCursor` to page, and route to `mail_get` when a body is needed. No explicit 'when not to use this / use X instead' against the many sibling search tools (search_global, mail_list, search_conversation), which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_sendSend or draft a messageADestructive
Write a message. Saves a reviewable draft unless mode="send".
mode="later" queues it in the Outbox instead. Recipients are one address per
list entry. attachments are paths to files on this machine. A draft still
asks for confirmation, because the identical call with mode="send" would
deliver it. Set reply_to_message_id to thread the message under an existing
one — but mail_reply is usually what you want, since it also quotes.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | ||
| bcc | No | ||
| body | Yes | ||
| mode | No | ||
| confirm | No | ||
| is_html | No | ||
| subject | Yes | ||
| priority | No | ||
| attachments | No | ||
| identity_id | No | ||
| dry_run_only | No | ||
| custom_headers | No | ||
| return_receipt | No | ||
| delivery_format | No | ||
| reply_to_message_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation with potential destructiveness. The description adds valuable context about the draft confirmation behavior, the 'send' and 'later' modes, and the fact that attachments are local file paths. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at 6 sentences, front-loading the key behavior before diving into details. Every sentence adds value, though some could be more efficient. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the core workflow and highlights the most important parameters, it omits many details about optional parameters and does not describe the output schema or error conditions. Given the tool's complexity (16 params) and the existence of an output schema, the description is moderately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains only 4 of 16 parameters ('to', 'attachments', 'mode', 'reply_to_message_id'), leaving the remaining 12 (including 'cc', 'bcc', 'priority', 'is_html', etc.) entirely unexplained. Given 0% schema description coverage, the description should compensate more thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Write a message' and explains the three modes (draft, send, later), explicitly distinguishing from the sibling tool 'mail_reply' which is recommended for replying with quoting. The verb+resource is specific and the scope is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance for when to use 'mail_reply' instead for replying with quoting. It also explains the default draft behavior and the 'later' mode. While it doesn't exhaustively cover all alternatives, it gives clear context for the primary use case and one key sibling distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_send_statusCheck what is waiting to be sentARead-onlyIdempotent
List messages sitting in the Outbox, unsent.
An empty list is the normal answer. Anything here was queued with
mode="later", or written while Thunderbird was offline, and will go out on
the next 'Send Unsent Messages'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds context that an empty list is normal and how messages get there, consistent with a safe read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the main purpose, and contains no redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, an existing output schema, and clear annotations, the description sufficiently explains the tool's behavior and return value context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'limit' has a default of 25, but the description does not mention it or explain its purpose. With 0% schema description coverage, the description should compensate but fails to add meaning beyond the schema's property name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List messages sitting in the Outbox, unsent,' which is a specific verb and resource. It distinguishes from sibling tools like mail_search or mail_list by focusing on outbox status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when messages appear (queued with mode='later' or while offline) and that an empty list is normal. It provides context but does not explicitly exclude alternatives or mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_tag_deleteDelete a tagBDestructive
Remove a tag definition. Messages keep the raw keyword but lose the label.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true. The description adds valuable behavioral context: messages keep the raw keyword but lose the label, which is beyond what annotations provide. However, it does not mention the confirm parameter or irreversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, concise and front-loaded. The primary action is stated first, followed by a clarifying consequence. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description covers the core behavior. However, it omits the role of the 'confirm' parameter and does not clarify that the operation is destructive, though annotations hint at it. Overall, adequate but with minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters, but it does not. Neither 'key' nor 'confirm' are described, leaving agents to guess their meaning and purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove a tag definition') and the resource. The second sentence explains the effect on messages, which adds specificity. It does not explicitly distinguish from sibling mail_tag_upsert, but the verb 'Remove' implies deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like mail_tag_upsert or mail_mark. It does not mention prerequisites, contexts, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_tagsList message tagsARead-onlyIdempotent
List the tags defined in Thunderbird, with keys, labels and colours.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds value by stating the return structure (keys, labels, colours). No contradictions or gaps beyond what annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. Every element contributes to understanding the tool's purpose and output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no parameters, a rich output schema, and comprehensive annotations, the description is fully adequate. It explains what the tool does and what it returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and the input schema is empty with 100% description coverage. Per guidelines, 0 parameters earns a baseline of 4. The description does not need to add parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List the tags') and the scope ('defined in Thunderbird'), and specifies the returned fields ('keys, labels and colours'). It distinguishes from sibling tools like mail_tag_upsert and mail_tag_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. While the purpose is clear, the description does not mention that this is a read-only operation or suggest using it before modifying tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_tag_upsertCreate or update a tagAIdempotent
Create a tag, or recolour/rename an existing one.
color is #RRGGBB. Omit key to create a new tag; pass an existing key to
update it.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| color | No | ||
| label | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses color format (#RRGGBB) and behavior regarding key usage. Annotations indicate idempotent and non-destructive nature, which description does not contradict. No mention of side effects or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise; two sentences plus code block. Front-loaded with purpose, no filler. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with output schema, description covers creation vs update and color format but omits explanation of 'confirm' and potential side effects. Output schema exists, so return values need not be explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description explains 'key' (omit/create vs pass/update) and 'color' (format) but does not describe 'label' or 'confirm'. With 0% schema coverage, description compensates partially.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Title and description clearly state the tool creates or updates a tag. It distinguishes from siblings like mail_tags (list) and mail_tag_delete (delete).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to omit 'key' for creation and pass an existing key for update, providing clear usage guidance. Lacks explicit when-not-to-use, but sufficient for the role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_conversationRead a whole conversationARead-onlyIdempotent
Every message in one thread, oldest first, across folders and accounts.
Give either a message_id from mail_search or an RFC header_message_id.
This is how you reconstruct a discussion that spans Inbox, Sent and an
archive folder without three separate searches.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| message_id | No | ||
| header_message_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, describes sorting order and multi-folder scope. Does not mention behavior for limit parameter or when both IDs are provided, which are minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise two-sentence description with no unnecessary words. Each sentence conveys essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the core functionality well given the existence of an output schema. Missing details on limit parameter and edge cases (e.g., missing ID) are minor but notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, description adds meaning for message_id and header_message_id by clarifying their sources. However, limit parameter is not explained, and behavior when both IDs are given is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves all messages in a single thread, sorted oldest first, across folders and accounts. Differentiates from mail_search by specifying how to reference messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on how to provide input (message_id from mail_search or RFC header_message_id). Indicates use case for reconstructing discussions spanning folders, but lacks explicit when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_globalSearch everythingARead-onlyIdempotent
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 search_conversation. For precise filters
(one folder, unread only, a date range) use mail_search instead.
If this returns nothing unexpectedly, call search_index_status: the global
indexer can be disabled or still catching up.
matched is how many of the retrieved messages matched, and it is the
total only when truncated is absent; a truncated search ranked as deep
as it could and there may be more below. unmatchableTerms names words
the index cannot look up at all — anything that breaks into pieces of
fewer than three characters, like "2.0" — and because every term has to
match, one of those is enough to empty the result.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| offset | No | ||
| folder_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), but the description adds genuinely non-obvious behavior: the global indexer can be disabled or lagging, and terms breaking into sub-3-character pieces are unmatchable, which can empty a result. It also explains that results carry a relevance score and a conversation id usable with `search_conversation`. Strong added context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the routing decision, then layered detail. Every paragraph is substantive, though the final paragraph on `matched`/`truncated`/`unmatchableTerms` is dense and reads more like field documentation than selection guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param search tool with an output schema, the description covers the selection decision, the alternative, failure diagnostics, and result-field interpretation. The only omission (limit/offset/folder_id semantics) is a parameter-level gap rather than a missing usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it only partly does: it explains query-side semantics (matched/truncated/unmatchableTerms effects) but never describes `limit`, `offset`, or `folder_id` behavior or defaults. Pagination and folder scoping remain undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Ranked full-corpus search') plus the scope ('across every indexed folder and account'). It explicitly distinguishes itself from the sibling `mail_search` by naming it and the condition that selects it, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use phrasing with example queries ('what did we agree about the shipment'), an explicit alternative for the opposite case ('For precise filters... use mail_search instead'), and a diagnostic fallback (`search_index_status`) for unexpected empty results. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_index_statusGlobal index statusARead-onlyIdempotent
Whether Thunderbird's global index is enabled, and how far along it is.
Call this to explain an empty search_global result. When indexing is off,
mail_search with subject/author/body filters still works.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint. Description adds that it reports status (enabled/progress), but doesn't disclose additional behavioral traits. Adequate but not outstanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with purpose. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, output schema exists, and rich annotations, the description fully covers the tool's purpose and usage context. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, schema coverage 100%. Baseline for zero params is 4. Description adds no param info, but none needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports whether the global index is enabled and progress. It distinguishes from siblings like search_global by saying it explains empty search_global results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call when search_global returns empty, and notes that mail_search still works without indexing. Provides concrete when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_saved_createCreate a saved searchA
Create a saved search that appears in the folder pane.
search_folder_ids are folders to look in (from folder_list). Each term is
{"attribute": "subject", "operator": "contains", "value": "invoice"};
attributes and operators are listed in the error message if you get one
wrong. match_all=false makes the terms OR together. online_search asks
the IMAP server to run the search instead of using the local database.
Nothing is copied or moved — a saved search is a stored query.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| terms | Yes | ||
| confirm | No | ||
| match_all | No | ||
| dry_run_only | No | ||
| online_search | No | ||
| parent_folder_id | No | ||
| search_folder_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (which show no destructive or readOnly hints), the description discloses that nothing is copied or moved—just a stored query. It also explains online_search behavior (IMAP vs local), adding useful behavioral context that annotations lack.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three paragraphs: purpose, parameter specifics, and a clarifying statement. Each sentence adds value, but the parameter explanation could be more compactly integrated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters (3 required) and an output schema, the description covers the core functionality and key parameters. It lacks detail on some optional parameters, but overall it provides sufficient context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains search_folder_ids, terms, match_all, and online_search in detail, but omits confirm, dry_run_only, and parent_folder_id. This partial coverage justifies a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a saved search that appears in the folder pane, distinguishing it from other search tools like mail_search or search_global. It specifies that it's a stored query, not a copy/move, which helps an agent understand the unique function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context, such as search_folder_ids from folder_list and terms syntax with attributes/operators. It explains when to use it (persistent search) but does not explicitly state when not to use it or mention alternatives; however, the context of sibling tools and the term 'saved search' implicitly differentiates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_saved_deleteDelete a saved searchADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| saved_search | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the destructiveHint annotation by explaining exactly what is lost (the query) and what is not (messages). It also warns that the query is not recoverable, which is critical behavioral context. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (3 sentences) and well-structured, with the main action first followed by clarifying details. Every sentence adds meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with a confirm parameter and an output schema, the description adequately explains the action and consequences. It mentions the prompt, but could be more explicit about the need for confirmation and what the output looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain parameters, but it only vaguely references a prompt. It does not explicitly describe the 'saved_search' parameter or the 'confirm' parameter's role, leaving ambiguity about usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Remove a saved search' with specific verb and resource. It also distinguishes from siblings by clarifying that messages are not touched, which is unique to this tool among related saved search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (to delete a saved search) and explains consequences (query lost, messages untouched). It does not explicitly state when not to use or list alternatives, but the caution about unrecoverability serves as guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_saved_listList saved searchesARead-onlyIdempotent
List the saved searches (virtual folders) and what each one matches.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds 'virtual folders' clarification but no additional behavioral traits. It is consistent and non-contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that fully conveys the tool's purpose with no unnecessary words. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no parameters and an output schema, the description is complete. It explains what the tool does and that it shows matching criteria, sufficient for agent selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; schema coverage is 100%. According to guidelines, baseline is 4 for 0 params. The description adds no parameter info, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists saved searches (virtual folders) and what each matches. It specifies the verb 'List' and the resource 'saved searches', distinguishing it from sibling tools like search_saved_create or mail_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing saved searches but does not explicitly state when to use this tool versus alternatives like mail_search or search_global. No exclusion criteria or context hints provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_saved_updateChange a saved searchAIdempotent
Redefine an existing saved search, by name or uri.
Only what you pass is replaced; terms replaces the whole condition list
rather than merging, because a partial merge has no sensible meaning for a
boolean query.
| Name | Required | Description | Default |
|---|---|---|---|
| terms | No | ||
| confirm | No | ||
| dry_run_only | No | ||
| saved_search | Yes | ||
| online_search | No | ||
| search_folder_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (idempotent, non-destructive), the description adds that 'terms' replaces the whole condition list rather than merging, which is a key behavioral detail. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first gives purpose, second adds a behavioral nuance. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema and sibling tools, the description covers the core action and a critical behavioral nuance. However, the lack of parameter descriptions for multiple fields leaves the tool partially underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds meaning for 'terms' (explains replacement behavior) and implies 'saved_search' is an identifier by name or URI. However, other parameters (confirm, dry_run_only, online_search, search_folder_ids) are left undefined, insufficient for a 6-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Redefine an existing saved search, by name or uri.' This distinguishes it from sibling tools like create and delete, specifying the resource and method.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on how to use: 'Only what you pass is replaced' and explains the behavior of the 'terms' parameter. However, it does not explicitly state when not to use this tool or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tb_addonsInstalled add-onsARead-onlyIdempotent
List installed add-ons with their enabled and signature state.
isBridge marks this server's own add-on. A signedState of 0 is expected
for it: the bridge is installed unsigned, which this Thunderbird permits.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description goes beyond by explaining the output fields isBridge and signedState, including a special case for the bridge add-on. This adds behavioral context on top of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the first sentence stating the main purpose. Additional lines add valuable detail without verbosity. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, output schema exists), the description covers the key output fields. It does not mention error cases or the filtering parameter, but overall it is adequate for a straightforward list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'kind' has 0% schema description coverage, and the tool description does not mention this parameter at all. It fails to explain the enumeration or the ability to filter by add-on type, which is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description clearly state the tool lists installed add-ons with enabled and signature state. The explanation of isBridge and signedState adds specific detail. It is distinct from all sibling tools, which focus on mail, folders, search, or TB system operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool is for listing add-ons, but does not explicitly state when to use or avoid it. As the only add-on listing tool, no explicit alternatives exist, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tb_consoleThunderbird error consoleARead-onlyIdempotent
Recent lines from Thunderbird's error console, newest last.
Narrow it with contains — tbmcp shows this bridge's own complaints, and an
add-on id or a source filename shows someone else's. Anything shaped like a
password or token is redacted inside Thunderbird before it is sent.
Lines the bridge writes with console.* (source: "console") are included
alongside the error console's own entries, merged by time.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| contains | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely non-obvious behavior: credentials are redacted inside Thunderbird before transmission, and bridge `console.*` lines are merged with native error-console entries by timestamp. That is real context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose statement is front-loaded in the first line, followed by filtering guidance and then the behavioral caveats. Every sentence carries distinct information — ordering, filter semantics, redaction, and merge behavior — with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations cover the safety profile. The description fills the remaining gaps (filtering, redaction, source merging, ordering) well, but omits any handling of the `limit` parameter, which an agent needs to control result size.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry both parameters. It explains `contains` richly (what kinds of values to pass and what each selects) but never mentions `limit` or its default of 100, leaving one of two parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (Thunderbird's error console) and a specific scope ('recent lines', 'newest last'), so an agent immediately knows what it returns. It does not explicitly contrast itself with the near siblings tb_diagnostics or tb_events, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent how to narrow results with `contains` and gives concrete example values ('tbmcp', an add-on id, a source filename), which is useful operational guidance. It never says when to reach for this tool versus tb_diagnostics or tb_events, and gives no exclusions, so tool-selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tb_diagnosticsThunderbird diagnosticsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds specific behavioral details about including unsigned add-ons, experiment APIs, and message store type per account, providing useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, front-loading the main purpose. The second sentence adds detail but is slightly verbose; still efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and a likely output schema, the description adequately covers purpose, usage guidance, and key behavioral aspects. Sibling tools are all mail-focused, so the diagnostic tool stands out. Minor gap: does not mention return format, but output schema likely covers it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. No param documentation is needed, and the description does not introduce any parameter-related confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does (fetches a report with versions, profile, capabilities, accounts, indexing) and explicitly says it's the first thing to fetch when things behave oddly, distinguishing it from sibling tools focused on mail operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises 'The first thing to fetch when anything behaves oddly,' providing clear when-to-use guidance. It does not explicitly state when not to use, but the context and sibling list make it evident for diagnostics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tb_eventsRecent Thunderbird eventsARead-onlyIdempotent
Read buffered Thunderbird notifications: new mail, folder and account changes.
Poll with since=latestSeq from the previous call to see only what is new.
The daemon keeps a few hundred events, so a long gap between polls can drop
some — latestSeq jumping by more than you received is how you tell.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds crucial behavioral context: the buffering nature, polling mechanics, and the risk of missing events during long gaps. This goes beyond annotations to explain how the tool behaves in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each serving a purpose: purpose, usage hint, behavioral nuance. No wasted words. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which explains return values), the description covers the essential behavioral aspects: what events are included, how to poll incrementally, and the risk of buffer overflow. For a simple polling tool, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It provides meaningful context for 'since' (used for incremental polling), but does not explicitly describe 'limit' beyond its default. The hint about 'since=latestSeq' is helpful, but both parameters could benefit from more explicit descriptions. Overall, adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Read buffered Thunderbird notifications: new mail, folder and account changes.' This provides a specific verb (Read) and resource (buffered Thunderbird notifications), and lists examples differentiating it from sibling tools that deal with individual mail or folder operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes polling pattern: 'Poll with `since=latestSeq` from the previous call to see only what is new.' Also warns about buffer size and how to detect dropped events ('`latestSeq` jumping by more than you received is how you tell'). This is excellent guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tb_restartRestart ThunderbirdADestructive
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 tb_wait
afterwards. Unsent compose windows and unsaved drafts are lost, so ask the
user before you do it; a stuck sync usually does not need it.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds critical behavioral context: every in-flight call fails, the bridge connection drops, the tool returns before restart completes, and unsent compose windows/drafts are lost. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with no wasted words. It front-loads the core action, then efficiently lists side effects, post-action steps, and usage advice. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's destructive nature and side effects, the description covers all necessary facets: what happens to other calls, return behavior, lost data, user consent, and follow-up action. It is complete for an agent to use safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter is 'confirm'. The description explicitly says 'ask the user before you do it', which directly maps to the confirm parameter's purpose. With 0% schema coverage, the description fully compensates by explaining the parameter's role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Restart Thunderbird' as the verb+resource. It distinguishes itself from sibling tools like tb_status and tb_wait by specifying the restart action, and the additional details about in-flight calls failing and losing unsaved data provide context without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises when to use (restart Thunderbird) and when not to (a stuck sync usually does not need it). It also instructs to ask the user before proceeding and to wait with tb_wait afterwards, providing clear guidance on usage and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tb_statusThunderbird connection statusARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds that it's answered by the local daemon and works when Thunderbird is closed, which is useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-load the purpose, then provide usage guidance. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 0 parameters, full annotations, and an output schema, the description is complete. It explains the tool's purpose, when to use it, and a key behavioral trait (works offline via daemon).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100% (trivially). Baseline for 0 params is 4; description does not need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool checks whether Thunderbird is attached and which halves of the add-on have loaded, using a specific verb and resource. It distinguishes itself from siblings by being a diagnostic tool for Thunderbird connectivity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call it first when another tool reports inability to reach Thunderbird, and notes it works when Thunderbird is closed, providing clear when-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tb_waitWait for ThunderbirdARead-onlyIdempotent
Block until Thunderbird attaches to the bridge, then report status.
Use it after tb_restart, or after asking the user to start Thunderbird.
Fails with a message naming what is missing if nothing attaches in time.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses blocking behavior and failure mode ('Fails with a message naming what is missing if nothing attaches in time'), adding significant value beyond annotations that already show readOnlyHint, idempotentHint, and non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with the main action, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and output schema, the description covers behavior, usage context, and failure mode. Annotations cover safety. Complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'timeout_seconds' is not explicitly described in the text, despite 0% schema coverage. The description only indirectly references timeout via 'if nothing attaches in time', but does not explain the parameter's role or default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Block' and the resource 'Thunderbird attaches to the bridge', and the purpose of reporting status. It distinguishes well from sibling tools which are mail/folder operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use it after `tb_restart`, or after asking the user to start Thunderbird', providing clear context. Lacks exclusions or alternatives, but context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
50 tool updates
v0.1.0- First observed
folder_capabilities - First observed
folder_compact - First observed
folder_copy - First observed
folder_create - First observed
folder_delete - First observed
folder_empty_junk - First observed
folder_empty_trash - First observed
folder_get - First observed
folder_get_unified - First observed
folder_list - First observed
folder_mark_read - First observed
folder_move - First observed
folder_rename - First observed
folder_set_favorite - First observed
folder_sync_offline - First observed
mail_archive - First observed
mail_attachments - First observed
mail_compose_open - First observed
mail_copy - First observed
mail_delete - First observed
mail_draft_save - First observed
mail_forward - First observed
mail_get - First observed
mail_get_many - First observed
mail_get_source - First observed
mail_list - First observed
mail_mark - First observed
mail_move - First observed
mail_reply - First observed
mail_save_attachment - First observed
mail_search - First observed
mail_send - First observed
mail_send_status - First observed
mail_tag_delete - First observed
mail_tag_upsert - First observed
mail_tags - First observed
search_conversation - First observed
search_global - First observed
search_index_status - First observed
search_saved_create - First observed
search_saved_delete - First observed
search_saved_list - First observed
search_saved_update - First observed
tb_addons - First observed
tb_console - First observed
tb_diagnostics - First observed
tb_events - First observed
tb_restart - First observed
tb_status - First observed
tb_wait
TDQS
Scored across 50 tools
The prefix scheme (mail_, folder_, search_, tb_) cleanly separates domains, and the most easily confused pairs (mail_search vs search_global, folder_move vs folder_copy, mail_delete vs mail_archive) are explicitly distinguished in their descriptions. A few noun-vs-verb neighbors (mail_get/folder_get, tb_status/tb_diagnostics) overlap slightly, but boundaries are generally clear.
Nearly everything follows a predictable prefix_verb_noun snake_case pattern (mail_search, folder_create, search_saved_delete, tb_restart). Minor deviations exist where the suffix is a noun rather than a verb (tb_events, tb_console, mail_tags), but the prefix grouping keeps it highly readable.
50 tools is heavy for any single server; the domain is genuinely broad (mail, folders, search, compose, tags, diagnostics), so most tools earn their place, but there is consolidation opportunity (e.g. mail_get vs mail_get_many, the four search_saved_* tools, folder_empty_trash vs folder_empty_junk). It sits above the comfortable range.
Coverage is remarkably thorough: search (full-text, global, saved, conversation), message read/attachment handling, full folder CRUD plus favorites/sync/compact/empty, tag management, and the full compose lifecycle (send, reply, forward, draft, open, outbox status), plus diagnostics. No obvious dead ends in the mail-client domain.
Maintenance
Related MCP Connectors
Email inboxes and calendars for AI agents: send, receive, search, draft and schedule.
Email inboxes and calendars for AI agents: send, receive, search, draft and schedule.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
- hedwigOAuthcom.hedwig-ai
Read, arrange, and build agents on your Hedwig email board from any AI client. Nothing ever sends.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceEnables interaction with Thunderbird email client to search and read emails, manage contacts, list calendars, and draft messages with pre-filled content through a local HTTP bridge.334-
- FlicenseNot gradedqualityDmaintenanceProvides a Model Context Protocol interface for Mozilla Thunderbird, allowing AI assistants to manage emails, filters, calendars, and contacts. It exposes 24 tools for tasks like searching messages, drafting replies, and organizing folders through a local bridge.-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to access Thunderbird email, contacts, and calendars through the Model Context Protocol, with tools for searching, reading, composing, and managing messages.3-
- FlicenseNot gradedqualityAmaintenanceProvides AI assistants with full access to Thunderbird email, compose, filters, calendar, and contacts via the Model Context Protocol.-