Email MCP Server
Integrates with Gmail email accounts to enable reading, searching, sending, managing, scheduling, and analyzing emails via IMAP/SMTP, including provider-specific label management.
Integrates with GMX email accounts to enable reading, searching, sending, managing, scheduling, and analyzing emails via IMAP/SMTP.
Integrates with iCloud email accounts to enable reading, searching, sending, managing, scheduling, and analyzing emails via IMAP/SMTP.
Integrates with ProtonMail email accounts to enable reading, searching, sending, managing, scheduling, and analyzing emails via IMAP/SMTP.
Integrates with Zoho email accounts to enable reading, searching, sending, managing, scheduling, and analyzing emails via IMAP/SMTP.
Click on "Install 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., "@Email MCP Servershow my unread emails from today"
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.
Email MCP Server
An MCP (Model Context Protocol) server providing comprehensive email capabilities via IMAP and SMTP.
Enables AI assistants to read, search, send, manage, schedule, and analyze emails across multiple accounts. Exposes 47 tools, 7 prompts, and 6 resources over the MCP protocol with OAuth2 support (experimental), email scheduling, calendar extraction, analytics, provider-aware label management, real-time IMAP IDLE watcher with AI-powered triage, customizable presets and static rules, and a guided setup wizard.
Highlights
Feature | email-mcp | Typical MCP email |
Multi-account | ✅ | ❌ |
Send / reply / forward | ✅ | ✅ |
Drafts & templates | ✅ | ❌ |
Labels & bulk ops | ✅ provider-aware | ❌ |
Schedule future emails | ✅ | ❌ |
Real-time IMAP IDLE watcher | ✅ | ❌ |
AI triage with presets | ✅ | ❌ |
Desktop & webhook alerts | ✅ | ❌ |
Calendar (ICS) extraction | ✅ | ❌ |
Email analytics | ✅ | ❌ |
OAuth2 (Gmail / M365) | ✅ experimental | ❌ |
Guided setup wizard | ✅ auto-detect | ❌ |
Related MCP server: Email MCP Server
Table of Contents
Security
All connections use TLS/STARTTLS encryption
Passwords are never logged; audit trail records operations without credentials
Token-bucket rate limiter prevents abuse (configurable per account)
OAuth2 XOAUTH2 authentication for Gmail and Microsoft 365 (experimental)
Attachment downloads capped at 5 MB with base64 encoding
Background
Most MCP email implementations provide only basic read/send. This server aims to be a full-featured email client for AI assistants, covering the entire lifecycle: reading, composing, managing, scheduling, and analyzing email — all from a single MCP server.
Key design decisions:
XDG-compliant config — TOML at
~/.config/email-mcp/config.tomlMulti-account — Operate across multiple IMAP/SMTP accounts simultaneously
Layered services — Business logic is decoupled from MCP wiring for testability
Provider auto-detection — Gmail, Outlook, Yahoo, iCloud, Fastmail, ProtonMail, Zoho, GMX
Install
Requires Node.js ≥ 22.
# Run directly (no install needed)
npx @codefuturist/email-mcp setup
# or
pnpm dlx @codefuturist/email-mcp setup
# Or install globally
npm install -g @codefuturist/email-mcp
# or
pnpm add -g @codefuturist/email-mcpDocker
No Node.js required — just Docker.
# Latest stable release
docker pull ghcr.io/codefuturist/email-mcp:latest
# Pin to an exact version (immutable)
docker pull ghcr.io/codefuturist/email-mcp:0.2.3
# Auto-update patches within a minor version
docker pull ghcr.io/codefuturist/email-mcp:0.2
# Track a major version (won't cross breaking-change boundary)
docker pull ghcr.io/codefuturist/email-mcp:0
# Pin to an exact git commit (immutable, CI traceability)
docker pull ghcr.io/codefuturist/email-mcp:sha-abc1234
# Or build from source
docker build -t ghcr.io/codefuturist/email-mcp .Tag convention: Tags follow bare semver (no
vprefix), matching Docker ecosystem standards (e.g.node:24,nginx:1.25). Thelatesttag is only updated on stable releases, never pre-releases.
Note: The server uses stdio transport. Config must be created on the host first (via
npx @codefuturist/email-mcp setupor manually) and mounted into the container.
Usage
Setup
# Add an email account interactively (recommended)
email-mcp account add
# Or use the legacy alias
email-mcp setup
# Or create a template config manually
email-mcp config initThe setup wizard auto-detects server settings, tests connections, saves config, and outputs the MCP client config snippet.
Test Connections
email-mcp test # all accounts
email-mcp test personal # specific accountConfigure Your MCP Client
Recommended — use the guided installer (auto-detects Claude Desktop, VS Code, Cursor, Windsurf):
email-mcp installOr add manually using the snippets below.
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"email": {
"command": "npx",
"args": ["-y", "@codefuturist/email-mcp", "stdio"]
}
}
}Option 1 — Extensions gallery (easiest):
Open the Extensions view (⇧⌘X / Ctrl+Shift+X)
Search
@mcp email-mcpClick Install (user-wide) or right-click → Install in Workspace
Option 2 — Workspace config (.vscode/mcp.json, committed to source control):
{
"servers": {
"email": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@codefuturist/email-mcp", "stdio"]
}
}
}Option 3 — User config (settings.json, applies to all workspaces):
Open the Command Palette → Preferences: Open User Settings (JSON) and add:
{
"mcp": {
"servers": {
"email": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@codefuturist/email-mcp", "stdio"]
}
}
}
}Edit ~/.cursor/mcp.json:
{
"mcpServers": {
"email": {
"command": "npx",
"args": ["-y", "@codefuturist/email-mcp", "stdio"]
}
}
}Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"email": {
"command": "npx",
"args": ["-y", "@codefuturist/email-mcp", "stdio"]
}
}
}Edit ~/.config/zed/settings.json:
{
"context_servers": {
"email": {
"command": {
"path": "npx",
"args": ["-y", "@codefuturist/email-mcp", "stdio"]
}
}
}
}Add to ~/.vibe/config.toml:
[[mcp_servers]]
name = "email-mcp"
transport = "stdio"
command = "npx"
args = ["-y", "@codefuturist/email-mcp", "stdio"]To pass credentials directly instead of using a config file, use the env field:
[[mcp_servers]]
name = "email-mcp"
transport = "stdio"
command = "npx"
args = ["-y", "@codefuturist/email-mcp", "stdio"]
env = { "EMAIL_ACCOUNTS" = "<your-accounts-json>" }MCP tools are exposed as email-mcp_<tool_name> (e.g. email-mcp_list_emails). Restart Vibe after editing the config.
Run the server in a container — mount your config directory read-only:
docker run --rm -i \
-v ~/.config/email-mcp:/home/node/.config/email-mcp:ro \
ghcr.io/codefuturist/email-mcpFor MCP client configuration (e.g. Claude Desktop):
{
"mcpServers": {
"email": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "~/.config/email-mcp:/home/node/.config/email-mcp:ro",
"ghcr.io/codefuturist/email-mcp"
]
}
}
}{
"mcpServers": {
"email": {
"command": "npx",
"args": ["-y", "@codefuturist/email-mcp", "stdio"],
"env": {
"MCP_EMAIL_ADDRESS": "you@gmail.com",
"MCP_EMAIL_PASSWORD": "your-app-password",
"MCP_EMAIL_IMAP_HOST": "imap.gmail.com",
"MCP_EMAIL_SMTP_HOST": "smtp.gmail.com"
}
}
}
}CLI Commands
email-mcp [command]
Commands:
stdio Run as MCP server over stdio (default)
account list List all configured accounts
account add Add a new email account interactively
account edit [name] Edit an existing account
account delete [name] Remove an account
setup Alias for 'account add'
test Test connections for all or a specific account
install Register email-mcp with MCP clients interactively
install status Show registration status for detected clients
install remove Unregister email-mcp from MCP clients
config show Show config (passwords masked)
config edit Edit global settings (rate limit, read-only)
config path Print config file path
config init Create template config
scheduler check Process pending scheduled emails
scheduler list Show all scheduled emails
scheduler install Install OS-level scheduler (launchd/crontab)
scheduler uninstall Remove OS-level scheduler
scheduler status Show scheduler installation status
help Show helpConfiguration
Located at $XDG_CONFIG_HOME/email-mcp/config.toml (default: ~/.config/email-mcp/config.toml).
[settings]
rate_limit = 10 # max emails per minute per account
[[accounts]]
name = "personal"
email = "you@gmail.com"
full_name = "Your Name"
password = "your-app-password"
[accounts.imap]
host = "imap.gmail.com"
port = 993
tls = true
[accounts.smtp]
host = "smtp.gmail.com"
port = 465
tls = true
starttls = false
verify_ssl = true
[accounts.smtp.pool]
enabled = true
max_connections = 1
max_messages = 100OAuth2 (experimental)
Note: OAuth2 support is experimental. Token refresh and provider-specific flows may require additional testing in your environment.
[[accounts]]
name = "work"
email = "you@company.com"
full_name = "Your Name"
[accounts.oauth2]
provider = "google" # or "microsoft"
client_id = "your-client-id"
client_secret = "your-client-secret"
refresh_token = "your-refresh-token"
[accounts.imap]
host = "imap.gmail.com"
port = 993
tls = true
[accounts.smtp]
host = "smtp.gmail.com"
port = 465
tls = true
[accounts.smtp.pool]
enabled = true
max_connections = 1
max_messages = 100Environment Variables
For single-account setups (overrides config file):
Variable | Default | Description |
| required | Email address |
| required | Password or app password |
| required | IMAP server hostname |
| required | SMTP server hostname |
|
| Account name |
| — | Display name |
| Login username | |
|
| IMAP port |
|
| IMAP TLS |
|
| SMTP port |
|
| SMTP TLS |
|
| SMTP STARTTLS |
|
| Verify SSL certificates |
|
| Enable SMTP transport pooling |
|
| Max pooled SMTP connections |
|
| Max messages per pooled connection |
|
| Max sends per minute |
Email Scheduling
The scheduler enables future email delivery with a layered architecture:
MCP auto-check — Processes the queue on server startup and every 60 seconds while the MCP server is running
CLI —
email-mcp scheduler checkfor manual or cron-based processingOS-level daemon —
email-mcp scheduler installsets up launchd (macOS) or crontab (Linux) to run every minute, independently of the MCP server
Important — the daemon must be installed for reliable delivery. Without it, scheduled emails only fire while an AI client is actively connected. Your machine also needs to be running at the scheduled time; if it's asleep or off, the daemon will process overdue emails on next wake/startup. Failed sends are retried up to 3 times before being marked
failed.
Setting up the daemon
# Install (macOS launchd / Linux crontab — runs every minute)
email-mcp scheduler install
# Verify it's running
email-mcp scheduler status
# View pending / sent / failed scheduled emails
email-mcp scheduler list
# Trigger a manual check immediately
email-mcp scheduler check
# Remove the daemon
email-mcp scheduler uninstallScheduled emails are stored as JSON files in ~/.local/state/email-mcp/scheduled/ with status-based locking. Each entry tracks attempts (max 3) and the last error, so you can inspect failures with scheduler list.
Real-time Watcher & AI Hooks
The IMAP IDLE watcher monitors configured mailboxes in real-time using persistent IDLE connections (separate from tool connections). When new emails arrive:
Static rules — Pattern-match on from/to/subject → apply labels, flag, or mark read instantly (no AI)
AI triage — Remaining emails are analyzed via MCP sampling with a customizable preset prompt
Notify mode — Falls back to logging if AI triage is disabled
Configure in config.toml:
[settings.watcher]
enabled = true
folders = ["INBOX"]
idle_timeout = 1740 # 29 minutes (IMAP spec max is 30)
[settings.hooks]
on_new_email = "triage" # "triage" | "notify" | "none"
preset = "inbox-zero" # "inbox-zero" | "gtd" | "priority-focus" | "notification-only" | "custom"
auto_label = true # apply AI-suggested labels
auto_flag = true # flag urgent emails
batch_delay = 5 # seconds to batch before triage
# User context — appended to preset's AI prompt
custom_instructions = """
I'm a software engineer. Emails from @mycompany.com are always high priority.
Newsletters I read: TL;DR, Hacker Newsletter.
"""
# Static rules — run BEFORE AI, skip AI if matched
[[settings.hooks.rules]]
name = "GitHub Notifications"
match = { from = "*@github.com" }
actions = { labels = ["Dev"], mark_read = true }
[[settings.hooks.rules]]
name = "Newsletter Archive"
match = { from = "*@substack.com|*@buttondown.email" }
actions = { labels = ["Newsletter"] }
[[settings.hooks.rules]]
name = "VIP Contacts"
match = { from = "ceo@company.com|cto@company.com" }
actions = { flag = true, labels = ["VIP"] }Presets
Preset | Focus | Suggested Labels |
| Aggressive categorization + archiving | Newsletter, Notification, Updates, Finance, Social, Promo |
| Getting Things Done contexts | @Action, @Waiting, @Reference, @Someday, @Delegated |
| Simple priority classification (default) | (none — just priority + flag) |
| No AI triage, just log | (none) |
| User defines full system prompt | User-defined |
Static Rules
Static rules use glob-style patterns (*@github.com) with | as OR separator (*@github.com|*@gitlab.com). All conditions within a match are AND'd. First matching rule wins.
Available actions: labels (string array), flag (boolean), mark_read (boolean), alert (boolean — forces desktop notification).
Alerts
Urgency-based multi-channel notification routing — grab attention for important emails even when you're not looking at the chat. All channels are opt-in and disabled by default.
Priority | Desktop | Sound | MCP Log Level | Webhook |
| ✅ Banner | 🔊 Alert |
| ✅ |
| ✅ Banner | 🔇 Silent |
| ✅ |
| ❌ | ❌ |
| ❌ |
| ❌ | ❌ |
| ❌ |
[settings.hooks.alerts]
desktop = true # OS-level notifications (macOS/Linux/Windows)
sound = true # play sound for urgent emails
urgency_threshold = "high" # minimum priority to trigger desktop alert
webhook_url = "https://ntfy.sh/my-email-alerts" # optional: Slack, Discord, ntfy.sh, etc.
webhook_events = ["urgent", "high"]Supported platforms: macOS (Notification Center via osascript), Linux (notify-send), Windows (PowerShell toast). Zero npm dependencies — uses native OS commands.
Notification setup by platform:
Desktop notifications use osascript (built-in). The terminal app running the MCP server needs notification permission:
Open System Settings → Notifications & Focus
Find your terminal app (Terminal, iTerm2, VS Code, Cursor, etc.)
Enable Allow Notifications and choose Banners or Alerts
Ensure Focus / Do Not Disturb is not blocking notifications
Use check_notification_setup to diagnose and test_notification to verify.
Requires notify-send from libnotify. For sound alerts, paplay is also needed:
# Ubuntu / Debian
sudo apt install libnotify-bin pulseaudio-utils
# Fedora
sudo dnf install libnotify pulseaudio-utils
# Arch
sudo pacman -S libnotifyDesktop notifications require a running display server (X11/Wayland) — they will not work in headless/SSH sessions.
Uses PowerShell toast notifications (built-in):
Open Settings → System → Notifications
Ensure Notifications is turned on
Set Focus Assist to allow notifications
If using Windows Terminal, ensure its notifications are enabled
AI-configurable: The AI can check, test, and configure notifications at runtime:
check_notification_setup— diagnose platform support and show setup instructionstest_notification— send a test notification to verify everything worksconfigure_alerts— enable/disable desktop, sound, threshold, webhook (with optional persist to config file)
Webhook payload:
{
"event": "email.urgent",
"account": "work",
"sender": { "name": "John CEO", "address": "ceo@company.com" },
"subject": "Q4 Review Due Today",
"priority": "urgent",
"labels": ["VIP"],
"rule": "VIP Contacts",
"timestamp": "2026-02-18T11:30:00Z"
}Static rules can force desktop notifications with alert = true, regardless of urgency threshold:
[[settings.hooks.rules]]
name = "VIP Contacts"
match = { from = "ceo@company.com" }
actions = { flag = true, alert = true, labels = ["VIP"] }Features:
Auto-reconnect — Exponential backoff (1s → 60s) on connection failures
Batching — Groups arrivals within a configurable delay to reduce AI calls
Rate limiting — Max 10 sampling calls per minute
Graceful degradation — Falls back to notify mode if client doesn't support sampling
Resource subscriptions — Pushes
notifications/resources/updatedfor unread counts
API
Tools (47)
Read (14)
Tool | Description |
| List all configured email accounts |
| List folders with unread counts and special-use flags |
| Paginated email listing with date, sender, subject, and flag filters |
| Read full email content with attachment metadata |
| Fetch full content of multiple emails in a single call (max 20) |
| Get read/flag/label state of an email without fetching the body |
| Search by keyword across subject, sender, and body |
| Download an email attachment by filename |
| Discover the real folder(s) an email resides in (resolves virtual folders) |
| Extract unique contacts from recent email headers |
| Reconstruct a conversation thread via References/In-Reply-To |
| List available email templates |
| Email analytics — volume, top senders, daily trends |
| Connection health, latency, quota, and IMAP capabilities |
Write (9)
Tool | Description |
| Send a new email (plain text or HTML, CC/BCC) |
| Reply with proper threading (In-Reply-To, References) |
| Forward with original content quoted |
| Save an email draft to the Drafts folder |
| Send an existing draft and remove from Drafts |
| Apply a template with variable substitution |
| Schedule an email for future delivery |
| List scheduled emails by status |
| Cancel a pending scheduled email |
Manage (7)
Tool | Description |
| Move email between folders |
| Move to Trash or permanently delete |
| Mark as read/unread, flag/unflag |
| Batch operation on up to 100 emails |
| Create a new mailbox folder |
| Rename an existing mailbox folder |
| Permanently delete a mailbox and contents |
Labels (5)
Tool | Description |
| Discover available labels (auto-detects provider strategy) |
| Add a label to an email (ProtonMail folders, Gmail X-GM-LABELS, or IMAP keywords) |
| Remove a label from an email |
| Create a new label |
| Delete a label |
Watcher & Alerts (6)
Tool | Description |
| Show IMAP IDLE connections, folders being monitored, and last-seen UIDs |
| List available AI triage presets with descriptions and suggested labels |
| Show current hooks configuration — preset, rules, and custom instructions |
| Update alert/notification settings at runtime |
| Diagnose desktop notification support and provide setup instructions |
| Send a test notification to verify OS permissions are configured |
Calendar & Reminders (6)
Tool | Description |
| Extract ICS/iCalendar events from an email |
| Analyze an email to detect events and reminder-worthy content |
| Add an email event to the local calendar (macOS/Linux) |
| Create a reminder in macOS Reminders.app from an email |
| List all available local calendars |
| Check whether the local calendar is accessible |
Prompts (7)
Prompt | Description |
| Categorize and prioritize unread emails with suggested actions |
| Summarize an email conversation thread |
| Draft a context-aware reply to an email |
| Compose a new email from provided context and instructions |
| Extract actionable tasks from email threads |
| Summarize upcoming calendar events from emails |
| Suggest emails to archive, delete, or unsubscribe from |
Resources (6)
Resource | URI | Description |
Accounts |
| List of configured accounts |
Mailboxes |
| Folder tree for an account |
Unread |
| Unread email summary |
Templates |
| Available email templates |
Stats |
| Email statistics snapshot |
Scheduled |
| Pending scheduled emails |
Provider Auto-Detection
Provider | Domains |
Gmail | gmail.com |
Outlook / Hotmail | outlook.com, hotmail.com, live.com |
Yahoo Mail | yahoo.com, ymail.com |
iCloud | icloud.com, me.com, mac.com |
Fastmail | fastmail.com |
ProtonMail Bridge | proton.me, protonmail.com |
Zoho Mail | zoho.com |
GMX | gmx.com, gmx.de, gmx.net |
Architecture
src/
├── main.ts — Entry point and subcommand routing
├── server.ts — MCP server factory
├── logging.ts — MCP protocol logging bridge
├── cli/ — Interactive CLI commands
│ ├── account-commands.ts — Account CRUD (list, add, edit, delete)
│ ├── setup.ts — Legacy setup alias → account add
│ ├── test.ts — Connection tester
│ ├── config-commands.ts — Config management (show, edit, path, init)
│ ├── install-commands.ts — MCP client registration (install, status, remove)
│ ├── providers.ts — Provider auto-detection + OAuth2 endpoints (experimental)
│ └── scheduler.ts — Scheduler CLI
├── config/ — Configuration layer
│ ├── xdg.ts — XDG Base Directory paths
│ ├── schema.ts — Zod validation schemas
│ └── loader.ts — Config loader (TOML + env vars)
├── connections/
│ └── manager.ts — Lazy persistent IMAP/SMTP with OAuth2 (experimental)
├── services/ — Business logic
│ ├── imap.service.ts — IMAP operations
│ ├── label-strategy.ts — Provider-aware label strategy (ProtonMail/Gmail/IMAP keywords)
│ ├── smtp.service.ts — SMTP operations
│ ├── template.service.ts — Email template engine
│ ├── oauth.service.ts — OAuth2 token management (experimental)
│ ├── calendar.service.ts — ICS/iCalendar parsing
│ ├── scheduler.service.ts — Email scheduling queue
│ ├── watcher.service.ts — IMAP IDLE real-time watcher with auto-reconnect
│ ├── hooks.service.ts — AI triage via MCP sampling + static rules + auto-labeling/flagging
│ ├── notifier.service.ts — Multi-channel notification dispatcher (desktop/sound/webhook)
│ ├── presets.ts — Built-in hook presets (inbox-zero, gtd, priority-focus, etc.)
│ └── event-bus.ts — Typed EventEmitter for internal email events
├── tools/ — MCP tool definitions (42)
├── prompts/ — MCP prompt definitions (7)
├── resources/ — MCP resource definitions (6)
├── safety/ — Audit trail and rate limiter
└── types/ — Shared TypeScript typesMaintainers
Contributing
PRs accepted. Please conform to the standard-readme specification when editing this README.
# Development workflow
pnpm install
pnpm typecheck # type check
pnpm check # lint and format
pnpm build # build
pnpm start # runLicense
Available Tools
49 toolsadd_labelAIdempotent
Add a label to an email. For ProtonMail, this copies the email into the corresponding Labels/ folder. For Gmail and standard IMAP, this sets a keyword flag on the message.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | Label name to add (e.g., "Important", "Project-X") | |
| account | Yes | Account name from list_accounts | |
| emailId | Yes | Email ID (UID) from list_emails | |
| mailbox | Yes | Mailbox containing the email (must be a real folder) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral details beyond the annotations: for ProtonMail it copies the email to a folder, for Gmail/IMAP it sets a keyword flag. This adds meaningful context about side effects and provider variations, complementing the idempotentHint and destructiveHint 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, front-loaded with the core action and immediately followed by necessary provider-specific details. Every word earns its place 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?
The description, combined with full schema coverage and clear annotations, provides sufficient context for a simple mutation tool. It explains the functional impact per provider, and no output schema is required. Minor gaps around return values or error conditions are not essential given the tool's simplicity.
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 100% for all four parameters, each with a meaningful description. The tool description adds no additional parameter-level semantics beyond what the schema already provides, so the baseline of 3 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?
Clearly states 'Add a label to an email' with a specific verb and resource. The provider-specific behavior (ProtonMail folder copy vs Gmail/IMAP keyword flag) distinguishes it from related tools like create_label or remove_label.
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 the tool behaves across different email providers, helping the agent understand when to use it. However, it does not explicitly mention alternatives or when not to use this tool, so it falls short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_calendarA
Add an email event to the local calendar (macOS Calendar.app / Linux via xdg-open). Automatically extracts event data from the email: ICS attachments, meeting URL (Zoom/Teams/Meet), conference dial-in / ID / passcode, attendees, and email body excerpt. All relevant email attachments (PDFs, docs, etc.) are saved locally and linked in the event notes. A native confirmation dialog is shown on macOS before the event is written. Returns one of: added | cancelled | timed_out | no_display.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name | |
| confirm | No | Show native confirmation dialog before adding (default: true) | |
| mailbox | No | Mailbox path (default: INBOX) | INBOX |
| email_id | Yes | Email UID | |
| alarm_minutes | No | Minutes before event to show an alert (default: 15) | |
| calendar_name | No | Target calendar name (empty = default calendar) | |
| save_attachments | No | Save non-ICS email attachments locally and link them in the event notes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the minimal annotations (readOnlyHint=false, destructiveHint=false) by explaining automatic extraction, saving attachments, showing a confirmation dialog on macOS, and returning status codes. However, it does not mention that the confirmation dialog can be bypassed when confirm=false, nor does it explain the meaning of 'no_display' or behavior on Linux without a display.
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 four sentences, with each sentence adding value: purpose, extraction behavior, attachment handling, confirmation, and return values. It is well-structured and front-loaded with the core purpose, making it easy to scan.
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 complexity (7 parameters, no output schema), the description covers a lot: platform specifics, automatic extraction, attachment saving, confirmation, and return statuses. However, it omits details about the effect of confirm=false, platform differences (e.g., no confirmation on Linux), and what exactly triggers 'no_display'. These gaps prevent a perfect score.
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 100%, so the schema fully documents each parameter. The description adds context about the email data extraction (ICS, meeting URLs, attendees) but does not provide additional meaning for individual parameters beyond what is already in the schema. It meets the baseline but does not exceed it.
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: 'Add an email event to the local calendar' with specific verb and resource. It also mentions platform support (macOS/Linux) and distinguishes itself from sibling tools like extract_calendar and list_events by focusing on adding events from email.
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 a clear context for when to use the tool (adding email events to calendar) and includes details about automatic extraction. However, it does not explicitly mention alternatives or when not to use it, such as preferring extract_calendar for just retrieving event details, or checking calendar permissions first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_email_for_schedulingARead-only
Analyze an email to detect calendar events and/or reminder-worthy content. Returns structured analysis so the AI can decide whether to call add_to_calendar, create_reminder, both, or neither. Use this as the first step before creating any scheduling resource.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Email account name | |
| mailbox | No | Mailbox containing the email | INBOX |
| email_id | Yes | Email ID from list_emails_metadata |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive, so the bar is lower. The description adds behavioral context by explaining that it returns structured analysis to guide follow-up actions, and it clarifies that no scheduling resource is directly created. It does not contradict 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 three sentences long, front-loaded with the primary purpose, and every sentence adds value. It avoids redundancy and clearly states purpose, output, and usage in a compact form.
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 an analysis tool with well-documented parameters and read-only annotations, the description is largely complete. It explains the tool's role in the scheduling workflow and the nature of the output, though a more specific outline of the structured analysis fields would improve completeness given the absence of an 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?
All three parameters (account, mailbox, email_id) have descriptions in the schema providing complete coverage. The tool description does not add specific parameter-level semantics beyond indicating the analysis context, so the baseline score of 3 applies.
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 function: analyzing an email to detect calendar events and/or reminder-worthy content. It distinguishes itself from sibling tools by positioning as a pre-processing step for scheduling decisions, specifically referencing add_to_calendar and create_reminder as downstream actions.
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 says to use this tool as the first step before creating any scheduling resource, and it frames the output as a decision aid between add_to_calendar, create_reminder, both, or neither. This gives clear context and alternatives, though it does not explicitly state 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.
apply_templateA
Apply an email template with variable substitution. Use action "preview" to see the result, "draft" to save as draft, or "send" to send immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Recipient addresses (required for send, optional for draft) | |
| action | No | What to do with the composed email | preview |
| account | Yes | Account name from list_accounts | |
| template | Yes | Template name from list_templates | |
| variables | Yes | Variable values as key-value pairs, e.g. { topic: 'Q1 Review' } |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint=false, destructiveHint=false) indicate the tool performs actions but is not destructive. The description adds behavioral transparency by disclosing the specific side effects of each action: preview (no side effect), draft (saves a draft), and send (sends immediately). This goes beyond the annotations, though it does not cover other factors like rate limits or authentication requirements.
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 contains zero unnecessary words. Every sentence contributes to understanding the tool's function and actions. This is exemplary conciseness.
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 tool with 5 parameters, an enum, and a nested object, the description plus high-quality schema descriptions cover the core functionality. It explains the three action modes and their implications. The lack of an output schema is compensated by the description's focus on actions. However, it does not mention possible errors, return formats, or prerequisites beyond what the schema states, preventing a perfect score.
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 covers 100% of the parameters with descriptions, including the default and enum values for 'action.' The description adds marginal value by explaining the meaning of each action, but this is largely a restatement of the schema's own descriptions. It does not introduce new parameter-level details, so the baseline of 3 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's function: 'Apply an email template with variable substitution.' It also enumerates the three actions (preview, draft, send), which distinguishes it from sibling tools like send_email or save_draft, which lack template substitution. The verb 'apply' plus the resource 'email template' is 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 provides clear usage context by explaining each action: 'Use action "preview" to see the result, "draft" to save as draft, or "send" to send immediately.' This tells the agent when to choose each action. However, it does not explicitly mention when not to use this tool or alternatives, so it falls 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.
bulk_actionADestructive
Batch operation on multiple emails by UID list. Supports mark_read, mark_unread, flag, unflag, move, and delete. Max 100 IDs per call. Returns success/failure counts.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Array of email UIDs (max 100). Get UIDs from list_emails or search_emails. | |
| action | Yes | Bulk action to perform | |
| account | Yes | Account name from list_accounts | |
| mailbox | No | Source mailbox containing the emails | INBOX |
| destination | No | Destination mailbox — required when action is 'move' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey destructive intent, and the description adds useful behavioral detail: 'Max 100 IDs per call' and 'Returns success/failure counts.' This transcends the annotation and warns about call limits and result aggregation, though it does not explain partial failure semantics.
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 three concise sentences, front-loaded with the core purpose. Every sentence provides valuable information: action list, id limit, and return format. No filler 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?
For a batch tool with a rich schema and annotations, the description is adequate. It covers purpose, constraints, and return counts. It does not mention potential permission requirements or error handling, but these are not essential given the structured fields, and no output schema exists to explain.
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 already provides descriptions for all parameters (100% coverage), including the max 100 items for 'ids' and the requirement of 'destination' for 'move.' The description replicates this info without adding new semantic value, so a baseline 3 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's function with a specific verb and resource: 'Batch operation on multiple emails by UID list.' It lists supported actions and includes a max limit, distinguishing it from single-email sibling tools like move_email and delete_email.
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 term 'Batch operation' implies use for bulk actions rather than single-email operations, and the max 100 IDs constraint provides a usage boundary. However, it does not explicitly mention when to use this instead of siblings, but the clear context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_scheduledADestructive
Cancel a scheduled email. Removes it from the queue and deletes the associated draft.
| Name | Required | Description | Default |
|---|---|---|---|
| schedule_id | Yes | Schedule ID to cancel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds specific behavioral detail: 'Removes it from the queue and deletes the associated draft.' This clarifies the side effects beyond the annotation, providing useful context about what gets destroyed.
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 short sentences with no filler. Every word adds value, front-loaded with the primary action and followed by the consequence.
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 single-parameter destructive tool with annotations and a full schema, the description is sufficiently complete. It doesn't specify error handling or invalid IDs, but these are not essential given the tool's simplicity.
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 provides 100% coverage with a clear description of schedule_id ('Schedule ID to cancel'). The tool description does not add additional parameter meaning, so the baseline of 3 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 uses a specific verb 'Cancel' with a clear resource 'a scheduled email', and further explains it removes from the queue and deletes the associated draft. This clearly distinguishes it from sibling tools like schedule_email or list_scheduled.
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 canceling a scheduled email but does not explicitly state when to use it vs alternatives, nor does it mention prerequisites like finding the schedule_id first via list_scheduled. No exclusions or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_calendar_permissionsARead-only
Check whether the local calendar is accessible. On macOS, verifies Calendar.app access (requires Privacy & Security → Calendars permission). Returns granted status and step-by-step setup instructions if access is denied.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations (readOnlyHint=true, destructiveHint=false) by explaining that it verifies specific macOS Calendar.app access and that it returns 'granted status and step-by-step setup instructions if access is denied.' This adds valuable behavioral context about the response and prerequisites.
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 at two sentences, with no redundant information. It front-loads the core purpose and then adds necessary platform-specific details without any 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?
For a simple no-parameter check tool with no output schema, the description is fully complete. It covers what the tool does, platform specifics, permission requirements, and what it returns (status + setup instructions). Combined with annotations confirming safety, there are 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?
The tool has zero parameters and an empty input schema, so there is nothing to add. Baseline for 0 params is 4, and the description appropriately focuses on behavior rather than 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 tool's purpose with a specific verb ('Check') and resource ('local calendar accessibility'). It also distinguishes itself from sibling calendar tools (like list_calendars, add_to_calendar) by focusing specifically on permission/access verification, not calendar 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 provides clear context for when to use the tool (to check if calendar is accessible) and mentions the platform-specific requirement (macOS permission). It doesn't explicitly name alternatives or say when not to use it, but the context is strong enough that an agent would know this is a pre-flight permission check rather than a calendar data operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_healthARead-only
Check connection health, quota, and capabilities for email accounts. Useful for diagnosing issues.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Account name (checks all accounts if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds meaningful scope: health, quota, and capabilities. It does not contradict annotations and provides useful behavioral context beyond the read-only flag.
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 short sentences, front-loaded with the core function. No fluff; every word contributes. This is a model of conciseness.
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 health-check tool with one optional parameter, no output schema, and strong annotations, the description is sufficient. It states what is checked and when it's useful. Minor ambiguity in 'capabilities' but not critical for invocation.
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 100% (the optional 'account' parameter is fully described). The description adds no parameter details beyond saying 'email accounts', but the schema already does the heavy lifting. Baseline 3 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 a specific verb ('Check') and resource ('connection health, quota, and capabilities for email accounts'). This distinguishes it from sibling tools like list_accounts or get_email_stats, as it is the only tool focused on health/diagnostics.
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 some usage context ('Useful for diagnosing issues') but does not explicitly state when to use this tool over alternatives or mention any exclusions. It implies use for troubleshooting, which is a clear contextual signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_notification_setupARead-only
Diagnose desktop notification support on this platform. Checks if required OS tools are available and provides setup instructions to enable notification permissions (macOS, Linux, Windows).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral context by stating it checks for required OS tools and provides setup instructions. This goes beyond the annotation and clarifies the tool's non-destructive diagnostic nature.
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, front-loaded with the primary purpose, and the second sentence adds necessary detail. Every sentence contributes meaning 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 simple parameterless tool with annotations, the description adequately covers purpose, behavior, and scope. It could mention the return format explicitly, but given the absence of an output schema, the clarity of 'provides setup instructions' is sufficient.
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 tool has zero parameters, so the description does not need to explain them. Per the rubric, a baseline of 4 is appropriate for 0-parameter tools, and the description adds no unnecessary 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 tool's function with a specific verb ('Diagnose') and resource ('desktop notification support'). It also specifies the platforms (macOS, Linux, Windows) and adds details about checking OS tools and providing setup instructions, distinguishing it from siblings like test_notification and configure_alerts.
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 diagnosing notification setup but does not explicitly state when to use this tool versus alternatives. It lacks exclusions or references to sibling tools, relying on the reader to infer its role as a diagnostic first step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_alertsA
Update alert/notification settings at runtime. Changes take effect immediately. Use save=true to persist changes to the config file. Omit any field to leave it unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | Persist changes to config.toml (default: runtime only) | |
| sound | No | Enable/disable sound alerts for urgent emails | |
| desktop | No | Enable/disable desktop notifications | |
| webhook_url | No | Webhook URL for external notifications (empty string to disable) | |
| webhook_events | No | Which urgency levels trigger webhook dispatch | |
| urgency_threshold | No | Minimum urgency level to trigger desktop notifications |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so the description carries additional burden. It explicitly discloses that changes take effect immediately, that save=true persists to config.toml, and that omitted fields are left unchanged. This goes beyond the annotations by explaining the runtime vs persistent behavior, which is valuable context for an AI agent.
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 sentences, each adding distinct value: purpose, immediate effect, save behavior, and partial updates. Front-loaded with the main action. No fluff, perfectly sized for the tool's complexity.
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 6 parameters and no output schema, the description covers the essential context: runtime vs persisted changes, immediate effect, and partial update behavior. It lacks explicit mention of return values or configuration read alternatives, but these are not critical given the schema richness. Overall, sufficiently complete for correct invocation.
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 100% parameter description coverage, so baseline is 3. The description adds value by stating 'Omit any field to leave it unchanged', which applies to all parameters and clarifies partial update semantics. It also reinforces the save parameter's behavior, aligning with its schema description. This exceeds the baseline.
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 the specific verb 'Update' with the resource 'alert/notification settings', clearly indicating the tool's function. This distinguishes it from sibling tools like test_notification (which tests notifications) and get_hooks_config (which reads configuration). No 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?
It provides clear context for usage: changes take effect immediately, save=true persists to config, and omitting fields leaves them unchanged. While it doesn't explicitly name alternatives or state when not to use this tool, the guidance is sufficient for basic operation and implies that this is the go-to tool for runtime configuration updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_labelA
Create a new label. For ProtonMail, creates a folder under Labels/. For standard IMAP keywords, labels are auto-created on first use — this is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Label name (e.g., "Project-X"). For nested labels use "/" separator (e.g., "Work/Urgent"). | |
| account | Yes | Account name from list_accounts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false. The description adds critical behavioral context: for ProtonMail it creates a folder under Labels/, while for IMAP it's a no-op because labels auto-create on first use. This is exactly the kind of behavior that goes 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 core action, and every sentence adds value. No redundant or filler content.
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 simple 2-parameter schema and annotations, the description covers the essential behavior across account types and the no-op case. It doesn't describe return values, but no output schema exists, and the description is sufficient for an agent to invoke 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 100%, with both 'name' and 'account' already documented. The tool description adds no extra parameter semantics beyond what the schema provides, so the baseline score of 3 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 action ('Create a new label') and the resource ('label'). It distinguishes behavior across ProtonMail and IMAP but does not explicitly differentiate from the sibling tool 'add_label', which could be confused with create_label.
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 this tool has an effect (ProtonMail creates a folder) and when it is a no-op (IMAP labels auto-created). This implies usage guidance, though it doesn't explicitly state alternatives or 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.
create_mailboxAIdempotent
Create a new mailbox (folder). Use '/' as separator for nested folders (e.g., 'Work/Projects'). Use list_mailboxes to see existing folders.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Folder path to create (e.g., 'Archive/2026' or 'Projects') | |
| account | Yes | Account name from list_accounts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is an idempotent write operation. The description adds meaningful behavioral context by explaining the nested folder separator convention and suggesting checking existing folders via list_mailboxes, which goes beyond the structured 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 sentences, front-loaded with the core purpose, and every word earns its place. The advice about separators and list_mailboxes is valuable without unnecessary detail.
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 2-parameter create tool with idempotentHint and no output schema, the description covers purpose, syntax, and a pre-check step. It doesn't explain potential errors or permission requirements, but those are less critical given the annotations and simplicity.
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 schema covers 100% of parameters with descriptions. The description adds a minor but useful clarification about the path separator, but it mostly reinforces what is already in 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 description clearly states the verb 'Create' and resource 'mailbox (folder)', distinguishing it from sibling tools like rename_mailbox, delete_mailbox, and list_mailboxes. It also adds a key detail about nested folder syntax, making the 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 provides explicit guidance on using '/' as a separator and recommends using list_mailboxes to see existing folders. While it doesn't explicitly exclude any scenarios or mention alternatives, the context is clear enough for a create operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reminderA
Create a reminder in macOS Reminders.app from an email. Shows a native confirmation dialog before adding. Use for action items, deadlines, and follow-up tasks extracted from emails. Use analyze_email_for_scheduling first to let the AI decide if a reminder is appropriate.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Reminder body/notes (defaults to auto-built from email) | |
| title | No | Reminder title (defaults to email subject) | |
| account | Yes | Email account name | |
| confirm | No | Show native confirmation dialog before adding (default: true) | |
| mailbox | No | Mailbox containing the email | INBOX |
| due_date | No | ISO 8601 due date (e.g. 2026-02-20T10:00:00). Leave empty for no due date. | |
| email_id | Yes | Email ID from list_emails_metadata | |
| priority | No | Reminder priority | none |
| list_name | No | Reminders list name (default list if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not destructive. The description adds valuable behavioral context that the tool 'Shows a native confirmation dialog before adding,' which goes 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 three sentences, front-loaded with the primary purpose, followed by behavioral transparency and usage guidelines. Every sentence contributes value 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?
Given the rich schema and annotations, the description provides necessary workflow context (use analyze_email_for_scheduling first) and confirms the confirmation dialog. It does not cover return values, but the lack of an output schema reduces that 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 coverage is 100% with all parameters documented in the input schema. The description itself does not add meaningful parameter semantics beyond what the schema provides, so the baseline score of 3 applies.
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 function: 'Create a reminder in macOS Reminders.app from an email.' It uses a specific verb with resource and distinguishes from siblings like add_to_calendar and analyze_email_for_scheduling.
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 usage context: 'Use for action items, deadlines, and follow-up tasks extracted from emails.' It also recommends a preceding step, analyze_email_for_scheduling, but does not explicitly 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.
delete_emailADestructive
Delete an email. By default moves to Trash. Set permanent=true for permanent deletion (⚠️ irreversible). The mailbox must be a real folder. Use find_email_folder first if the email was found in a virtual folder.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name from list_accounts | |
| emailId | Yes | Email ID to delete (from list_emails) | |
| mailbox | No | Mailbox containing the email | INBOX |
| permanent | No | ⚠️ Permanently delete (skip Trash) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true), the description adds valuable context: default moves to Trash, permanent deletion is irreversible, and the mailbox must be a real folder. This helps the agent understand consequences and prerequisites.
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 sentences, front-loaded with the core action, and each sentence adds essential information without redundancy. Perfectly sized for the tool's complexity.
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 no output schema, the description covers key operational details: default behavior, permanent option, folder requirement, and prerequisite tool. It lacks return-value info but that's typically not critical for delete operations.
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 covers all parameters with descriptions (100% coverage), so baseline is 3. The description adds meaning to 'permanent' (irreversible) and 'mailbox' (must be real folder), enhancing understanding beyond 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 description clearly states the verb 'Delete' and resource 'email', and distinguishes from sibling tools like move_email and delete_mailbox by specifying default Trash behavior and permanent deletion option.
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 guidance on when to use permanent=true vs default, and explicitly advises using find_email_folder first when dealing with virtual folders. While it doesn't explicitly compare to move_email, the trash behavior implies an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_labelADestructive
Delete a label. For ProtonMail, deletes the label folder. For standard IMAP keywords, labels cannot be deleted server-wide — use remove_label on individual emails.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Label name to delete | |
| account | Yes | Account name from list_accounts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds valuable platform-specific context: the difference between ProtonMail folder deletion and IMAP keyword limitations. This goes beyond the annotation by explaining real-world behavior and constraints, though it doesn't describe error conditions or return values.
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 at two sentences, with the primary action front-loaded ('Delete a label') followed by necessary edge-case clarification. Every sentence contributes useful 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 no output schema, the description adequately covers what the tool does and when to use it, including a key platform caveat. It could mention success/failure behavior or return value, but this is not essential given the clarity of the description and annotations.
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 provides 100% coverage of both parameters (name and account) with clear descriptions. The tool description does not add additional parameter-level detail, so it correctly relies on the schema. Baseline 3 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's function: 'Delete a label' and distinguishes between ProtonMail (deletes label folder) and standard IMAP keywords (cannot be deleted server-wide). It differentiates from sibling tools, especially remove_label, by explaining when each is appropriate.
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?
Explicit guidance is provided: 'For ProtonMail, deletes the label folder. For standard IMAP keywords, labels cannot be deleted server-wide — use remove_label on individual emails.' This tells the agent exactly when to use this tool and when to use an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_mailboxADestructive
⚠️ DESTRUCTIVE: Permanently delete a mailbox and ALL its contents. This cannot be undone. Use list_mailboxes to verify the folder path.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Folder path to delete (⚠️ all emails inside will be lost) | |
| account | Yes | Account name from list_accounts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the destructiveHint annotation by specifying 'ALL its contents' and 'This cannot be undone,' which details the full scope of destruction. It also advises verification, adding practical behavioral context not present in the annotations. No contradiction exists.
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 a prominent warning emoji, and delivers maximum information with zero wasted words. It efficiently conveys irreversibility, scope, and a verification step.
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 2-parameter destructive operation, the description is complete: it covers the action, irreversibility, scope, and prerequisite verification. Annotations cover the safety profile, and the schema covers parameters. No output schema is needed, and no critical information is missing.
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 100%, with both parameters already well-described in the schema (e.g., path explains 'all emails inside will be lost'). The description itself adds no additional parameter-level detail, so the baseline of 3 applies as the schema carries the burden.
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 specific action: 'Permanently delete a mailbox and ALL its contents.' This distinguishes it from sibling tools like delete_email and delete_label, which operate on different resources. The verb 'delete' plus resource 'mailbox' is 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 provides a concrete safety guideline: 'Use list_mailboxes to verify the folder path.' This tells the agent when and how to prepare for using the tool. However, it does not explicitly mention alternatives or when not to use it, though the destructive nature makes the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_attachmentARead-only
Download an email attachment by filename. First use get_email to see available attachments and their filenames. Returns base64-encoded content for files ≤5MB.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID (UID) from list_emails or get_email | |
| account | Yes | Account name from list_accounts | |
| mailbox | No | Mailbox containing the email | INBOX |
| filename | Yes | Exact attachment filename (from get_email metadata) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses that the tool returns base64-encoded content and has a 5MB file size limit. This is valuable behavioral information that helps the agent set expectations. It does not mention error handling or auth requirements, but the core behavior is well covered.
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 purpose, then add usage guidance and return format. Every sentence is informative and no words are wasted. It earns a perfect score for efficiency.
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 tool is simple (4 params, no output schema), and the description covers the essential aspects: what it does, how to prepare (use get_email), what it returns (base64), and a key constraint (≤5MB). The annotations cover safety. For its complexity, the description is fully complete and leaves no significant 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?
The input schema already provides 100% parameter coverage, including descriptions for all four parameters. The description adds minimal extra meaning beyond stating 'by filename', which is already captured in the schema's filename description. Since the schema does the heavy lifting, a baseline score of 3 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's function: 'Download an email attachment by filename.' It uses a specific verb and resource, and it distinguishes itself from sibling tools by focusing on attachment downloads. The description also provides a prerequisite step ('First use get_email'), which clarifies its role in the workflow.
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 usage context by instructing to first use get_email to retrieve attachment filenames. This establishes a recommended sequence and differentiates from get_email itself. However, it does not explicitly mention when not to use this tool or list alternative tools, but given the sibling set, no direct alternative exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_calendarARead-only
Extract calendar events (ICS/iCalendar) from an email. Returns structured event data including time, location, attendees, and status.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name | |
| mailbox | No | Mailbox path (default: INBOX) | INBOX |
| email_id | Yes | Email UID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is known. The description adds value by specifying the return payload (structured event data with time, location, attendees, status), which goes beyond the annotations. No contradictions found.
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, with the main action front-loaded. Every sentence provides necessary information: what it does and what it returns. No waste 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?
For a tool with no output schema, the description adequately explains the return value (structured event data with key fields). Given the simple parameter set and safe annotations, this is sufficient. It could mention edge cases like missing calendar parts, but that's not essential for basic usage.
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 covers all three parameters (account, mailbox, email_id) with descriptions, achieving 100% coverage. The description does not add parameter-specific meaning, but per the rubric, high schema coverage warrants a baseline score of 3. No additional parameter context is necessary.
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 function: extracting calendar events (ICS/iCalendar) from an email. It uses a specific verb ('Extract') and resource ('calendar events from an email'), distinguishing it from siblings like list_events (which lists existing calendar events) and extract_contacts (which extracts contacts).
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 context for use is clear: when you have an email containing calendar data and need structured event information. However, it does not explicitly mention alternatives or state when not to use it. The description implies usage rather than providing direct comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_contactsARead-only
Extract unique contacts from recent email headers. Returns contacts sorted by frequency (most frequent first). Useful for finding frequent correspondents or building an address book.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recent emails to scan (default: 100, max: 500) | |
| account | Yes | Account name from list_accounts | |
| mailbox | No | Mailbox to scan (default: INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds useful behavioral context: it processes 'recent email headers', returns 'unique' contacts, and sorts them 'by frequency', which goes beyond the annotations without contradicting them.
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 primary action and result, then a brief use-case statement. Every sentence earns its place with concise, useful 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 tool is simple, with no output schema. The description explains the output format ('contacts sorted by frequency') and the scanning scope ('recent email headers'). Combined with the schema, this gives an agent everything needed to select and invoke 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 coverage is 100%, with each parameter (limit, account, mailbox) already described. The description mentions 'recent email headers' and frequency sorting, but does not add material semantic detail about the parameters beyond what the schema provides. Baseline 3 applies.
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 ('Extract') and resource ('unique contacts from recent email headers'), and clearly states the output ('Return contacts sorted by frequency'). This distinguishes it from sibling tools like 'extract_calendar'.
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 use cases ('Useful for finding frequent correspondents or building an address book'), giving context for when to use the tool. It doesn't explicitly mention when not to use it, but no alternative contact-extraction sibling exists, so the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_email_folderARead-only
Find which real mailbox folder(s) an email belongs to. Required before move_email or delete_email when the email was found in a virtual folder (e.g., "All Mail", "Starred"). Returns the real folder path to use as sourceMailbox.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name from list_accounts | |
| emailId | Yes | Email ID (UID) from list_emails | |
| sourceMailbox | No | Mailbox where the email is currently visible (e.g., "All Mail") | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint annotation by explaining the return behavior ('Returns the real folder path to use as sourceMailbox') and its role in subsequent operations. It does not contradict the annotation and adds useful context about the tool's purpose and output, though it does not detail error cases or other behavioral nuances.
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 core purpose, and every sentence earns its place. It states what the tool does, when it's needed, and what it returns, with no redundancy or 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?
This is a simple read-only utility with a clear purpose, complete parameter schema, and no output schema. The description covers what the tool does, when to use it, and the nature of its return value, making it fully self-contained for an agent to select and invoke 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?
The schema provides 100% coverage with meaningful descriptions for all three parameters, so the baseline is 3. The description adds a relationship note: the returned path is used as sourceMailbox for move/delete, which is helpful but does not substantially alter the parameter understanding beyond what the schema already offers.
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 function: 'Find which real mailbox folder(s) an email belongs to.' It uses a specific verb ('Find') and resource ('real mailbox folder(s)'), and distinguishes it from siblings by noting it is a required prerequisite for move_email and delete_email when the email is in a virtual folder. This is highly 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 explicitly states when to use the tool: 'Required before move_email or delete_email when the email was found in a virtual folder (e.g., "All Mail", "Starred").' This gives clear context and includes examples, making it evident when this tool is necessary and when it might not be (though not explicitly stated, the condition is clear).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forward_emailA
Forward an email to new recipients with optional additional message. Original email is quoted below.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients | |
| to | Yes | Forward to these recipients | |
| body | No | Additional message above the forwarded content | |
| account | Yes | Account name from list_accounts | |
| emailId | Yes | Email ID to forward (from list_emails or get_email) | |
| mailbox | No | Mailbox where the original email is | INBOX |
| attachments | No | Local files to attach |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral trait that the original email is quoted below, and notes that the message is optional. The annotations already indicate non-read-only and non-destructive, and the description does not contradict them. It does not detail side effects beyond the quoted content, but with annotations lowering the bar, this is sufficient.
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. It is efficient and clear without unnecessary detail.
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 has 7 parameters but a 100% schema description, the description is adequately complete for a standard forward operation. It does not cover return values, but with no output schema and the simplicity of the action, this is not a major gap. The lack of explicit alternative guidance is a minor omission.
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 100%, so all parameters are documented in the schema. The description adds minimal extra meaning: 'optional additional message' mirrors the schema's body description, and 'Original email is quoted below' is behavioral rather than parameter-specific. It does not significantly enhance understanding of parameters beyond 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 description states a specific verb and resource: 'Forward an email to new recipients with optional additional message.' This clearly distinguishes the tool from siblings like send_email and reply_email, and the mention of 'new recipients' and 'optional additional message' adds useful scope.
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 by indicating this is for forwarding an existing email to new recipients, which inherently contrasts with sending a new email or replying. However, it does not explicitly name alternative tools or provide when-not-to-use guidance, so it falls 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.
get_emailARead-only
Get the full content of a specific email by ID. Does NOT mark the email as seen (uses IMAP BODY.PEEK — non-destructive). Use format="text" to strip HTML, or format="stripped" to also remove quoted replies and signatures. Use maxLength to cap the body size for large emails. Set markRead=true only when you want to explicitly mark the email as read.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Body format: full=raw (default), text=plain text (strips HTML), stripped=plain text without quoted replies or signatures | full |
| account | Yes | Account name from list_accounts | |
| emailId | Yes | Email ID from list_emails or search_emails | |
| mailbox | No | Mailbox path (default: INBOX) | INBOX |
| markRead | No | Explicitly mark the email as read after fetching (default: false — reading is non-destructive by default) | |
| maxLength | No | Truncate body at this many characters. A hint shows how many characters remain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description goes further by explaining the IMAP BODY.PEEK mechanism and explicitly stating that reading does NOT mark emails as seen unless markRead is set. This fully discloses side effects and goes beyond the annotation baseline.
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 and front-loaded: the first sentence states the core purpose and key non-destructive trait, followed by three targeted sentences on parameter usage. Every sentence adds value 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?
With a 6-parameter schema and no output schema, the description explains behavioral aspects and usage choices well. It could be more explicit about the exact return structure (e.g., headers vs. body), but the phrase 'full content' plus the maxLength hint provides a sufficient mental model for most use 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 100%, so all parameters are already described. The description adds valuable usage context—such as using maxLength for large emails and explaining that markRead is only for explicit read-marking—thereby enriching parameter semantics beyond the schema's basic 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 opens with 'Get the full content of a specific email by ID', clearly stating a specific verb, resource, and scope. It also emphasizes the non-destructive nature, which helps differentiate it from other email operations like mark_email or get_emails.
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, actionable guidance on when to use format, maxLength, and markRead parameters: 'Use format="text"...', 'Use maxLength to cap the body size...', 'Set markRead=true only when...'. It does not explicitly list alternative sibling tools, but the parameter usage context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emailsARead-only
Fetch the full content of multiple emails in a single call (max 20). More efficient than calling get_email repeatedly when triaging or summarising several emails. Does NOT mark emails as seen. Defaults to format="text" (HTML stripped) for compact, AI-friendly output.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Email IDs to fetch (max 20). Obtain IDs from list_emails or search_emails. | |
| format | No | Body format (default: text — strips HTML for efficient AI reading). Use stripped to also remove quoted replies. | text |
| account | Yes | Account name from list_accounts | |
| mailbox | No | Mailbox path (default: INBOX) | INBOX |
| maxLength | No | Truncate each email body at this many characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds a valuable behavioral note: 'Does NOT mark emails as seen.' It also discloses the default format behavior ('text' strips HTML), which is useful for agents expecting raw content. 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 compact and front-loaded: first states the core action and constraint, then gives a usage rationale, and finally notes behavioral side-effects. Every sentence earns its place, with no redundant 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 100% schema description coverage, readOnly annotations, and no output schema, the description provides sufficient context for a batch-read tool. It could have added a note about the return structure (e.g., object keyed by email ID) but this is already implied by 'full content'. The description is adequate for the tool's 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 100%, and the schema already describes each parameter thoroughly (ids, format, account, mailbox, maxLength). The description mentions the 'max 20' limit and the 'text' default, but these are already in the schema. It adds no significant new semantic meaning beyond what the schema provides, so the baseline 3 applies.
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 clearly identifies the resource as 'full content of multiple emails' with an explicit max of 20. It distinguishes itself from the sibling tool get_email by highlighting batch operation and from list_emails/search_emails by mentioning 'full content', 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?
It explicitly states when to use this tool: 'when triaging or summarising several emails' and compares it to calling get_email repeatedly. However, it doesn't mention when not to use it relative to other siblings like search_emails or list_emails, leaving some implicit context gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_email_statsARead-only
Get email statistics and analytics for a mailbox. Shows volume, top senders, daily trends, and read/flagged counts.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Time period: day, week, or month | week |
| account | Yes | Account name | |
| mailbox | No | Mailbox path (default: INBOX) | INBOX |
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 value by specifying the type of analytics returned (volume, top senders, daily trends), which is especially useful given the absence of an output schema. 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 two short sentences (14 words) that directly state the purpose and key output categories. It is front-loaded with the main verb and resource, with zero 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 all parameters documented and safety annotations present, the description adequately covers the tool's purpose and return contents. It could benefit from explicit use-case distinction, but overall it is sufficient for an agent to select and invoke the 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 input schema provides descriptions for all three parameters (account, period, mailbox), covering 100% of semantics. The tool description adds no additional parameter information, so the baseline for high schema coverage applies.
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 retrieving email statistics/analytics, naming specific metrics (volume, top senders, daily trends, read/flagged counts). This distinguishes it from siblings like list_emails or get_email, which fetch individual messages or lists.
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 is present. The description implies usage for aggregate analytics but does not mention when to avoid it or name alternative tools, so only implied context exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_email_statusARead-only
Get the current read/flag/label state of an email without fetching its body. Much cheaper than get_email when you only need to check whether an email is unread, flagged, or which labels it has. Also useful to confirm the result of a mark_email call. Does NOT mark the email as seen.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name from list_accounts | |
| emailId | Yes | Email ID from list_emails or search_emails | |
| mailbox | No | Mailbox path (default: INBOX) | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and destructiveHint, but the description adds valuable behavioral context: it does not mark the email as seen and is cheaper than fetching a full email. This goes beyond annotation hints to clarify side effects and performance.
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 succinct sentences front-load the primary purpose, then add usage guidance and a side-effect caveat. 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 low-complexity read tool with fully specified params and good annotations, the description covers purpose, usage, side-effect nuance, and alternative. The absence of an output schema is mitigated by naming the returned state dimensions (read/flag/label).
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?
All three parameters are described in the schema with clear provenance (account from list_accounts, emailId from list_emails/search_emails, mailbox path default). The description doesn't add new parameter-level details beyond what the schema already provides, so baseline 3 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 retrieves email state metadata (read/flag/label) without fetching the body, differentiating it from get_email. The verb 'Get' and specific resource target make the 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?
It explicitly recommends using this tool over get_email when only state is needed, and mentions confirming mark_email results. This provides clear when-to-use guidance and names an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hooks_configARead-only
Get the current AI hooks configuration including preset, rules, and custom instructions.
| Name | Required | Description | Default |
|---|---|---|---|
No 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 safety profile is covered. The description adds context about the returned content (preset, rules, custom instructions) but does not disclose any other behavioral traits such as caching, authentication requirements, or error 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?
The description is a single, concise sentence that front-loads the action ('Get') and resource ('AI hooks configuration'). Every word contributes meaning, with no redundant or vague phrasing.
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 zero-parameter getter with strong annotations, the description is mostly complete. It names the key components of the configuration, though it does not describe the exact return structure or potential edge cases. Given the low complexity, this is sufficient.
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 zero parameters, the schema fully defines the input and the description naturally adds no parameter-level detail. The baseline of 4 for no-parameter tools applies, and the description's mention of return contents partially compensates for the lack of a response 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 description clearly states the tool gets the current AI hooks configuration, listing specific components (preset, rules, custom instructions). The verb 'Get' is specific and the resource is well-defined, distinguishing it from related tools like list_presets.
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. It does not mention why one would choose get_hooks_config over list_presets or other configuration-related tools, leaving the decision entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_threadARead-only
Reconstruct a full email conversation thread by following References and In-Reply-To headers. Returns all related messages. Does NOT mark emails as seen. Use format="text" to strip HTML, or format="stripped" to also remove quoted replies. Use newestFirst=true to show the most recent message in full and older messages as header-only summaries. Use get_email first to obtain the message_id.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Body format: full=raw (default), text=plain text (strips HTML), stripped=plain text without quoted replies or signatures | full |
| account | Yes | Account name from list_accounts | |
| mailbox | No | Mailbox to search (default: INBOX) | INBOX |
| maxLength | No | Truncate each message body at this many characters. A hint shows how many characters remain. | |
| message_id | Yes | Message-ID header value (from get_email) | |
| newestFirst | No | When true, shows the newest message in full and older messages as header-only summaries. Ideal for AI triage of long threads where only the latest reply matters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavior beyond the annotations ('readOnlyHint: true, destructiveHint: false') by explicitly stating 'Does NOT mark emails as seen.' This is useful because many email tools inadvertently mark messages as read. It also discloses how maxLength truncates bodies ('A hint shows how many characters remain') and how newestFirst changes the response structure, giving the agent expectations about output 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?
The description is composed of four concise sentences that each earn their place: the core purpose, a key side-effect (not marking as seen), format guidance, newestFirst guidance, and a prerequisite. It is front-loaded with the most important information and tightly scoped with no filler 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?
The tool has 6 parameters and no output schema, but the description covers the return concept ('Returns all related messages') and explains key options (format, newestFirst, maxLength). It also references the required prerequisite (get_email). It does not describe response fields or ordering details beyond newestFirst, but for a read-only thread reconstruction tool, this is adequate context given the rich input 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?
The schema already provides detailed descriptions for all six parameters (100% coverage), so the description's input-schema value is marginal. The description does add workflow context like 'from get_email' for message_id and 'Ideal for AI triage' for newestFirst, but these are usage hints rather than semantic explanations of parameter values. Per calibration, a baseline of 3 is appropriate when the schema carries the parameter documentation burden.
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 'Reconstruct a full email conversation thread by following References and In-Reply-To headers' – a specific verb and resource that clearly distinguishes it from siblings like get_email (single message) and get_emails (likely bulk). It also explicitly states the tool's output: 'Returns all related messages.' This is unambiguous and action-oriented.
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 usage context, including a prerequisite ('Use get_email first to obtain the message_id') and specific guidance for parameters (`Use format="text" to strip HTML, or format="stripped" to also remove quoted replies`, `Use newestFirst=true to show the most recent message in full`). It also states an ideal use case ('Ideal for AI triage of long threads'), but it does not explicitly say when not to use this tool versus alternatives beyond the get_email prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watcher_statusARead-only
Get the status of IMAP IDLE watcher connections and recent activity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, which covers safety. The description adds useful context about the tool's focus (IMAP IDLE watcher connections) and that it reports recent activity, going beyond what annotations provide. It does not detail output format, but for a read-only status tool this is acceptable.
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, front-loaded sentence with no redundant words. It conveys the essential purpose and scope efficiently, earning a perfect score for conciseness.
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 zero-parameter, read-only status tool with no output schema, the description is sufficiently complete. It tells the agent what resource is inspected and that recent activity is included. However, it leaves vague what 'status' encompasses (e.g., booleans, counts, timestamps), so it is not perfect.
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?
There are zero parameters, and the schema coverage is 100% (vacuously). Per the guideline, a baseline of 4 applies when there are no parameters to document. The description does not need to explain parameter meanings.
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 specifies the verb 'Get' and the resource 'status of IMAP IDLE watcher connections and recent activity'. It uniquely identifies the tool among siblings, which mostly focus on emails, mailboxes, or calendars, making it distinct as a status/diagnostic tool.
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 usage context is implied: it is a diagnostic tool for inspecting IMAP IDLE watcher connections. However, it does not explicitly state when to use it over related tools like check_health or check_notification_setup, nor does it provide exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsARead-only
List all configured email accounts. Call this first to discover available account names for use with other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the 'Call this first' context, which is more of a usage guideline than a behavioral trait. It does not detail return format, but for a zero-parameter read-only list tool, the basic behavior is self-evident.
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: the first delivers the core function, the second adds essential usage guidance. No redundancy or filler; the most important information is front-loaded.
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 zero-parameter discovery tool, the description covers what it does, when to use it, and hints at the output ('available account names'). Annotations confirm safety. A minor gap is the lack of explicit response structure, but the description sufficiently implies the return value.
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 tool has zero parameters, so the schema provides full coverage by definition. The description adds the expected output ('account names'), which is useful for setting expectations but not required for parameter understanding. Baseline 4 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 'List all configured email accounts' with a specific verb and resource. It also distinguishes itself from sibling tools like list_mailboxes and list_emails by framing it as a discovery step for account names.
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 instruction 'Call this first to discover available account names for use with other tools' provides explicit temporal guidance and establishes the tool as a prerequisite. It does not name alternative tools or explicitly state when not to use it, 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.
list_calendarsARead-only
List all available local calendars (macOS Calendar.app / Linux default). Use the returned calendar names with add_to_calendar to target a specific calendar.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint true and destructiveHint false. The description adds useful context about local-only calendars and platform scope (macOS/Linux), which goes beyond the annotations. It doesn't describe return format, but for a zero-parameter list tool that's a minor omission.
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-load the primary action and then provide actionable downstream guidance. Every word earns its place; no redundancy or 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?
For a simple zero-parameter list tool, the description is fully complete: it states what is listed, platform specificity, and how to use the results. The pointer to add_to_calendar adds pragmatic context. No output schema exists, but the return values (calendar names) are obvious from the description.
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 tool has zero parameters, so the baseline is 4. The description adds no parameter details (properly, as none exist), and the empty input schema is fully self-documenting.
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 all available local calendars, specifying the scope as macOS Calendar.app / Linux default. This distinguishes it from sibling tools like list_events or list_accounts, and mentions the practical use of returned names with add_to_calendar.
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 provides explicit guidance on when to use the tool: to obtain calendar names for targeting a specific calendar in add_to_calendar. However, it does not explicitly mention when not to use it or compare with alternative list tools, so it's slightly below a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emailsARead-only
List emails in a mailbox with optional filters. Returns paginated results with metadata (read/unread 🔵, flagged ⭐, replied ↩️, attachments 📎, labels 🏷️). Use get_email to fetch full body content. ProtonMail note: labels are represented as IMAP folders — use list_labels to discover them, then list_emails with mailbox="Labels/X" to find labeled emails.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Filter by sender address or name | |
| page | No | Page number | |
| seen | No | Filter: true=read only, false=unread only | |
| since | No | Show emails after this date (ISO 8601) | |
| before | No | Show emails before this date (ISO 8601) | |
| account | Yes | Account name from list_accounts | |
| flagged | No | Filter: true=flagged only, false=unflagged only | |
| mailbox | No | Mailbox path (default: INBOX) | INBOX |
| subject | No | Filter by subject keyword | |
| answered | No | Filter: true=replied, false=not yet replied | |
| pageSize | No | Results per page | |
| has_attachment | No | Filter: true=has attachments, false=no attachments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description aligns with this by describing a read-only listing operation. It adds valuable behavioral details beyond the annotations: paginated results, metadata (with icons), and the ProtonMail-specific behavior where labels are represented as IMAP folders — a non-obvious nuance that helps agents avoid pitfalls.
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 sentences, each purposeful: the first states the core function and return type, the second points to a sibling for a specific need, and the third offers a platform-specific tip. No filler 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?
For a tool with 12 parameters and no output schema, the description covers the essential aspects: listing with filters, paginated results, metadata, and a critical platform-specific caveat. It doesn't fully address differentiation from search_emails or output structure, but the schema and sibling names fill those gaps. It is sufficiently complete for an agent to decide when and how to use 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 schema covers 100% of parameters, so baseline is 3. The description adds extra meaning by providing a concrete usage example for the mailbox parameter (mailbox='Labels/X'), showing how ProtonMail labels map to folders. This goes beyond the schema's generic 'Mailbox path (default: INBOX)' and enriches understanding of the filter behavior.
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 emails in a mailbox with optional filters' — a specific verb and resource that immediately conveys the tool's function. It also distinguishes itself from related tools by directing users to 'get_email' for full body content, and the mention of metadata (read/unread, flagged, replied, attachments, labels) adds further scope clarity.
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 get_email for full body content, and for ProtonMail labels use list_labels then list_emails with mailbox='Labels/X'. This gives clear context for when to use the tool versus alternatives, though it doesn't explicitly contrast with search_emails or other sibling list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsARead-only
List local calendar events with optional filters. Search by title, date range, or calendar name. Use to check for existing events before creating new ones, or to verify a recently added event. Returns event id, title, start/end time, location, and calendar name.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Show events on or before this date (ISO 8601, e.g. 2026-02-28). Defaults to 30 days from now. | |
| from | No | Show events on or after this date (ISO 8601, e.g. 2026-02-19). Defaults to 7 days ago. | |
| limit | No | Maximum number of results (default: 20) | |
| title | No | Filter events whose title contains this text (case-insensitive) | |
| calendar_name | No | Restrict to a specific calendar by name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety profile is covered. Description adds return field list and filtering options, but does not disclose pagination defaults, ordering, or timezone behavior; annotations lower the burden.
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 sentences, first is action+scope, second gives usage context, third lists return fields. No filler or duplication of schema parameter details.
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 read-only list tool with good annotations and full schema coverage, description covers purpose, usage, and return shape. It could mention default date range behavior or ordering, but these are schema-documented; overall 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?
Input schema covers all 5 parameters with descriptions (100% coverage). Description merely restates filtering dimensions without adding syntax, format, or interaction details beyond schema, so baseline 3 applies.
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 names specific action 'List local calendar events' and clarifies filtering dimensions (title, date range, calendar name), distinguishing it from sibling tools like list_calendars (which lists calendars, not events) and add_to_calendar (which creates events).
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?
States explicit use cases: check existing events before creating, verify a recently added event. This implies when to use relative to add_to_calendar, though it does not name alternative tools 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.
list_labelsARead-only
List available labels for an email account. Auto-detects the label system: ProtonMail folder-labels, Gmail X-GM-LABELS, or IMAP keywords. ProtonMail note: labels are represented as IMAP folders under the Labels/ prefix. Use list_emails with mailbox="Labels/" to find emails tagged with a ProtonMail label.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name from list_accounts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description does not contradict this. It adds behavioral context by explaining auto-detection among ProtonMail, Gmail, and IMAP label systems, and discloses the ProtonMail folder prefix behavior. This goes beyond the annotation and helps the agent understand potential platform-specific variations.
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 but complete, with four short sentences. The first sentence front-loads the core purpose, followed by essential auto-detection details and a practical ProtonMail tip. Every sentence earns its place with no redundancy or 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?
Given the simple one-parameter tool with no output schema, the description covers the key behaviors: what it lists, how it auto-detects, and a platform-specific note. It does not detail the exact return format, but for a straightforward list operation this is acceptable. It could be slightly more explicit about output, but overall 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 description coverage is 100% (the 'account' parameter is described as 'Account name from list_accounts'). The tool description does not add further meaning to the parameter; it relies on the schema. According to the rubric, a baseline of 3 is appropriate when the schema fully documents 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 purpose: 'List available labels for an email account.' It uses a specific verb ('list') and resource ('labels'), and distinguishes itself from sibling tools like list_mailboxes by focusing on the label system and auto-detection. The ProtonMail note further differentiates this from generic mailbox listing.
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 context on when to use the tool and how to handle ProtonMail-specific label representation. It explicitly instructs using list_emails with a specific mailbox prefix to find emails with a ProtonMail label. However, it does not explicitly exclude alternatives like list_mailboxes or state when not to use this tool, so it stops short of a full when/when-not guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mailboxesARead-only
List all mailbox folders for an account with unread counts and special-use flags. Use list_accounts first to get the account name.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name from list_accounts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that it returns unread counts and special-use flags, but does not disclose other behavioral aspects like pagination, error handling, or system folders. Given the annotations, this is adequate but not rich.
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 core purpose and then a clear prerequisite. Every word earns its place; there is no redundancy or 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?
This is a simple one-parameter tool with no output schema. The description adequately explains what the tool returns (unread counts and special-use flags) and the prerequisite step (list_accounts). Given the low complexity and good annotations, the description is complete for the agent to select and invoke 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 coverage is 100%, with the 'account' parameter already described as 'Account name from list_accounts'. The description reinforces this by telling the user to use list_accounts first, but does not add substantial new meaning beyond what the schema provides.
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 'List all mailbox folders' with the specific resource (mailbox folders) and additional detail about unread counts and special-use flags. This distinguishes it from sibling tools like list_accounts or list_labels, which target different resources.
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 usage context: 'Use list_accounts first to get the account name.' This gives a clear prerequisite and suggests the intended workflow. However, it does not explicitly mention when not to use this tool or alternatives, so it falls short of a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_presetsARead-only
List all available AI triage presets with their descriptions and suggested labels.
| Name | Required | Description | Default |
|---|---|---|---|
No 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 safety profile is covered. The description adds that presets include descriptions and suggested labels, which is useful but doesn't go beyond what a simple list tool obviously returns. No side effects or additional behaviors are disclosed.
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 conveys the action, scope, and output content without redundancy. Every word 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 simple no-parameter list tool with read-only annotations, the description is complete: it tells what the tool returns (presets with descriptions and labels). The lack of an output schema is compensated by this explicit mention. Minor details like pagination or ordering are not necessary for such a straightforward 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?
The tool has zero parameters, and the schema is empty. The baseline for 0 params is 4, and the description accurately reflects that no arguments are needed, so no additional parameter semantics are required.
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 ('List'), resource ('all available AI triage presets'), and includes output details ('with their descriptions and suggested labels'). This distinguishes it from sibling tools like list_templates and list_labels.
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 clearly implies use when the agent needs to discover available AI triage presets or their labels. It doesn't mention exclusions or alternatives, but the context is sufficiently clear for a read-only listing tool with no parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_remindersARead-only
List reminders from macOS Reminders.app with optional filters. Search by title or list name. By default only shows incomplete reminders. Use to check for existing reminders before creating new ones, or to verify a recently added reminder. Returns reminder id, title, due date, completion status, priority, and list name.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default: 20) | |
| title | No | Filter reminders whose title contains this text (case-insensitive) | |
| list_name | No | Restrict to a specific Reminders list by name | |
| include_completed | No | Include completed reminders (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavior: default to incomplete reminders, filtering options, and the exact return fields. This goes beyond annotations without contradicting them.
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?
Five short, information-dense sentences. Front-loaded with purpose, then filters, default behavior, use cases, and return fields. Every sentence earns its place with 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?
For a list tool without an output schema, the description is thorough: it explains default behavior, optional filters, return fields, and use cases. Combined with complete schema annotations and read-only hints, the agent has everything needed to invoke it 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 covers all 4 parameters with complete descriptions (100% coverage), so baseline is 3. The description adds context by mentioning 'Search by title or list name' and 'By default only shows incomplete reminders,' which maps to title/list_name/include_completed, but it doesn't provide significantly new parameter semantics beyond 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?
States a specific verb ('List') and resource ('reminders from macOS Reminders.app') with optional filters. Clearly distinguishes from sibling tools like create_reminder by focusing on read-only listing. Also specifies the returned fields, making the 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?
Provides clear use cases: 'Use to check for existing reminders before creating new ones, or to verify a recently added reminder.' This implicitly differentiates from create_reminder and other tools. While it doesn't list exclusions, the context is sufficient for an agent to know when to apply this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scheduledARead-only
List scheduled emails. Shows pending, sent, or all scheduled emails.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by status (default: pending) | pending |
| account | No | Filter by account name (all accounts if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read nature is established. The description adds the status scoping dimension but no further behavioral details like response format or pagination. This is comparable to the calibration example where annotations cover safety and description adds a scope constraint.
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 short, front-loaded sentences with no redundant phrasing. Every word contributes to the purpose and scope.
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 read-only listing tool, the description adequately covers the purpose and statuses. The schema fully documents parameters, and annotations handle safety. It does not mention the account filter, but this is captured in the schema, so completeness is sufficient.
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 100%, with both parameters (status and account) already documented with descriptions and an enum for status. The description repeats the status values but adds no meaning beyond what the schema provides, so the baseline 3 applies.
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 precisely states 'List scheduled emails' and clarifies the statuses it can show (pending, sent, or all). This distinguishes it from sibling tools like list_emails (regular emails) and cancel_scheduled (mutating scheduled emails).
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 clearly implies the tool is for viewing scheduled emails by status, which provides context for when to use it. However, it does not explicitly name alternatives or state when not to use it, though the sibling list_emails is implicitly different.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesARead-only
List all available email templates. Templates are TOML files in ~/.config/email-mcp/templates/ with {{variable}} placeholders for subject and body.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe read-only operation (readOnlyHint=true, destructiveHint=false). The description adds valuable context beyond annotations by specifying the exact filesystem location (~/.config/email-mcp/templates/) and the placeholder syntax ({{variable}}), which helps the agent know what to expect when invoking the tool.
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, dense sentence that conveys both the action and the relevant details (location, format) without any wasted words. It is front-loaded with the core purpose and then provides supporting context.
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 output schema, the description sufficiently covers what the tool does and what the templates are. It could potentially describe the return format (e.g., template names or paths), but the given details are adequate for an agent to select and call 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?
The tool has zero parameters, and the description provides all needed context about the data source. With 0 parameters, the schema already covers everything; the description's mention of the template location adds meaning beyond the empty 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 description uses the specific verb 'list' with the resource 'email templates', clearly distinguishing this from sibling tools like list_accounts or list_mailboxes. It also specifies the scope ('all available') and adds detail about the template format, making the 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 clearly implies this tool is used to discover available templates (e.g., before applying one), but it does not explicitly mention alternatives or when not to use it. The context about TOML files and placeholders provides useful background that helps the agent understand the tool's role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_emailAIdempotent
Change email flags — mark as read/unread, flag/unflag. Idempotent: marking an already-read email as read is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID (UID) from list_emails or search_emails | |
| action | Yes | Action: read, unread, flag (star), or unflag (unstar) | |
| account | Yes | Account name from list_accounts | |
| mailbox | No | Mailbox containing the email | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, but the description adds specific behavioral context by explaining that marking an already-read email as read is a no-op. This goes beyond structured data and clarifies the idempotency semantics.
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 short sentences with no filler, front-loading the action and adding only the useful idempotency detail. 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?
For a simple flag mutation tool with full schema coverage and idempotency annotations, the description covers all essential information. No output schema exists, and return values are not needed for this 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 coverage is 100%, with each parameter described in detail including the action enum. The description's mention of 'read/unread, flag/unflag' mirrors the schema's action values without adding new parameter semantics, so the baseline score 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 changes email flags (read/unread, flag/unflag), which is a specific verb+resource combination. It distinguishes itself from sibling tools like move_email or delete_email by focusing solely on flag modifications.
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 makes it obvious when to use this tool—whenever email flags need to be modified. It doesn't explicitly mention alternatives or exclusion criteria, but the tool's narrow scope makes misuse unlikely and no alternative flag tool exists among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_emailAIdempotent
Move an email to a different mailbox folder. The sourceMailbox must be a real folder, not a virtual one like "All Mail". Use find_email_folder first if the email was discovered in a virtual folder.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name from list_accounts | |
| emailId | Yes | Email ID to move (from list_emails) | |
| sourceMailbox | Yes | Current mailbox (e.g., INBOX) | |
| destinationMailbox | Yes | Target mailbox (e.g., Archive). Use list_mailboxes to see options. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-destructive, idempotent operation. The description adds a meaningful constraint about virtual folders being invalid sources, which is behavioral context beyond the annotations. It doesn't detail failure modes, but the added constraint is 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?
The description is two sentences: the first states the core purpose, and the second provides a crucial constraint and prerequisite. Every word earns its place 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?
For a simple move operation with all parameters documented in the schema and safety traits covered by annotations, the description adds the essential caveat about virtual folders and the find_email_folder prerequisite. It is complete enough without an 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?
Schema descriptions cover all four parameters, but the description enhances the meaning of sourceMailbox by clarifying that it must be a real folder, not virtual. This is additional semantic value beyond the structured 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 description clearly states the action with a specific verb ('Move') and resource ('an email') to a destination ('a different mailbox folder'). It distinguishes from sibling tools like delete_email or mark_email by focusing on relocation.
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 usage guidance: sourceMailbox must be a real folder, and it names find_email_folder as a prerequisite when the email was discovered in a virtual folder. This gives clear contextual direction, though it doesn't mention alternatives like bulk_action for multiple moves.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_labelAIdempotent
Remove a label from an email. For ProtonMail, this removes the email from the label folder. For Gmail and standard IMAP, this removes a keyword flag.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | Label name to remove | |
| account | Yes | Account name from list_accounts | |
| emailId | Yes | Email ID (UID) from list_emails | |
| mailbox | Yes | Mailbox containing the email (must be a real folder) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutating but idempotent behavior. The description adds value by explaining provider-specific effects (ProtonMail folder vs Gmail/IMAP keyword flag), which is not captured 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 two sentences, front-loaded with the action, and contains 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?
The description adequately covers the tool's behavior for its complexity, including provider differences. It lacks a mention of return value, but no output schema exists and the tool is straightforward.
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 already provides descriptions for all four parameters (100% coverage). The description does not add additional meaning beyond the schema, meeting the baseline for high 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 uses a specific verb ('remove') and resource ('label from an email'), clearly distinguishing it from sibling tools like add_label and delete_label. It also specifies provider-specific semantics, enhancing clarity.
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 removing labels from emails but does not explicitly state when to prefer this over alternatives like delete_label or mark_email. It provides provider context but no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_mailboxA
Rename an existing mailbox (folder). Use list_mailboxes to see current folder paths.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Current folder path | |
| account | Yes | Account name from list_accounts | |
| new_path | Yes | New folder path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-destructive operation. The description adds minimal behavioral context by mentioning the need to list current paths, but doesn't explain side effects like renaming implications on subfolders or references. With annotations present, a 3 is appropriate.
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 fluff. The purpose is front-loaded and the additional sentence provides actionable guidance. Perfectly 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?
For a rename tool with three required parameters and no output schema, the description is adequate. It explains the action and gives a pointer to list mailboxes. It could mention what happens to the contents or subfolders, but that level of detail isn't strictly necessary for correct invocation.
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 100%, so the schema already documents all three parameters. The description doesn't add extra parameter-level meaning beyond the schema, which gives a baseline of 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 renames an existing mailbox/folder, with a specific verb and resource. It distinguishes from sibling tools like create_mailbox and delete_mailbox, and even hints at the prerequisite of listing mailboxes first.
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 explicitly tells the user to use list_mailboxes to see current folder paths, which is a clear prerequisite. However, it does not mention alternatives or when not to use this tool, so it's not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_emailA
Reply to an email with proper threading (In-Reply-To & References headers). Use get_email first to read the original.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Reply body content | |
| html | No | Send as HTML | |
| account | Yes | Account name from list_accounts | |
| emailId | Yes | Email ID to reply to (from list_emails or get_email) | |
| mailbox | No | Mailbox where the original email is | INBOX |
| replyAll | No | Reply to all recipients | |
| attachments | No | Local files to attach |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so the write nature is known. The description adds the behavioral detail of setting In-Reply-To and References headers, which is useful beyond annotations. However, it does not disclose other potential behaviors like authentication requirements or rate limits. This is adequate but not highly 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 two sentences, front-loaded with the action and key purpose, and contains no filler. Every word contributes to understanding the tool's function and prerequisite.
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 no output schema, the description provides the essential context: what the tool does, the threading behavior, and the prerequisite to read the original email first. Combined with comprehensive parameter descriptions in the schema and non-destructive annotations, this is sufficiently complete for an agent to invoke the tool. It could add success/failure expectations but is not critical for a straightforward reply action.
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 100% description coverage for all 7 parameters, so the description does not need to explain individual parameters. It adds no extra meaning beyond the schema, and the baseline for high schema coverage is 3. The prerequisite mention of get_email relates to emailId but is already covered in 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 description clearly states the tool's purpose: 'Reply to an email with proper threading (In-Reply-To & References headers).' This uses a specific verb ('reply') and resource ('email') and adds a distinguishing technical detail (threading headers). It effectively differentiates from siblings like send_email and forward_email by focusing on replying to an existing email.
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 usage context by stating 'Use get_email first to read the original,' which is a prerequisite for correct use. It implies this tool is for replying to an existing email, but it does not explicitly exclude forwarding or sending new emails. This meets the standard of clear context without explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_draftA
Save an email draft to the Drafts folder. Compose over time, then use send_draft to send it. Use list_emails with the Drafts mailbox to see saved drafts.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients | |
| to | No | Recipient email addresses (can be empty for drafts) | |
| bcc | No | BCC recipients | |
| body | Yes | Email body content | |
| html | No | Send as HTML (default: plain text) | |
| account | Yes | Account name from list_accounts | |
| subject | Yes | Email subject | |
| in_reply_to | No | Message-ID for threading (from get_email) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as non-readonly and non-destructive, so the bar is lower. The description adds useful lifecycle context—'compose over time' and how drafts are later sent or listed—without contradicting annotations. It doesn't mention side effects like overwriting, but the added workflow detail is 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?
The description is three sentences with a clear front-loaded purpose, followed by workflow and viewing guidance. No filler or redundancy; every sentence contributes to tool 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 8 parameters and no output schema, the description provides the essential workflow context (save, send, view drafts) that an agent needs. It doesn't explain return values, but the lifecycle and intent are sufficiently covered for a draft-saving 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 input schema has 100% parameter description coverage, so the schema carries the burden. The description doesn't introduce new parameter details, but it implies the draft workflow (e.g., saving without sending), which is consistent with the schema's note that 'to' can be empty for drafts. Baseline 3 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 states a specific action and resource: 'Save an email draft to the Drafts folder.' It distinguishes from sibling tools by explicitly referencing send_draft for sending and list_emails for viewing drafts, making the 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?
It provides clear when-to-use guidance: 'Compose over time, then use send_draft to send it.' It also names the alternative for viewing drafts ('Use list_emails with the Drafts mailbox'), offering explicit contextual direction beyond just stating the action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_emailA
Schedule an email to be sent at a specific time in the future. The email is queued locally and sent automatically when the time arrives.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients | |
| to | Yes | Recipient email addresses | |
| bcc | No | BCC recipients | |
| body | Yes | Email body | |
| html | No | Send as HTML (default: false) | |
| account | Yes | Account name to send from | |
| send_at | Yes | When to send (ISO 8601 datetime, e.g. '2025-02-20T09:00:00Z') | |
| subject | Yes | Email subject | |
| in_reply_to | No | Message-ID to reply to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the safety profile is known. The description adds useful context that the email is 'queued locally' and 'sent automatically when the time arrives,' which are behavioral traits beyond the annotations. However, it lacks details on edge cases (e.g., app closure) or how to cancel, so it only partially extends 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 two sentences with no wasted words. It front-loads the primary action and follows with a brief explanation of the queuing behavior. This is appropriately sized and structured.
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 scheduling tool with no output schema, the description covers the main action but does not explain what the tool returns (e.g., a scheduled ID) or any prerequisites beyond the schema parameters. It also doesn't connect to related tools like list_scheduled or cancel_scheduled, leaving some gaps for an agent to discover. Given the tool's simplicity, it is adequate but not 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 input schema has 100% coverage with descriptions for all 9 parameters, including required fields like send_at and optional fields like cc. The description does not add parameter-specific semantics, but the schema is self-sufficient, so the baseline score of 3 applies.
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 function: 'Schedule an email to be sent at a specific time in the future.' This uses a specific verb ('schedule'), identifies the resource ('an email'), and distinguishes it from sibling tools like send_email (immediate sending) and list_scheduled (viewing scheduled emails).
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 the use case for future sending ('at a specific time in the future') but does not explicitly contrast it with send_email or mention when not to use it. It also doesn't reference alternatives for managing scheduled emails, such as list_scheduled or cancel_scheduled, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_emailsARead-only
Search emails by keyword across subject, sender, and body. Omit query (or pass an empty string) to use it as a pure filter — e.g. find all emails with attachments from a specific recipient without a keyword. Supports additional filters for recipient, attachments, size, and reply status.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Filter by recipient address | |
| page | No | Page number | |
| query | No | Search keyword (omit or leave empty to use filters only) | |
| account | Yes | Account name from list_accounts | |
| mailbox | No | Mailbox path (default: INBOX) | INBOX |
| answered | No | Filter: true=replied, false=not replied | |
| pageSize | No | Results per page | |
| larger_than | No | Minimum email size in KB | |
| smaller_than | No | Maximum email size in KB | |
| has_attachment | No | Filter: true=has attachments, false=no attachments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds behavioral context beyond annotations by explaining the keyword search across fields and the pure-filter behavior when query is omitted, which is useful for invoking the tool correctly.
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 function, and every sentence adds value. The first sentence states the core purpose, and the second provides a practical usage tip and lists supported filters. 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 the tool has 10 parameters and no output schema, the description covers the main purpose and usage nuance, while the schema documents all parameters. It does not mention pagination or return format, which would be helpful given the page and pageSize parameters, so it is not a 5.
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 100% and each parameter has a description, so the baseline is 3. The description adds meaning by clarifying how query and filters interact (e.g., 'omit query to use as a pure filter') and by specifying the search scope (subject, sender, body), which goes slightly beyond the 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 the tool searches emails by keyword across subject, sender, and body, and also supports filters. It is specific about the resource (emails) and the action (search), but it does not explicitly differentiate from sibling tools like list_emails or get_emails, so it misses the top score for sibling distinction.
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 usage context, including how to use it as a pure filter by omitting the query, with a concrete example. It does not explicitly state when not to use this tool versus alternatives, but the filter example and supported filters give practical guidance, earning a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_draftADestructive
Send an existing draft email and remove it from Drafts. The draft is fetched, sent via SMTP, then deleted. Use list_emails with the Drafts mailbox to find draft IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Draft email UID (from list_emails on Drafts mailbox) | |
| account | Yes | Account name from list_accounts | |
| mailbox | No | Drafts folder path (auto-detected if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive behavior, but the description adds valuable context by explaining the exact sequence: fetch, send via SMTP, then delete. This provides transparency beyond the annotation without contradicting it, though it does not cover failure cases or partial outcomes.
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 sentences, front-loaded with the primary purpose, followed by the process and a usage hint. Every sentence earns its place, with no redundant details 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 simple action, full schema coverage, and no output schema, the description is largely complete. It explains the workflow and provides a hint for finding IDs. Minor gaps include error handling or return behavior, but these are not critical for a straightforward send-and-delete 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 100%, with each parameter already documented. The description adds a useful hint about using list_emails to get draft IDs, but otherwise does not deepen parameter understanding beyond the schema. This meets the baseline for high schema coverage with marginal extra value.
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 sends an existing draft email and removes it from Drafts, with a specific verb and resource. It distinguishes itself from siblings like send_email by focusing on existing drafts, and the process (fetched, sent, deleted) leaves no 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 tells users to use list_emails with the Drafts mailbox to find draft IDs, which is actionable usage guidance. It implicitly excludes using send_email for new emails, but does not explicitly contrast with alternatives. However, the context is clear enough for an agent to know when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailA
Send a new email. Supports plain text or HTML body, CC, and BCC.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients | |
| to | Yes | Recipient email addresses | |
| bcc | No | BCC recipients | |
| body | Yes | Email body content | |
| html | No | Send as HTML (default: plain text) | |
| account | Yes | Account name from list_accounts | |
| subject | Yes | Email subject | |
| attachments | No | Local files to attach |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating operation (readOnlyHint=false, openWorldHint=true). The description confirms the action of sending but adds no additional behavioral context such as whether the send is synchronous, whether confirmation is returned, or any side effects beyond actually sending. With annotations covering the basic write nature, a score of 3 reflects minimal added transparency.
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 succinct sentence that front-loads the main action, then lists the key supporting features. Every word contributes to understanding, 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?
Given eight parameters and no output schema, the description is adequate to understand the tool's core purpose and key options. It doesn't cover return behavior or prerequisites beyond the schema, but for a straightforward send action with good schema coverage, it meets the minimum and is slightly better due to clear scope.
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 100% parameter description coverage, so the baseline is 3. The description adds little beyond repeating that CC and BCC are supported and mentioning HTML body, but does not provide format details, syntax, or relationships beyond what the schema already documents.
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 the specific verb 'Send' and names the resource 'a new email', clearly distinguishing from siblings like reply_email, forward_email, and save_draft by emphasizing 'new'. It also mentions key format options (plain text/HTML, CC, BCC), making the 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 implies usage for new outgoing emails by the phrase 'a new email', but it does not explicitly state when not to use it or name alternatives like reply_email, forward_email, or schedule_email. There is no when/when-not guidance, so it falls at implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_notificationA
Send a test desktop notification to verify that OS permissions are correctly configured. Use check_notification_setup first to diagnose any issues.
| Name | Required | Description | Default |
|---|---|---|---|
| sound | No | Include a sound alert in the test notification |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the sparse annotations (readOnlyHint=false, destructiveHint=false) by explaining the purpose is to verify OS permissions and that it sends a test notification. However, it does not disclose potential side effects like whether a notification visibly appears to the user or any failure modes if permissions are missing, but this is largely implied.
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 concise sentences, front-loaded with the main action and followed by a useful cross-reference. 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 optional parameter and no output schema, the description fully covers what the tool does, why to use it, and how to proceed if issues arise. It is complete for an agent to select and invoke 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 coverage is 100%, with the only parameter 'sound' clearly described as 'Include a sound alert in the test notification'. The tool description adds no parameter-specific meaning beyond the schema, so baseline 3 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's function: 'Send a test desktop notification to verify that OS permissions are correctly configured.' It uses a specific verb ('send') and resource ('test desktop notification'), and distinguishes it from the diagnostic sibling 'check_notification_setup'.
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 provides usage guidance: 'Use check_notification_setup first to diagnose any issues.' This tells the agent when to use this tool (after checking setup) and names the alternative tool for diagnostics.
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. Dates show when Glama detected each change.
49 tool updates
v0.2.3- First observed
add_label - First observed
add_to_calendar - First observed
analyze_email_for_scheduling - First observed
apply_template - First observed
bulk_action - First observed
cancel_scheduled - First observed
check_calendar_permissions - First observed
check_health - First observed
check_notification_setup - First observed
configure_alerts - First observed
create_label - First observed
create_mailbox - First observed
create_reminder - First observed
delete_email - First observed
delete_label - First observed
delete_mailbox - First observed
download_attachment - First observed
extract_calendar - First observed
extract_contacts - First observed
find_email_folder - First observed
forward_email - First observed
get_email - First observed
get_email_stats - First observed
get_email_status - First observed
get_emails - First observed
get_hooks_config - First observed
get_thread - First observed
get_watcher_status - First observed
list_accounts - First observed
list_calendars - First observed
list_emails - First observed
list_events - First observed
list_labels - First observed
list_mailboxes - First observed
list_presets - First observed
list_reminders - First observed
list_scheduled - First observed
list_templates - First observed
mark_email - First observed
move_email - First observed
remove_label - First observed
rename_mailbox - First observed
reply_email - First observed
save_draft - First observed
schedule_email - First observed
search_emails - First observed
send_draft - First observed
send_email - First observed
test_notification
TDQS
Every tool targets a distinct action and resource, from reading (list_emails, get_email, get_emails, get_email_status, search_emails) to writing (send_email, reply_email, forward_email, save_draft, send_draft) to management (move_email, delete_email, mark_email, labels, bulk_action). Even similar operations like add_to_calendar and create_reminder are clearly differentiated by their descriptions.
All tool names follow a consistent verb_noun pattern with underscores (e.g., list_accounts, get_email, create_reminder, delete_mailbox). Compound verbs like analyze_email_for_scheduling and check_notification_setup still adhere to the same convention.
With 49 tools, this server is very heavy. The breadth of features (email, calendar, reminders, notifications, templates, analytics) justifies a larger count, but 49 still exceeds the practical limit for an agent to efficiently navigate and select from, making the set feel bloated.
The email lifecycle is thoroughly covered: send, reply, forward, draft, schedule, move, delete, mark, label, search, and attachments. The additional calendar, reminder, template, and analytics features address secondary needs, and helper tools like find_email_folder and analyze_email_for_scheduling fill potential gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI models to read, search, and send emails via IMAP and SMTP protocols. It supports various providers like Gmail and Outlook, allowing for tasks such as retrieving unread messages, searching by sender, and managing mailbox folders.-
- AlicenseAqualityDmaintenanceAn MCP server providing comprehensive email capabilities via IMAP and SMTP, enabling AI assistants to read, search, send, manage, schedule, and analyze emails across multiple accounts.495,599107LGPL 3.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that gives AI assistants comprehensive access to Apple Mail accounts, enabling email discovery, reading, flag management, and server-side message retrieval.MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes IMAP operations as tools for AI assistants, enabling email management including listing mailboxes, reading, searching, moving, flagging emails, and creating drafts.77MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/123jixinyu/email-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server