Skip to main content
Glama
codefuturist

Email MCP Server

by codefuturist

Email MCP Server

standard-readme compliant license npm version npm downloads CI

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: Errol-Mail

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.toml

  • Multi-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-mcp

Docker

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 v prefix), matching Docker ecosystem standards (e.g. node:24, nginx:1.25). The latest tag 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 setup or 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 init

The 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 account

Configure Your MCP Client

Recommended — use the guided installer (auto-detects Claude Desktop, VS Code, Cursor, Windsurf):

email-mcp install

Or 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):

  1. Open the Extensions view (⇧⌘X / Ctrl+Shift+X)

  2. Search @mcp email-mcp

  3. Click 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-mcp

For 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 help

Configuration

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 = 100

OAuth2 (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 = 100

Environment Variables

For single-account setups (overrides config file):

Variable

Default

Description

MCP_EMAIL_ADDRESS

required

Email address

MCP_EMAIL_PASSWORD

required

Password or app password

MCP_EMAIL_IMAP_HOST

required

IMAP server hostname

MCP_EMAIL_SMTP_HOST

required

SMTP server hostname

MCP_EMAIL_ACCOUNT_NAME

default

Account name

MCP_EMAIL_FULL_NAME

Display name

MCP_EMAIL_USERNAME

email

Login username

MCP_EMAIL_IMAP_PORT

993

IMAP port

MCP_EMAIL_IMAP_TLS

true

IMAP TLS

MCP_EMAIL_SMTP_PORT

465

SMTP port

MCP_EMAIL_SMTP_TLS

true

SMTP TLS

MCP_EMAIL_SMTP_STARTTLS

false

SMTP STARTTLS

MCP_EMAIL_SMTP_VERIFY_SSL

true

Verify SSL certificates

MCP_EMAIL_SMTP_POOL_ENABLED

true

Enable SMTP transport pooling

MCP_EMAIL_SMTP_POOL_MAX_CONNECTIONS

1

Max pooled SMTP connections

MCP_EMAIL_SMTP_POOL_MAX_MESSAGES

100

Max messages per pooled connection

MCP_EMAIL_RATE_LIMIT

10

Max sends per minute

Email Scheduling

The scheduler enables future email delivery with a layered architecture:

  1. MCP auto-check — Processes the queue on server startup and every 60 seconds while the MCP server is running

  2. CLIemail-mcp scheduler check for manual or cron-based processing

  3. OS-level daemonemail-mcp scheduler install sets 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 uninstall

Scheduled 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:

  1. Static rules — Pattern-match on from/to/subject → apply labels, flag, or mark read instantly (no AI)

  2. AI triage — Remaining emails are analyzed via MCP sampling with a customizable preset prompt

  3. 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

inbox-zero

Aggressive categorization + archiving

Newsletter, Notification, Updates, Finance, Social, Promo

gtd

Getting Things Done contexts

@Action, @Waiting, @Reference, @Someday, @Delegated

priority-focus

Simple priority classification (default)

(none — just priority + flag)

notification-only

No AI triage, just log

(none)

custom

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

urgent

✅ Banner

🔊 Alert

alert

high

✅ Banner

🔇 Silent

warning

normal

info

low

debug

[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:

  1. Open System Settings → Notifications & Focus

  2. Find your terminal app (Terminal, iTerm2, VS Code, Cursor, etc.)

  3. Enable Allow Notifications and choose Banners or Alerts

  4. 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 libnotify

Desktop notifications require a running display server (X11/Wayland) — they will not work in headless/SSH sessions.

Uses PowerShell toast notifications (built-in):

  1. Open Settings → System → Notifications

  2. Ensure Notifications is turned on

  3. Set Focus Assist to allow notifications

  4. 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 instructions

  • test_notification — send a test notification to verify everything works

  • configure_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/updated for unread counts

API

Tools (47)

Read (14)

Tool

Description

list_accounts

List all configured email accounts

list_mailboxes

List folders with unread counts and special-use flags

list_emails

Paginated email listing with date, sender, subject, and flag filters

get_email

Read full email content with attachment metadata

get_emails

Fetch full content of multiple emails in a single call (max 20)

get_email_status

Get read/flag/label state of an email without fetching the body

search_emails

Search by keyword across subject, sender, and body

download_attachment

Download an email attachment by filename

find_email_folder

Discover the real folder(s) an email resides in (resolves virtual folders)

extract_contacts

Extract unique contacts from recent email headers

get_thread

Reconstruct a conversation thread via References/In-Reply-To

list_templates

List available email templates

get_email_stats

Email analytics — volume, top senders, daily trends

check_health

Connection health, latency, quota, and IMAP capabilities

Write (9)

Tool

Description

send_email

Send a new email (plain text or HTML, CC/BCC)

reply_email

Reply with proper threading (In-Reply-To, References)

forward_email

Forward with original content quoted

save_draft

Save an email draft to the Drafts folder

send_draft

Send an existing draft and remove from Drafts

apply_template

Apply a template with variable substitution

schedule_email

Schedule an email for future delivery

list_scheduled

List scheduled emails by status

cancel_scheduled

Cancel a pending scheduled email

Manage (7)

Tool

Description

move_email

Move email between folders

delete_email

Move to Trash or permanently delete

mark_email

Mark as read/unread, flag/unflag

bulk_action

Batch operation on up to 100 emails

create_mailbox

Create a new mailbox folder

rename_mailbox

Rename an existing mailbox folder

delete_mailbox

Permanently delete a mailbox and contents

Labels (5)

Tool

Description

list_labels

Discover available labels (auto-detects provider strategy)

add_label

Add a label to an email (ProtonMail folders, Gmail X-GM-LABELS, or IMAP keywords)

remove_label

Remove a label from an email

create_label

Create a new label

delete_label

Delete a label

Watcher & Alerts (6)

Tool

Description

get_watcher_status

Show IMAP IDLE connections, folders being monitored, and last-seen UIDs

list_presets

List available AI triage presets with descriptions and suggested labels

get_hooks_config

Show current hooks configuration — preset, rules, and custom instructions

configure_alerts

Update alert/notification settings at runtime

check_notification_setup

Diagnose desktop notification support and provide setup instructions

test_notification

Send a test notification to verify OS permissions are configured

Calendar & Reminders (6)

Tool

Description

extract_calendar

Extract ICS/iCalendar events from an email

analyze_email_for_scheduling

Analyze an email to detect events and reminder-worthy content

add_to_calendar

Add an email event to the local calendar (macOS/Linux)

create_reminder

Create a reminder in macOS Reminders.app from an email

list_calendars

List all available local calendars

check_calendar_permissions

Check whether the local calendar is accessible

Prompts (7)

Prompt

Description

triage_inbox

Categorize and prioritize unread emails with suggested actions

summarize_thread

Summarize an email conversation thread

compose_reply

Draft a context-aware reply to an email

draft_from_context

Compose a new email from provided context and instructions

extract_action_items

Extract actionable tasks from email threads

summarize_meetings

Summarize upcoming calendar events from emails

cleanup_inbox

Suggest emails to archive, delete, or unsubscribe from

Resources (6)

Resource

URI

Description

Accounts

email://accounts

List of configured accounts

Mailboxes

email://{account}/mailboxes

Folder tree for an account

Unread

email://{account}/unread

Unread email summary

Templates

email://templates

Available email templates

Stats

email://{account}/stats

Email statistics snapshot

Scheduled

email://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 types

Maintainers

@codefuturist

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       # run

License

LGPL-3.0-or-later

Available Tools

49 tools
add_labelA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYesLabel name to add (e.g., "Important", "Project-X")
accountYesAccount name from list_accounts
emailIdYesEmail ID (UID) from list_emails
mailboxYesMailbox containing the email (must be a real folder)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare idempotentHint=true and destructiveHint=false; description adds provider-specific behavior (copy or flag setting) without contradiction. Could further clarify idempotency implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences concisely convey the primary action and provider nuances. No redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 required params, no output schema, and clear annotations, the description is mostly complete. Could mention expected return (e.g., success confirmation) but not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with descriptions; description adds no new semantic information beyond what schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action ('Add a label to an email') and specifies provider-specific behavior (copying vs keyword flag), differentiating it from siblings like remove_label.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 vs alternatives like remove_label or create_label. Does not mention prerequisites 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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name
confirmNoShow native confirmation dialog before adding (default: true)
mailboxNoMailbox path (default: INBOX)INBOX
email_idYesEmail UID
alarm_minutesNoMinutes before event to show an alert (default: 15)
calendar_nameNoTarget calendar name (empty = default calendar)
save_attachmentsNoSave non-ICS email attachments locally and link them in the event notes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=false, destructiveHint=false), description discloses native confirmation dialog on macOS and local attachment saving. Provides key behavioral context for mutation without destructiveness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Multiple sentences but every sentence adds value. Front-loaded with purpose, then details in logical order. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description covers platform specifics, extraction behavior, return values, and key parameters. With 7 params and no output schema, it provides sufficient context 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds moderate value by tying parameters like confirm, save_attachments, and alarm_minutes to overall behavior, but does not add meaning beyond schema for most params.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it adds an email event to local calendar (macOS Calendar.app / Linux via xdg-open), automatically extracts event data, and specifies return values. Distinguishes well from sibling tools like extract_calendar or list_events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explains when to use (adding calendar event from email) and what it does automatically, but lacks explicit alternatives or when-not-to-use guidance. Sibling extract_calendar exists but is not compared.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_email_for_schedulingA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesEmail account name
mailboxNoMailbox containing the emailINBOX
email_idYesEmail ID from list_emails_metadata

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description confirms a read-only analysis. It adds value by explaining the output's role in downstream decisions, though it does not detail the exact structure of the analysis.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with front-loaded purpose and action-oriented usage advice. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simple read-only nature and full schema coverage, the description covers the main points: what it does, its role in the workflow, and the output purpose. It lacks details on error conditions but is sufficient for an analysis tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all three parameters. The description adds context by linking email_id to list_emails_metadata, providing useful meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verb 'Analyze' and resource 'email', clearly stating its purpose: detecting calendar events and reminders. It distinguishes itself from sibling tools like add_to_calendar and create_reminder by positioning as the first step in scheduling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'Use this as the first step before creating any scheduling resource,' providing clear context for when to invoke. It implies alternative actions based on output but does not explicitly list 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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoRecipient addresses (required for send, optional for draft)
actionNoWhat to do with the composed emailpreview
accountYesAccount name from list_accounts
templateYesTemplate name from list_templates
variablesYesVariable values as key-value pairs, e.g. { topic: 'Q1 Review' }

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate mutation (readOnlyHint false) and non-destructive (destructiveHint false). The description adds that the tool performs variable substitution but does not disclose side effects, error conditions, or prerequisites beyond the schema hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences, front-loaded with the main purpose, then the action options. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks details about return values (except preview 'sees the result') and error behavior. For a mutation with no output schema, it is minimally adequate but could be improved with behavioral context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema documents all parameters well. The description only mentions the action parameter by repeating its enum values, adding no new meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: applying an email template with variable substitution. The three actions (preview, draft, send) differentiate it from sibling tools like send_email which sends plain emails.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use each action (preview, draft, send). However, it does not explicitly say when not to use this tool versus alternatives like send_email or list_templates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_actionA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesArray of email UIDs (max 100). Get UIDs from list_emails or search_emails.
actionYesBulk action to perform
accountYesAccount name from list_accounts
mailboxNoSource mailbox containing the emailsINBOX
destinationNoDestination mailbox — required when action is 'move'

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false (mutates) and destructiveHint=true. The description adds supported actions (including destructive delete and move), max IDs, and return counts. This adds some behavioral context beyond annotations, but does not explicitly warn about irreversibility of actions like delete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first covers purpose and actions, second gives limitations and output. No filler, every sentence adds essential information. Ideal conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batch tool with no output schema, the description covers purpose, valid actions, limits, and return type (success/failure counts). It lacks details on error handling or partial success, but overall it provides sufficient context for use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by specifying that UIDs come from list_emails or search_emails, which is helpful context beyond the schema's parameter descriptions. This extra guidance warrants a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is a batch operation on multiple emails by UID list, listing supported actions (mark_read, mark_unread, flag, unflag, move, delete). This differentiates it from sibling single-email tools like move_email, delete_email, mark_email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides key usage constraints (max 100 IDs per call) and mentions required destination for move. It is clear when to use this tool for batch operations, but does not explicitly state when not to use it or reference alternatives beyond the implied batch-vs-single distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_scheduledA
Destructive

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

ParametersJSON Schema
NameRequiredDescriptionDefault
schedule_idYesSchedule ID to cancel

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds important behavioral details: that it removes from the queue and deletes the associated draft, confirming the destructive nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two short sentences, front-loaded with the action, and no unnecessary words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only one parameter, full schema coverage, no output schema, and adequate annotations, the description fully covers what the agent needs to know about the tool's behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter already has a description. The tool description does not add any additional semantics beyond what is in the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'cancel a scheduled email' and specifies the effects: removes from queue and deletes draft. This distinguishes it from sibling tools like schedule_email or delete_email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the tool's function but does not provide when to use it versus alternatives, prerequisites, or common pitfalls. The context is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_calendar_permissionsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context: macOS-specific permission verification, return of granted status, and step-by-step setup instructions on denial, which are beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. All content is relevant and front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and annotations covering safety, the description fully explains what the tool does, its platform-specific behavior, and the outcome on success vs. failure. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so per guidelines the baseline is 4. The description does not need to explain parameters since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('check') and resource ('calendar permissions'), clearly distinguishing it from sibling tools like list_calendars or extract_calendar which deal with calendar data rather than access permissions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the primary use case ('Check whether the local calendar is accessible') and what happens on denial (returns setup instructions). It does not explicitly mention when not to use it or alternatives, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_healthA
Read-only

Check connection health, quota, and capabilities for email accounts. Useful for diagnosing issues.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name (checks all accounts if omitted)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds value by specifying the types of information checked (health, quota, capabilities), giving more detail beyond the annotation's safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no redundant information. It is front-loaded with the purpose and immediately followed by context, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single optional parameter, no output schema, and clear annotations, the description adequately communicates the tool's role. It could be improved by detailing the output format, but overall it provides sufficient context for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the one parameter 'account', with its description already explaining that omitting it checks all accounts. The tool description does not add any further parameter semantics, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks connection health, quota, and capabilities for email accounts. It identifies the specific verb 'Check' and resource 'email accounts', and the purpose is distinct from sibling tools like list_accounts or get_email, though it does not explicitly contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes the phrase 'Useful for diagnosing issues', which implies a usage context, but does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_notification_setupA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral context that it checks OS tools and provides setup instructions without performing mutations. No contradiction; value added beyond annotations is moderate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two concise sentences that front-load the core purpose. Every word is informative, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters, no output schema, and annotations covering safety, the description provides complete context for a diagnostic tool. It explains what it checks and for which platforms.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, and schema description coverage is 100%. Per guidelines, baseline is 4. The description appropriately does not include parameter details since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Diagnose' and the resource 'desktop notification support'. It specifies that it checks for required OS tools and provides setup instructions for three platforms, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives such as test_notification or configure_alerts. It lacks context for tool selection among siblings.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNoPersist changes to config.toml (default: runtime only)
soundNoEnable/disable sound alerts for urgent emails
desktopNoEnable/disable desktop notifications
webhook_urlNoWebhook URL for external notifications (empty string to disable)
webhook_eventsNoWhich urgency levels trigger webhook dispatch
urgency_thresholdNoMinimum urgency level to trigger desktop notifications

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate non-destructive writes; description adds valuable context: changes take effect immediately, save flag persists to config file, and omitted fields are left unchanged. This goes beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler. Every sentence adds distinct value: purpose, immediate effect, persistence option, and partial update behavior. Ideal length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a config update tool with no output schema, the description adequately covers purpose, behavior, and parameter handling. Missing explicit mention of return value or error states, but these are less critical for a straightforward mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, but the description adds the crucial semantic detail that omitted fields are left unchanged, which is not explicit in the schema. This clarifies partial update behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update alert/notification settings') and the resource (alerts/notifications). It distinguishes from sibling tools like 'get_hooks_config' by specifying 'update' rather than 'get' or 'test'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (to change settings), but does not explicitly mention when not to use it or suggest alternatives like viewing current config with get_hooks_config or testing with test_notification.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLabel name (e.g., "Project-X"). For nested labels use "/" separator (e.g., "Work/Urgent").
accountYesAccount name from list_accounts

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds significant behavioral context beyond annotations: explains conditional no-op for IMAP and folder creation for ProtonMail. Annotations only indicate non-destructive and non-read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, no redundant information. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers behavioral differences across providers and provides nesting syntax. No return value documentation, but creation tools often have minimal output. Adequate for a simple tool with two parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already describes both parameters fully. Description adds useful syntax hint for nested labels using '/' separator, enhancing clarity beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'Create' and resource 'label'. Distinguishes between ProtonMail (creates folder) and standard IMAP (no-op). Differentiates from sibling 'add_label' which applies an existing label to an email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes when to use: to create a label definition. Implicitly advises against using for standard IMAP if labels auto-create, but does not explicitly name alternatives like 'add_label' for applying labels.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_mailboxA
Idempotent

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFolder path to create (e.g., 'Archive/2026' or 'Projects')
accountYesAccount name from list_accounts

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotent and non-destructive behavior. The description adds context about path format and referencing list_mailboxes, but does not explicitly state behavior if folder already exists. Nevertheless, it aligns with annotations and provides useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. First sentence states the purpose, second provides usage guidance. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and simple parameters, the description covers purpose, usage, and provides sibling reference. Could mention idempotency explicitly, but overall complete enough for a creation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters with descriptions. The description adds value by explaining path separator and giving an example, going beyond the schema. It does not repeat schema details unnecessarily.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and resource ('mailbox (folder)'), distinguishing it from siblings like rename_mailbox and delete_mailbox. It also provides path separator guidance and references list_mailboxes, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use '/' for nested folders and refers to list_mailboxes as a way to see existing folders, giving clear context. It could be improved by stating when not to use (e.g., if folder exists), but the idempotent hint partially addresses this.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoReminder body/notes (defaults to auto-built from email)
titleNoReminder title (defaults to email subject)
accountYesEmail account name
confirmNoShow native confirmation dialog before adding (default: true)
mailboxNoMailbox containing the emailINBOX
due_dateNoISO 8601 due date (e.g. 2026-02-20T10:00:00). Leave empty for no due date.
email_idYesEmail ID from list_emails_metadata
priorityNoReminder prioritynone
list_nameNoReminders list name (default list if omitted)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals a key behavioral trait: 'Shows a native confirmation dialog before adding.' This adds value beyond the annotations (readOnlyHint=false, destructiveHint=false) which only indicate write and non-destructive nature, but do not mention the confirmation dialog.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three short sentences, front-loading the primary action. The third sentence, while useful, slightly extends length but does not harm clarity. It is well-structured with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 parameters, no output schema, and moderate complexity, the description covers the main behavior and recommended workflow but omits details on return values, error cases, or prerequisites (e.g., requiring the email to exist). It is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 9 parameters. The description does not add further semantic detail beyond mentioning 'from an email', which is already implied by parameter names like email_id and account. A score of 3 is appropriate as the description meets the baseline but does not enrich parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a reminder in macOS Reminders.app specifically from an email, using the verb 'create' and specifying the resource 'reminder' and origin 'from an email'. This distinguishes it from general reminder creation tools and sibling tools like 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use ('action items, deadlines, and follow-up tasks extracted from emails') and recommends a predecessor tool ('Use analyze_email_for_scheduling first'), providing clear guidance on appropriate context and workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_emailA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name from list_accounts
emailIdYesEmail ID to delete (from list_emails)
mailboxNoMailbox containing the emailINBOX
permanentNo⚠️ Permanently delete (skip Trash)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true. The description adds critical behavioral details: default behavior (move to Trash), permanent deletion option, and the requirement that the mailbox be a real folder. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each necessary. Front-loaded with the primary action, followed by defaults, options, and a specific usage caveat. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the action (delete) and the presence of annotations, the description sufficiently covers behavior and prerequisites. Lacks explicit mention of return value, but for a delete operation this is often trivial. Still, a slight gap for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%. The description adds value by explaining the effect of the `permanent` parameter (irreversible) and the context for `mailbox` (must be a real folder). It does not elaborate on `account` or `emailId`, but those are self-explanatory from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool deletes an email, distinguishes between moving to Trash (default) and permanent deletion, and uses specific verbs and resource. It effectively differentiates from sibling tools like send, reply, move, and mark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises when to use `find_email_folder` first for emails in virtual folders, and warns about the irreversibility of permanent deletion. This provides clear usage context and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_labelA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLabel name to delete
accountYesAccount name from list_accounts

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true. Description adds that deleting a label for ProtonMail removes the folder, and for standard IMAP deletion is not server-wide. Though it doesn't mention irreversibility, the destructive annotation covers that. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. Front-loaded with 'Delete a label.' Very concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has two parameters, no output schema, and annotations present, the description adequately covers the key context (platform differences and alternative tool). Could mention return value briefly, but not necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The description adds no extra detail 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Delete a label' and distinguishes between ProtonMail (deletes folder) and standard IMAP (use remove_label). Specific verb+resource with sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use this tool vs remove_label: for standard IMAP, labels cannot be deleted server-wide, so use remove_label on individual emails instead. Provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_mailboxA
Destructive

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFolder path to delete (⚠️ all emails inside will be lost)
accountYesAccount name from list_accounts

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true. The description adds critical context: 'Permanently delete... cannot be undone' and 'ALL its contents' are lost. Also suggests verification step. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences only. The first sentence is a clear warning and action statement. The second gives actionable advice. No superfluous words. Front-loaded with critical warning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no output schema, the description covers all essential behavioral aspects: permanence, scope (all contents), and a prerequisite step. It adequately prepares the agent for correct and safe invocation among many siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The description does not add new meaning beyond what the schema already provides (e.g., path description includes warning about lost emails). Thus meets baseline but no extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it permanently deletes a mailbox and all contents. The verb 'delete' and resource 'mailbox' are explicit. Differentiates from siblings like create_mailbox and rename_mailbox by emphasizing destructiveness.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear prerequisite: 'Use list_mailboxes to verify the folder path.' This guides when to use the tool (after verification). However, it does not explicitly mention alternatives for deleting individual emails or other non-destructive actions, which are available among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_attachmentA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEmail ID (UID) from list_emails or get_email
accountYesAccount name from list_accounts
mailboxNoMailbox containing the emailINBOX
filenameYesExact attachment filename (from get_email metadata)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and destructiveHint=false. The description adds valuable information: returns base64-encoded content and a 5MB size limit, which are not in annotations. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The core action and a key prerequisite are front-loaded. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the return format (base64) and size limit. It also instructs on the prerequisite workflow. Missing error handling details but otherwise complete for a simple download tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description enhances semantics by stating that 'filename' should be from get_email metadata and that 'id' is an email UID from list_emails or get_email. This adds context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Download an email attachment by filename,' specifying the verb and resource. It distinguishes from siblings like get_email by noting the prerequisite step of using get_email to see filenames.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to 'First use get_email to see available attachments and their filenames,' providing clear context for when to use. It does not mention alternatives or when not to use, but the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_calendarA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name
mailboxNoMailbox path (default: INBOX)INBOX
email_idYesEmail UID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context about extracting from email and returning structured data, which aligns with these annotations but does not reveal additional behavioral traits such as required permissions or potential failures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no unnecessary words. The first sentence states the action and resource, the second enumerates the return fields. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with full schema descriptions and annotations, the description covers the essential purpose and output. However, without an output schema, some additional detail on the exact structure would improve completeness, but it is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all three parameters described. The description does not add any meaning beyond the schema for the parameters themselves, only describing the overall operation. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Extract', the resource 'calendar events (ICS/iCalendar) from an email', and explicitly lists the output fields (time, location, attendees, status). This distinguishes it from sibling tools like extract_contacts and 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when you need to extract calendar data from an email, but it lacks explicit guidance on when to choose this over siblings like list_events, and does not mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_contactsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of recent emails to scan (default: 100, max: 500)
accountYesAccount name from list_accounts
mailboxNoMailbox to scan (default: INBOX)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds that extraction is from recent headers and results are sorted by frequency, which is consistent. No additional behavioral traits beyond what annotations cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with action and key behavior, no wasted words. Each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Describes output sorting and use cases. However, lacks explicit details on output format (e.g., whether it returns email addresses, names, frequency counts) given no output schema. Tool is simple, so slightly incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with clear descriptions for all three parameters. Description does not add extra meaning beyond schema, so baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb 'extract' and resource 'unique contacts from recent email headers'. Includes sorting behavior and use case. Distinct from sibling tools which deal with emails, mailboxes, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides context with 'useful for finding frequent correspondents or building an address book', but does not explicitly contrast with alternatives or mention when not to use. Implied usage but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_email_folderA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name from list_accounts
emailIdYesEmail ID (UID) from list_emails
sourceMailboxNoMailbox where the email is currently visible (e.g., "All Mail")INBOX

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, and the description adds useful context by explaining the return value and its role as a prerequisite for mutation tools. It does not contradict annotations and provides behavioral context beyond what annotations offer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. Front-loaded with the main purpose, then providing usage conditions and output expectation. Highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the return value and its use. For a simple lookup tool, it covers when to use and what to expect. Could mention error cases or limitations but is mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the purpose of the sourceMailbox parameter (virtual folder context) and tying account/emailId to other tools. It also clarifies the output nature (returns real folder path).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'find' and resource 'real mailbox folder', distinguishing it from sibling tools like move_email and delete_email by indicating it is a prerequisite. The purpose 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly specifies when to use ('Required before move_email or delete_email when email found in virtual folder') and what the return value provides ('real folder path to use as sourceMailbox'). Clear guidance on context and action.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoCC recipients
toYesForward to these recipients
bodyNoAdditional message above the forwarded content
accountYesAccount name from list_accounts
emailIdYesEmail ID to forward (from list_emails or get_email)
mailboxNoMailbox where the original email isINBOX

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false (mutation) and destructiveHint=false (not destructive). The description adds context: the original email is quoted below the additional message. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, directly conveying the core functionality without unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 6 parameters (3 required) and no output schema. The description covers the main behavior and key aspects, sufficient for an agent to understand and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents all parameters. The description adds minimal extra meaning beyond noting the 'additional message' corresponds to body and that original content is included.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Forward' and resource 'an email', along with specifics: 'to new recipients with optional additional message' and 'Original email is quoted below'. This distinguishes it from related tools like send_email or reply_email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for forwarding emails but does not explicitly state when to use this tool versus alternatives like reply_email or send_email. No direct guidance on exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_emailA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoBody format: full=raw (default), text=plain text (strips HTML), stripped=plain text without quoted replies or signaturesfull
accountYesAccount name from list_accounts
emailIdYesEmail ID from list_emails or search_emails
mailboxNoMailbox path (default: INBOX)INBOX
markReadNoExplicitly mark the email as read after fetching (default: false — reading is non-destructive by default)
maxLengthNoTruncate body at this many characters. A hint shows how many characters remain.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, destructiveHint), the description specifies that it uses IMAP BODY.PEEK and does NOT mark as seen, and explains the non-destructive default behavior and the effect of markRead parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loading purpose and key behaviors, with efficient wording. Could be slightly more concise, but no unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers key parameters and behavior adequately. No output schema, but description explains what is returned. Missing error handling or edge cases, but acceptable for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds extra value by explaining that 'stripped' removes quoted replies/signatures and that maxLength shows a hint with remaining characters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'get' and resource 'email by ID', and distinguishes it from siblings like get_emails and get_email_status by specifying it retrieves full content with options for format and mark-as-read.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use format options and maxLength, and when to set markRead=true. Does not explicitly state when not to use this tool relative to other email actions, but the context of siblings implies its read-only nature.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_emailsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesEmail IDs to fetch (max 20). Obtain IDs from list_emails or search_emails.
formatNoBody format (default: text — strips HTML for efficient AI reading). Use stripped to also remove quoted replies.text
accountYesAccount name from list_accounts
mailboxNoMailbox path (default: INBOX)INBOX
maxLengthNoTruncate each email body at this many characters.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context: it does NOT mark emails as seen, defaults to text format stripping HTML for AI-friendly output. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loads the core functionality and efficiency benefit, and contains no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a fetch tool with 5 parameters and no output schema, the description adequately explains batch limits, default behavior, and side effects. It lacks details on error handling or response structure, but overall is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds minimal parameter-level nuance beyond what the schema already provides (e.g., mentions max 20 and default format).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches full content of multiple emails in a single call, distinguishing it from the single-email get_email sibling. The verb 'fetch' and resource 'multiple emails' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly recommends using this tool over get_email when triaging or summarizing several emails for efficiency. It does not provide explicit when-not-to-use scenarios but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_email_statsA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoTime period: day, week, or monthweek
accountYesAccount name
mailboxNoMailbox path (default: INBOX)INBOX

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool is read-only and non-destructive. The description adds value by detailing the kind of data returned (volume, top senders, trends, counts), which goes beyond the annotations. However, it does not disclose potential rate limits or authentication requirements beyond what is implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the core action and resource, and every word adds value. No redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description adequately summarizes the return values (volume, top senders, daily trends, read/flagged counts). It provides enough context for an agent to decide if this tool meets the need, though it could explicitly mention the time period parameter's effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for all three parameters (account, period, mailbox). The description does not add any additional meaning or usage context beyond the schema, so it meets the baseline without enhancing understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves email statistics/analytics for a mailbox, specifying metrics like volume, top senders, daily trends, and read/flagged counts. This verb-resource combination is distinct from sibling tools such as list_emails or get_email, which focus on individual emails rather than aggregate stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for obtaining aggregated email statistics but does not explicitly state when to use this tool over alternatives like list_emails or search_emails. No guidance on when not to use it or prerequisites is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_email_statusA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name from list_accounts
emailIdYesEmail ID from list_emails or search_emails
mailboxNoMailbox path (default: INBOX)INBOX

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as readOnly and non-destructive. The description adds valuable behavioral context by stating 'Does NOT mark the email as seen,' which is a critical side effect not implied by annotations. It also mentions performance ('much cheaper'), adding depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core purpose, and every sentence adds value. No wasted words, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (3 simple params, no output schema), the description completely covers purpose, usage context, and behavioral note. No gaps remain for an agent to misunderstand.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions for all 3 parameters. The description does not add meaning beyond what the schema provides. Baseline of 3 is appropriate as the schema already carries the full semantic load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('current read/flag/label state of an email') and explicitly distinguishes from the sibling tool 'get_email' by stating it fetches state without body. This makes the tool's purpose highly clear and differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: it is 'much cheaper than get_email' for state checks, useful to confirm 'mark_email' results, and notes it does not mark as seen. This tells the agent when to prefer this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_hooks_configA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds minimal behavioral context beyond listing what is retrieved. It does not mention permissions, side effects, or return format, but the safety profile is clear from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the action and scope. Every word adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter with no parameters and no output schema, the description adequately conveys what is retrieved. It could optionally describe the return format, but it is not essential for understanding the tool's function.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters are present, so schema coverage is trivially 100%. The description does not need to add parameter meaning. Baseline 4 is appropriate for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 and specifies what it includes (preset, rules, custom instructions). It uses a specific verb+resource and distinguishes itself from sibling tools like get_email or list_accounts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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 vs alternatives, but the purpose is straightforward for a getter with no parameters. Usage is implied by the name and description, but there are no when-not or exclusion statements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_threadA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoBody format: full=raw (default), text=plain text (strips HTML), stripped=plain text without quoted replies or signaturesfull
accountYesAccount name from list_accounts
mailboxNoMailbox to search (default: INBOX)INBOX
maxLengthNoTruncate each message body at this many characters. A hint shows how many characters remain.
message_idYesMessage-ID header value (from get_email)
newestFirstNoWhen 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

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. Description adds 'Does NOT mark emails as seen,' which is valuable behavioral context not covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences front-loaded with purpose. Every sentence adds value; no redundant or irrelevant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description states 'Returns all related messages' which is sufficient. Covers all parameters and preconditions. Slightly lacking in post-conditions or error scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, baseline is 3. Description adds meaning beyond schema, e.g., explaining the effect of format='stripped' and use case for newestFirst=true.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action ('Reconstruct a full email conversation thread') and specifies the method ('following References and In-Reply-To headers'). Distinguishes from siblings like get_email which retrieves a single email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit precondition ('Use get_email first to obtain the message_id') and explains when to use format options and newestFirst. Missing direct comparison with alternatives like search_emails for thread discovery.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_watcher_statusA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by specifying the scope ('IMAP IDLE watcher connections and recent activity'). No contradictions; the description supplements 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 12 words, achieving maximum conciseness with no wasted words. It front-loads the core purpose and scope effectively.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and clear annotations, the description is mostly complete. However, it lacks information about the output format or what 'status' includes, which is important for a diagnostic tool. No output schema is provided, so the description should compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the description does not need to add parameter semantics. With 100% schema coverage, baseline is 4. The description does not repeat parameter info, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves the status of IMAP IDLE watcher connections and recent activity, using a specific verb ('Get') and resource ('status of IMAP IDLE watcher connections and recent activity'). It distinguishes from sibling tools like check_health and get_email_status, which have different scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives like check_health or get_email_status. It implies it's for monitoring watcher connections, but lacks direct guidance on selection or exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_accountsA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to repeat them. The description adds context about discovering account names, but no further behavioral traits are disclosed. This is adequate given 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loading the main action and purpose. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list tool with annotations providing safety, the description is complete. It explains the tool's function and usage context, leaving no obvious gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so schema description coverage is 100%. Per guidelines, 0 parameters yields a baseline of 4. The description adds no parameter information, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'list' and resource 'email accounts', clearly stating the tool's purpose. It distinguishes from siblings by emphasizing that this is for discovering account names, which is unique among the sibling tools listed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises to 'Call this first' for discovering account names, providing clear usage context. It does not mention exclusions, but the guidance is sufficient for a simple discovery tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_calendarsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's addition of platform specificity and return value (calendar names) adds useful context without contradicting annotations. Behavior is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, both concise and valuable. No wasted words, and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the annotations, the description fully covers what the agent needs to know: what the tool lists, where, and how to use the output. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema covers everything. The description does not need to add parameter details, and the baseline for zero parameters is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: listing all available local calendars, specifying the platforms (macOS Calendar.app / Linux default). This distinguishes it from sibling tools like list_events or 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a specific usage context: use the returned calendar names with add_to_calendar. This helps agents understand when to use this tool, although it does not explicitly state when not to use it or list alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_emailsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromNoFilter by sender address or name
pageNoPage number
seenNoFilter: true=read only, false=unread only
sinceNoShow emails after this date (ISO 8601)
beforeNoShow emails before this date (ISO 8601)
accountYesAccount name from list_accounts
flaggedNoFilter: true=flagged only, false=unflagged only
mailboxNoMailbox path (default: INBOX)INBOX
subjectNoFilter by subject keyword
answeredNoFilter: true=replied, false=not yet replied
pageSizeNoResults per page
has_attachmentNoFilter: true=has attachments, false=no attachments

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: returns paginated results with metadata (read/unread, flagged, etc.) and mentions the ProtonMail label quirk. This elevates transparency 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: first states purpose and return metadata, second gives alternative tool, third addresses ProtonMail nuance. No fluff, front-loaded with most important info. Each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with 12 parameters fully described in schema, the description covers pagination, metadata format, and a special case. No output schema exists, but return details are adequately described via the metadata mention. Minor gap: doesn't mention total result count or pagination behavior explicitly, but schema provides page/pageSize limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage across 12 parameters. The description adds minimal extra meaning, primarily clarifying mailbox parameter semantics for ProtonMail (labels as folders). Baseline 3 is appropriate since schema already does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 emails in a mailbox with optional filters.' It uses a specific verb ('list') and resource ('emails'), and distinguishes it from siblings like get_email (full content) and search_emails implicitly. The ProtonMail note differentiates usage for label-based email access.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use get_email instead: 'Use get_email to fetch full body content.' Also provides context for ProtonMail: 'use list_labels to discover them, then list_emails with mailbox="Labels/X".' This gives clear guidance on alternatives and prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_eventsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoShow events on or before this date (ISO 8601, e.g. 2026-02-28). Defaults to 30 days from now.
fromNoShow events on or after this date (ISO 8601, e.g. 2026-02-19). Defaults to 7 days ago.
limitNoMaximum number of results (default: 20)
titleNoFilter events whose title contains this text (case-insensitive)
calendar_nameNoRestrict to a specific calendar by name

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, so the description adds value by detailing the behavior: returns specific fields (event id, title, start/end time, location, calendar name) and filter options. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states purpose and filters, second gives use cases and return fields. Every sentence is informative with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 optional filters, the description covers purpose, parameters, use cases, and return fields. Annotations are present, schema is complete. No output schema needed as description lists return fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and descriptions for each parameter are already good. The description adds natural language context (e.g., 'Search by title, date range, or calendar name') that clarifies parameter usage, but the schema already conveys the details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'List local calendar events with optional filters' with a specific verb and resource. It distinguishes from sibling tools like list_calendars (lists calendars) and get_email (different resource).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use cases: 'check for existing events before creating new ones' and 'verify a recently added event.' This helps the agent decide when to invoke, though no explicit when-not-to-use or alternatives are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_labelsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name from list_accounts

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the tool is read-only. The description adds useful behavioral details such as auto-detection of the label system and ProtonMail's folder representation, which 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences long, front-loaded with the main purpose, and contains no unnecessary words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with one parameter and no output schema, the description fully covers behavior: auto-detection of label systems and a specific usage pattern for ProtonMail. It is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter 'account' described as 'Account name from list_accounts'. The description doesn't add more about the parameter but explains how the tool uses the account to detect the label system, providing marginal extra context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List available labels for an email account' and specifies the auto-detection of different label systems (ProtonMail, Gmail, IMAP), which distinguishes it from sibling tools like list_mailboxes or list_emails.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on when to use this tool by explaining the auto-detection and gives a specific usage note for ProtonMail (using list_emails with mailbox='Labels/<name>'). However, it lacks explicit exclusions for other email systems.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_mailboxesA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name from list_accounts

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered. Description adds value by specifying return details (unread counts, special-use flags), which annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first statement of purpose with specific outputs, second a usage guideline. No unnecessary words, well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity (1 param, no output schema, annotations present), the description sufficiently covers purpose, return data, and prerequisite. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage, and the description repeats 'Account name from list_accounts', adding no new semantic nuance beyond what the schema already conveys. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it lists mailbox folders with unread counts and special-use flags, distinguishing it from siblings like list_emails (lists emails) and list_accounts (lists accounts).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to use list_accounts first to obtain the account name, providing clear context for when to use this tool. No explicit exclusion or alternative mentions, but the single prerequisite is well-stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_presetsA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds that it returns descriptions and suggested labels. Annotations already confirm read-only and non-destructive, so description adds value 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no params and no output schema, the description fully explains purpose and return content. Agent knows exactly what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters; baseline score 4 applies. No parameter details needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'list', resource 'AI triage presets', and specifies returned content 'descriptions and suggested labels'. Distinguishes from siblings like list_accounts and list_mailboxes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage from context (listing presets), but no explicit guidance on when to use vs alternatives like list_templates or list_labels.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_remindersA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (default: 20)
titleNoFilter reminders whose title contains this text (case-insensitive)
list_nameNoRestrict to a specific Reminders list by name
include_completedNoInclude completed reminders (default: false)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses default behavior (only incomplete reminders) and return fields (id, title, due date, completion status, priority, list name). Annotations confirm read-only, no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with front-loaded purpose. No fluff; every sentence provides useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers return fields (no output schema), default behavior, and parameter usage. Complete for a read-only listing tool with good annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all parameters with descriptions. The description mentions 'search by title or list name' but adds minimal value beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List'), resource ('reminders from macOS Reminders.app'), and includes 'with optional filters', distinguishing it from sibling tools like create_reminder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'check for existing reminders before creating new ones, or to verify a recently added reminder', providing clear context compared to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_scheduledB
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status (default: pending)pending
accountNoFilter by account name (all accounts if omitted)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint, so the description adds little behavioral context. It doesn't discuss pagination, ordering, or scope limits beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with key information. Efficient but could be improved by including the missing 'failed' status for accuracy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description does not explain return format (e.g., array of email objects). It covers basic functionality but lacks details on output structure, which is notable for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so description adds only marginal value. It mentions 'pending, sent, or all' but fails to include 'failed'. The schema descriptions already cover parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists scheduled emails, distinguishing it from siblings like list_emails (regular inbox) and schedule_email (create). However, it omits 'failed' status mentioned in schema, slightly reducing precision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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 like list_emails or get_email. Usage is implied for viewing scheduled emails, but no scenarios or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds context about the file format (TOML) and location, which is helpful but does not fully describe return values or file access behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main purpose. No redundant words; every sentence adds valuable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no parameters and annotations provided, the description is adequate. It explains the template format and location, though it could mention what the output includes (e.g., template names, content preview).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the description cannot add parameter meaning. However, it compensates by explaining what templates are and where they reside, which provides context beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List all available email templates') and specifies the resource (TOML files with placeholders). It distinguishes from sibling tools like list_accounts or list_mailboxes by focusing on email templates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (when you need to see templates) but provides no explicit guidance on when to use this tool versus alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mark_emailA
Idempotent

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEmail ID (UID) from list_emails or search_emails
actionYesAction: read, unread, flag (star), or unflag (unstar)
accountYesAccount name from list_accounts
mailboxNoMailbox containing the emailINBOX

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reinforces the idempotency declared in annotations and adds detail about what constitutes a no-op. It does not contradict annotations. It could mention side effects (e.g., no destructive actions), but annotations already cover destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences that front-load the core purpose and add a key behavioral note. Every word is necessary; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 good annotations and full parameter descriptions, the description is complete. No output schema is needed for such a straightforward operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 4 parameters are fully described in the schema (100% coverage). The description adds minor clarification (e.g., 'flag (star)') but does not provide substantial new meaning beyond the schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (change) and resource (email flags) and specifies the four possible actions: read, unread, flag, unflag. This distinguishes it from sibling tools like move_email or delete_email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (to change flags) but does not explicitly state when not to use it or compare it with alternatives like send_email or delete_email. The idempotent note is behavioral, not a usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_emailA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name from list_accounts
emailIdYesEmail ID to move (from list_emails)
sourceMailboxYesCurrent mailbox (e.g., INBOX)
destinationMailboxYesTarget mailbox (e.g., Archive). Use list_mailboxes to see options.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotentHint=true and destructiveHint=false. The description adds the critical behavioral constraint that sourceMailbox must be a real folder, not a virtual one. No contradiction with annotations. Some additional detail about idempotency could be added but is not required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences that are front-loaded with the core action, followed by critical usage notes. No wasted words. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity (4 params, no output schema), the description covers the essential action, constraints, and prerequisites. Could mention potential errors for virtual folders, but overall complete enough for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers all parameters with descriptions (100% coverage). The description adds value by clarifying sourceMailbox must be a real folder and suggesting use of find_email_folder and list_mailboxes. This goes beyond the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Move an email to a different mailbox folder'), specifies the resource (email), and provides context about source folder restrictions. It distinguishes from siblings by referencing find_email_folder as a prerequisite, 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs when to use find_email_folder first if the email was discovered in a virtual folder, and warns that sourceMailbox must be a real folder. This provides clear guidance on when to use this tool vs alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_labelA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYesLabel name to remove
accountYesAccount name from list_accounts
emailIdYesEmail ID (UID) from list_emails
mailboxYesMailbox containing the email (must be a real folder)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotentHint=true and destructiveHint=false, and the description adds provider-specific behavior (ProtonMail vs. Gmail/IMAP). This is good additional context beyond the annotations, though more details on permissions or side effects could be included.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action, and contains no superfluous information. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of the tool, the description combined with the schema covers the essential information. However, it lacks mention of return values or any error conditions, which would enhance completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with adequate parameter descriptions. The tool description does not add extra meaning beyond what is already in the schema, so 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool removes a label from an email, with specific provider behaviors for ProtonMail (removes from label folder) and Gmail/IMAP (removes keyword flag). This distinguishes it from sibling tools like add_label and delete_label.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool's purpose is clear and context is provided via provider behavior differences. However, it does not explicitly discuss when to use this tool versus alternatives (e.g., moving an email out of a folder) or any prerequisites, but given the naming and sibling list, usage is reasonably implied.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesCurrent folder path
accountYesAccount name from list_accounts
new_pathYesNew folder path

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description does not add substantial behavioral context beyond the annotations. Annotations already indicate false for readOnlyHint and destructiveHint, so the agent knows it's a mutation that is not destructive. The description does not mention side effects on subfolders or permissions, which would be helpful but is not critical given the tool's simplicity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with a useful hint. No wasted words, efficiently communicates the core action and a key prerequisite.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple rename operation, the description and schema together are complete. It references a sibling tool for preparation. No output schema is needed as rename actions typically don't return complex results. The tool's simplicity justifies the brevity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions (path, account, new_path). The description does not add extra meaning beyond what the schema already provides, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Rename' and the resource 'mailbox (folder)'. It distinguishes from sibling tools like create_mailbox and delete_mailbox by specifying the operation. The mention of list_mailboxes for seeing current paths further clarifies its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear context: when you need to rename a mailbox folder, use this tool, and use list_mailboxes first to see current paths. It does not explicitly state when not to use it, but the sibling context implies alternatives like create_mailbox for new ones or delete_mailbox for removal.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesReply body content
htmlNoSend as HTML
accountYesAccount name from list_accounts
emailIdYesEmail ID to reply to (from list_emails or get_email)
mailboxNoMailbox where the original email isINBOX
replyAllNoReply to all recipients

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false (write) and destructiveHint=false. The description adds that it handles threading headers, which is beyond annotations. However, it lacks details on permission requirements, attachment handling, or rate limits, so it's adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise: two sentences that cover the core action, key feature (threading), and a usage hint. No extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters, 3 required, and no output schema, the description is fairly complete. It explains the primary purpose and prerequisite. It could optionally mention return value (e.g., reply email ID), but that's not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 parameters. The description mentions threading but does not add meaning beyond the schema for individual parameters. Baseline score 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Reply to an email') and specifies proper threading via headers, distinguishing it from other email actions like send or forward. The call to use 'get_email first' further clarifies the workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises to use get_email first, providing a clear prerequisite. While it doesn't explicitly list when not to use it, the sibling tools (send_email, forward_email) and context make the usage boundaries clear.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoCC recipients
toNoRecipient email addresses (can be empty for drafts)
bccNoBCC recipients
bodyYesEmail body content
htmlNoSend as HTML (default: plain text)
accountYesAccount name from list_accounts
subjectYesEmail subject
in_reply_toNoMessage-ID for threading (from get_email)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description does not need to cover safety. It adds that drafts are saved to the 'Drafts' folder, but omits other behavioral traits like whether it overwrites existing drafts or returns an identifier. This is acceptable given annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long with no wasted words. Each sentence serves a clear purpose: stating the action, describing the workflow, and referencing related tools.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the tool's role in the email composition workflow, which adds context beyond the schema. However, it does not mention whether the draft is automatically saved or if there are any limits. Given the moderate complexity and rich schema, it is mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all 8 parameters have descriptions in the input schema. The tool description adds no additional meaning beyond what the schema provides, warranting a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool saves an email draft to the Drafts folder, with a specific verb ('save') and resource ('email draft'). It distinguishes from sibling tools like 'send_draft' and 'list_emails' by mentioning the workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: 'Compose over time, then use send_draft to send it. Use list_emails with the Drafts mailbox to see saved drafts.' This outlines when to use the tool and suggests 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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoCC recipients
toYesRecipient email addresses
bccNoBCC recipients
bodyYesEmail body
htmlNoSend as HTML (default: false)
accountYesAccount name to send from
send_atYesWhen to send (ISO 8601 datetime, e.g. '2025-02-20T09:00:00Z')
subjectYesEmail subject
in_reply_toNoMessage-ID to reply to

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=false and destructiveHint=false. Description adds 'queued locally and sent automatically', providing some behavioral insight but not extensive (e.g., no mention of error states or cancellation).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the purpose. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers core functionality but lacks details on return values, error handling, or prerequisites (e.g., account validity). Given 9 parameters and no output schema, could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all parameters have descriptions. The tool description does not add additional meaning beyond the schema, meeting baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb (schedule) and resource (email) with specific aspect (send at future time). Distinguishes from sibling tools like send_email (immediate) and cancel_scheduled.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Indicates when to use (future delivery) but does not explicitly exclude immediate sending or mention alternatives. The description implies usage context via 'scheduled' vs immediate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_emailsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoFilter by recipient address
pageNoPage number
queryNoSearch keyword (omit or leave empty to use filters only)
accountYesAccount name from list_accounts
mailboxNoMailbox path (default: INBOX)INBOX
answeredNoFilter: true=replied, false=not replied
pageSizeNoResults per page
larger_thanNoMinimum email size in KB
smaller_thanNoMaximum email size in KB
has_attachmentNoFilter: true=has attachments, false=no attachments

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds context about the pure filter capability and supported filter fields. Annotations already indicate readOnly and non-destructive behavior, so no contradiction. No additional behavioral traits like rate limits or return format 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences that are front-loaded with the primary action and include a concrete example. Every sentence adds value with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the search mechanism and filter usage well. While it does not cover pagination or response format, the input schema handles those details. Overall adequate for a search tool with good annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description repeats some parameter info (e.g., omit query for filters) and gives an example, but adds limited new meaning beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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. It includes an example of using it as a pure filter, which helps distinguish from a basic list tool like list_emails, though it does not explicitly name siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives guidance on when to use the tool (for keyword search or filter-only queries) and provides an example. However, it does not mention when to use alternatives or 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.

send_draftA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDraft email UID (from list_emails on Drafts mailbox)
accountYesAccount name from list_accounts
mailboxNoDrafts folder path (auto-detected if omitted)

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the destructive nature (removing and deleting the draft) beyond the annotation destructiveHint: true. It explains the process: 'fetched, sent via SMTP, then deleted.' This adds valuable context about the tool's side effects, fully informing the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no superfluous words. The first sentence captures purpose and behavior, the second provides a usage hint. Every sentence earns its place, making it efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive action with no output schema, the description is largely complete. It explains the process and usage. However, it lacks information about return values, error handling, or what happens on failure, which could be useful but is not critical given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description does not need to add param details. The description mentions auto-detection for 'mailbox', but this is already in the schema. No additional semantic value beyond the schema is provided. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: sending an existing draft email and removing it from Drafts. It specifies the verb 'send' and the resource 'draft email', and distinguishes from sibling tools like 'send_email' by focusing on drafts. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a concrete usage guideline: 'Use list_emails with the Drafts mailbox to find draft IDs.' This gives the agent a clear prerequisite step. However, it does not explicitly state when not to use this tool (e.g., for composing new emails) or compare with 'send_email', leaving room for potential confusion.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoCC recipients
toYesRecipient email addresses
bccNoBCC recipients
bodyYesEmail body content
htmlNoSend as HTML (default: plain text)
accountYesAccount name from list_accounts
subjectYesEmail subject

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description's claim of 'Send' is consistent but adds no extra behavioral context (e.g., side effects, rate limits, sent folder handling).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, no unnecessary words. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a basic send email tool with no output schema. Could mention return value (e.g., email ID) for completeness, but not critically missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for each parameter. The description supplements by grouping CC, BCC, and HTML, but does not add significant new meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Send a new email') and the resource ('email'), and lists supported features (plain text/HTML, CC, BCC). This distinguishes it from sibling tools like reply_email and forward_email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives such as reply_email or forward_email. Lacks context for prerequisites or exclusions.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
soundNoInclude a sound alert in the test notification

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds context by noting it sends a test notification, which is a non-destructive side effect. It could mention that the notification is triggered regardless of existing permissions, but the current text is sufficient for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, with the action and purpose in the first sentence and a usage hint in the second. No unnecessary words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, no output schema), the description is fully complete. It covers purpose, usage, and prerequisite steps. Sibling tools are not needed to understand this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the only parameter 'sound' is already well-described in the schema with 'Include a sound alert in the test notification.' The tool description does not add additional parameter-level meaning beyond what the schema provides, so 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Send a test desktop notification' as the action and specifies the resource. It also clarifies the purpose: 'to verify that OS permissions are correctly configured.' This distinguishes it from sibling tools like check_notification_setup (diagnostic) and configure_alerts (configuration).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using check_notification_setup first to diagnose issues, providing clear guidance on when and in what sequence to use the tool. This helps the agent understand proper usage.

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.

  1. 49 tool updatesv0.2.3
    • First observedadd_label
    • First observedadd_to_calendar
    • First observedanalyze_email_for_scheduling
    • First observedapply_template
    • First observedbulk_action
    • First observedcancel_scheduled
    • First observedcheck_calendar_permissions
    • First observedcheck_health
    • First observedcheck_notification_setup
    • First observedconfigure_alerts
    • First observedcreate_label
    • First observedcreate_mailbox
    • First observedcreate_reminder
    • First observeddelete_email
    • First observeddelete_label
    • First observeddelete_mailbox
    • First observeddownload_attachment
    • First observedextract_calendar
    • First observedextract_contacts
    • First observedfind_email_folder
    • First observedforward_email
    • First observedget_email
    • First observedget_email_stats
    • First observedget_email_status
    • First observedget_emails
    • First observedget_hooks_config
    • First observedget_thread
    • First observedget_watcher_status
    • First observedlist_accounts
    • First observedlist_calendars
    • First observedlist_emails
    • First observedlist_events
    • First observedlist_labels
    • First observedlist_mailboxes
    • First observedlist_presets
    • First observedlist_reminders
    • First observedlist_scheduled
    • First observedlist_templates
    • First observedmark_email
    • First observedmove_email
    • First observedremove_label
    • First observedrename_mailbox
    • First observedreply_email
    • First observedsave_draft
    • First observedschedule_email
    • First observedsearch_emails
    • First observedsend_draft
    • First observedsend_email
    • First observedtest_notification

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a distinct purpose with clear descriptions that differentiate them. For example, list_emails lists with metadata, search_emails filters, get_email fetches full content, and get_email_status checks flags only. Overlapping areas (e.g., label management, mailbox operations) are well-segmented by specific verbs.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (e.g., list_accounts, send_email, delete_label, create_mailbox). Even longer names like analyze_email_for_scheduling maintain the pattern. No mixing of camelCase or other conventions is observed.

Tool Count4/5

49 tools is high but justified for a comprehensive email server covering email management, labels, mailboxes, drafts, scheduling, calendar, reminders, notifications, analytics, templates, and presets. Each tool earns its place, though a few (e.g., get_email_stats) might be considered extra for a core email server.

Completeness5/5

The tool set is extremely complete for email management: full CRUD for emails, labels, mailboxes, drafts, and scheduled emails; plus search, attachment download, contact extraction, thread reconstruction, calendar/reminder integration, analytics, notifications, and AI triage setup. No obvious gaps for core email operations.

Maintenance

ActivityInactive
ResponsivenessResponsive

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that gives AI assistants comprehensive access to Apple Mail accounts, enabling email discovery, reading, flag management, and server-side message retrieval.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An 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.
    77
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An 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.
    49
    5,599
    LGPL 3.0

Latest Blog Posts

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/codefuturist/email-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server