icloud-mcp
Connects to Apple services to manage iCloud Mail accounts, enabling email reading, searching, and automated inbox organization through the use of Apple app-specific passwords.
Provides comprehensive tools for managing iCloud Mail, including reading and searching emails, sending and replying to messages via SMTP, performing bulk operations like move and delete, and managing mailbox folders.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@icloud-mcpFind all emails from Sarah about the project and summarize them"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
icloud-mcp
A Model Context Protocol (MCP) server that connects Claude to your iCloud account โ Mail, Contacts, and Calendar. Read, search, organize, send, and automate across the full iCloud suite.
Features
๐ฌ Read and paginate through any mailbox
๐ Search emails by keyword, sender, subject, body, date range, and more
๐งต Find email threads by References/In-Reply-To chain
โ๏ธ Send emails, reply, forward, and save drafts via iCloud SMTP
๐ Create saved rules to auto-route emails on demand
๐๏ธ Bulk delete emails by any combination of filters
๐ Bulk move emails between folders with safe copy-verify-delete
๐ฆ Archive emails older than N days to any folder
๐ Analyze top senders and storage usage to identify inbox clutter
๐ข Count emails matching any filter before taking action
โ Mark emails as read/unread, flag/unflag in bulk or individually
๐ List and download email attachments (supports paginated byte-range fetching for large files)
๐ Extract List-Unsubscribe links for AI-assisted cleanup
๐๏ธ List, create, rename, and delete mailboxes
๐ Dry run mode for bulk operations โ preview before committing
๐ Safe move โ emails are fingerprinted and verified in the destination before removal from source
๐ Session logging โ Claude tracks progress across long multi-step operations
๐ค Contacts โ list, search, create, update, and delete iCloud Contacts via CardDAV
๐ Calendar โ list calendars, query events by date, create/update/delete events via CalDAV
Prerequisites
Claude Desktop or Claude Code
Node.js v20 or higher
An iCloud account with an app-specific password
Setup
1. Generate an Apple App-Specific Password
Go to appleid.apple.com
Sign in and navigate to Sign-In and Security โ App-Specific Passwords
Click + to generate a new password
Label it something like
Claude MCPand save the generated password
2. Install the package
npm install -g icloud-mcpThen find the install location:
npm root -gThe path varies by setup:
Setup | Typical path |
Mac with Homebrew Node |
|
Mac with system Node |
|
nvm |
|
3. Verify your setup
Before configuring Claude Desktop, run the doctor command to confirm everything is working:
IMAP_USER="you@icloud.com" IMAP_PASSWORD="your-app-specific-password" node $(npm root -g)/icloud-mcp/index.js --doctorYou should see:
icloud-mcp doctor
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
IMAP_USER is set
โ
IMAP_PASSWORD is set
โ
IMAP_USER looks like an email address
โ
Connected to imap.mail.me.com:993
โ
Authenticated as you@icloud.com
โ
INBOX opened (12453 messages)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
All checks passed. Ready to use with Claude Desktop.If any step fails, a plain-English explanation and suggested fix will be shown.
4. Connect to Claude
Claude Desktop
Open your Claude Desktop config file:
open ~/Library/Application\ Support/Claude/claude_desktop_config.jsonAdd the following under mcpServers, replacing the path with your npm root from step 2:
{
"mcpServers": {
"icloud-mail": {
"command": "node",
"args": ["/opt/homebrew/lib/node_modules/icloud-mcp/index.js"],
"env": {
"IMAP_USER": "you@icloud.com",
"IMAP_PASSWORD": "your-app-specific-password"
}
}
}
}Then fully quit Claude Desktop (Cmd+Q) and reopen it.
Claude Code
Run this command once to register the server for your user account (available across all projects):
claude mcp add icloud-mail \
--scope user \
-e IMAP_USER=you@icloud.com \
-e IMAP_PASSWORD=your-app-specific-password \
-- node $(npm root -g)/icloud-mcp/index.jsOr use npx to avoid needing a global install:
claude mcp add icloud-mail \
--scope user \
-e IMAP_USER=you@icloud.com \
-e IMAP_PASSWORD=your-app-specific-password \
-- npx -y icloud-mcpVerify it registered correctly:
claude mcp listRunning from source? Copy
.mcp.json.exampleto.mcp.json, set your credentials in your shell, then runclaudefrom the repo directory. Claude Code will pick up the config automatically.
5. Add Custom Instructions (Recommended)
For large inbox operations, add the following to Claude Desktop's custom instructions to ensure Claude stays on track and checks in with you regularly. Go to Claude Desktop โ Settings โ Custom Instructions and add:
When using icloud-mail tools:
1. Before starting any multi-step operation, call log_clear then log_write with your full plan
2. After every single tool call, call log_write with what you did and the result
3. After every 3 tool calls, stop and summarize progress to the user and wait for confirmation before continuing
4. Never assume a bulk operation succeeded โ always verify with count_emails after
5. If you are ever unsure what you have done so far, call log_read before proceeding6. Start using it
You're all set. Try asking Claude:
"Show me the top senders in my iCloud inbox"
"How many unread emails do I have?"
Available Tools (65)
Read & Search
Tool | Description |
| Total, unread, and recent email counts for INBOX |
| Total, unread, and recent email counts for any folder |
| List all folders in your iCloud Mail |
| Paginated inbox with sender, subject, date (supports unread filter) |
| Full email content by UID โ MIME-aware, returns body + attachments list; supports |
| Raw RFC 2822 source as base64 (headers + MIME body, 1 MB cap) |
| All emails from a specific address |
| Emails between two dates |
| Search by keyword with filters; supports |
| Find all emails in the same thread (subject + References/In-Reply-To matching) |
| Count emails matching any combination of filters |
| Top senders by volume from a sample of recent emails |
| Top senders of unread emails |
| Estimate storage usage by size bucket and identify top large-email senders |
| Extract List-Unsubscribe links (email + URL) from an email |
| List all attachments in an email (filename, MIME type, size, partId) |
| Download an attachment as base64 (max 20 MB); supports |
Send & Draft
Tool | Description |
| Send a new email via iCloud SMTP; supports plain text, HTML, cc, bcc, replyTo |
| Reply to an email with correct In-Reply-To + References threading; supports |
| Forward an email with an optional prepended note |
| Save a draft to your Drafts folder without sending; supports plain text and HTML |
Write
Tool | Description |
| Flag or unflag a single email |
| Mark a single email as read or unread |
| Move an email to Deleted Messages |
| Move a single email to any folder |
Bulk Operations
Tool | Description |
| Move emails matching any combination of filters (safe copy-verify-delete); supports |
| Move all emails from a sender to a folder; supports |
| Move all emails from a domain to a folder; supports |
| Safely move emails older than N days to an archive folder; supports |
| Delete emails matching any combination of filters; supports |
| Delete all emails from a sender |
| Delete all emails matching a subject keyword |
| Delete all emails older than N days |
| Mark all (or all from a sender) as read |
| Mark all (or all from a sender) as unread |
| Mark all unread emails older than N days as read |
| Flag or unflag emails matching any combination of filters |
| Flag or unflag all emails from a specific sender |
| Permanently delete all emails in trash; supports |
Mailbox Management
Tool | Description |
| Create a new folder |
| Rename an existing folder |
| Delete a folder (must be empty first) |
Move Tracking
Tool | Description |
| Check the status of the current or most recent bulk move; includes stale warning for operations >24h old |
| Abandon an in-progress move so a new one can start |
Saved Rules
Tool | Description |
| Create a named rule with filters + action (move/delete/mark_read/mark_unread/flag/unflag) |
| List all saved rules with last-run time and run count |
| Run a specific rule by name; supports |
| Run all saved rules in sequence; supports |
| Delete a saved rule by name |
Contacts (CardDAV)
Tool | Description |
| List contacts from iCloud Contacts; supports |
| Search contacts by name, email, or phone number |
| Get full details for a specific contact by ID |
| Create a new contact; supports name, phones, emails, address, org, birthday, note |
| Update an existing contact; only provided fields are changed |
| Permanently delete a contact |
Calendar (CalDAV)
Tool | Description |
| List all iCloud calendars with name, ID, and supported event types |
| List events in a calendar within a date range; supports |
| Get full details of a specific event by ID |
| Create a new event; supports title, start/end, timezone, all-day, description, location, recurrence |
| Update an existing event; only provided fields are changed |
| Permanently delete a calendar event |
| Search for events by title across all calendars; supports date range |
Session Log
Tool | Description |
| Write a step to the session log |
| Read the session log |
| Clear the session log and start fresh |
Filters
bulk_move, bulk_delete, bulk_flag, search_emails, count_emails, and rules all accept any combination of these filters:
Filter | Type | Description |
| string | Match exact sender email address |
| string | Match any sender from this domain (e.g. |
| string | Keyword to match in subject |
| string | Only emails before this date (YYYY-MM-DD) |
| string | Only emails since this date (YYYY-MM-DD) |
| boolean |
|
| boolean |
|
| number | Only emails larger than this size in KB |
| number | Only emails smaller than this size in KB |
| boolean | Only emails with attachments (requires narrow pre-filters โ scans up to 500 candidates) |
Safe Move
All bulk move operations (bulk_move, bulk_move_by_sender, bulk_move_by_domain, archive_older_than) use a three-phase copy-verify-delete approach:
Copy โ all emails are copied to the destination in chunks
Verify โ every email is fingerprinted and confirmed present in the destination
Delete โ source emails are removed in a single EXPUNGE only after verification passes
A persistent manifest at ~/.icloud-mcp-move-manifest.json tracks progress so a crash or dropped connection never results in data loss. Use get_move_status to inspect any operation and abandon_move to clear a stuck one.
Example Usage
Once configured, you can ask Claude things like:
"Show me the top senders in my iCloud inbox"
"What's eating the most storage in my inbox?"
"How many unread emails do I have from substack.com?"
"Find all emails in this thread and summarize the conversation"
"Move all emails from substack.com older than 2023 to my Newsletters folder"
"Archive everything in my inbox older than 1 year"
"Delete all unread emails from linkedin.com before 2022"
"What's the unsubscribe link for this newsletter?"
"Show me the 3 largest attachments in my inbox this month"
"Flag all unread emails from my bank"
"Create a rule that moves all emails from spotify.com to bulk-mail/services"
"Reply to the last email from John and cc Sarah"
"Draft a follow-up email to the team about the Q1 report"
"Find John Smith's phone number in my contacts"
"Add a new contact: Jane Doe, jane@example.com, +1 555 123 4567"
"What's on my calendar next week?"
"Create an event: dentist appointment Monday at 10am Eastern"
"Find all my calendar events about 'team meeting'"
Security
Your credentials are stored only in your local Claude Desktop config file
The server runs entirely on your machine โ no data is sent to any third party
App-specific passwords can be revoked at any time from appleid.apple.com
License
MIT
Available Tools
69 toolsabandon_moveA
Abandon an in-progress move operation so a new one can start. Only use if you are certain the operation should not be resumed. Emails already moved will not be returned to source.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and successfully discloses critical behavioral traits: partial irreversibility ('Emails already moved will not be returned to source') and side effects (enabling new operations). It does not, however, clarify the final state of the abandoned operation or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: first establishes purpose, second provides usage constraint, third discloses irreversibility consequence. Information is front-loaded and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter mutation tool with no output schema, the description covers essential safety warnings regarding data loss. It could be improved by clarifying the post-abandonment state visible to get_move_status, but adequately covers the critical user-facing consequence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema contains zero parameters (empty object). Per rubric guidelines, zero-parameter tools receive a baseline score of 4. The description appropriately makes no parameter claims, matching the schema structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb (abandon), resource (in-progress move operation), and outcome (so a new one can start). It effectively distinguishes from sibling move operations (bulk_move, move_email) which initiate moves rather than aborting them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit safety constraint: 'Only use if you are certain the operation should not be resumed.' This establishes when-not-to-use versus attempting to resume. However, it omits explicit reference to get_move_status as the logical prerequisite for verifying move state before abandonment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_older_thanA
Safely move emails older than N days from a source mailbox to an archive folder. Uses the same safe copy-verify-delete pipeline as bulk_move. Use dryRun: true to preview.
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | Archive emails older than this many days | |
| targetMailbox | Yes | Destination archive folder (e.g. Archive) | |
| sourceMailbox | No | Source mailbox (default INBOX) | |
| dryRun | No | If true, preview what would be moved without moving |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Explains the 'copy-verify-delete pipeline' safety mechanism and dryRun preview capability. Missing: error handling behavior, confirmation of whether source emails are deleted after copy, rate limits, or idempotency guarantees expected for mutation tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: purpose statement, safety pipeline disclosure, and usage tip. Front-loaded with specific operation details; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Appropriate for a 4-parameter mutation tool with no output schema. Covers the safety semantics (crucial for a 'move' operation) and preview capability. Could improve by clarifying the destructive aspect of the source deletion or referencing the default INBOX behavior mentioned in schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, establishing baseline 3. Description adds value by framing dryRun as a 'preview' usage pattern and contextualizing 'N days' within the archiving workflow. Connects the 'targetMailbox' parameter to the archive folder concept explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('move') with clear resource ('emails'), condition ('older than N days'), and endpoints ('source mailbox' to 'archive folder'). The 'archive' semantic distinguishes it from sibling delete_older_than and general bulk_move operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance to 'Use dryRun: true to preview' and references implementation similarity to bulk_move. However, lacks explicit when-to-use vs destructive alternatives like delete_older_than or simple move_email given the large sibling tool set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_deleteA
Delete emails matching any combination of filters. Processes in chunks of 250 with per-chunk timeouts for reliability. Use dryRun: true to preview without making changes.
| Name | Required | Description | Default |
|---|---|---|---|
| sourceMailbox | No | Mailbox to delete from (default INBOX) | |
| dryRun | No | If true, preview what would be deleted without actually deleting | |
| sender | No | Match exact sender email address | |
| domain | No | Match any sender from this domain (e.g. substack.com) | |
| subject | No | Keyword to match in subject | |
| before | No | Only emails before this date (YYYY-MM-DD) | |
| since | No | Only emails since this date (YYYY-MM-DD) | |
| unread | No | True for unread only, false for read only | |
| flagged | No | True for flagged only, false for unflagged only | |
| larger | No | Only emails larger than this size in KB | |
| smaller | No | Only emails smaller than this size in KB | |
| hasAttachment | No | Only emails with attachments (client-side BODYSTRUCTURE scan โ must be combined with other filters that narrow results to under 500 emails first) | |
| account | No | Account name to use (e.g. 'icloud', 'gmail'). Defaults to first configured account. Use list_accounts to see available accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and successfully discloses implementation details (chunks of 250, per-chunk timeouts) and safety mechanisms (dryRun). It could be improved by explicitly stating the destructive/irreversible nature or timeout failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: front-loaded with the core action, followed by implementation details, and ending with safety guidance. Every sentence earns its place with specific, actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 parameters and destructive capabilities with zero required parameters (risk of deleting everything if called with empty args), the description is missing critical safety warnings. It covers chunking and dryRun but fails to warn about the empty-filter scenario or explain expected outcomes without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema has 100% coverage (baseline 3), the description adds valuable semantic context about how parameters interact ('any combination of filters') and provides usage syntax for the dryRun parameter, enhancing understanding beyond the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action (Delete), resource (emails), and method (matching any combination of filters). It effectively distinguishes from sibling tools like 'bulk_delete_by_sender' or single 'delete_email' by emphasizing the flexible, combinatorial filter approach.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on using dryRun for safe preview, which is valuable behavioral instruction. However, it lacks guidance on when to use this versus more specific alternatives (like 'bulk_delete_by_sender') or warnings about the zero required parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_delete_by_senderC
Delete all emails from a specific sender
| Name | Required | Description | Default |
|---|---|---|---|
| sender | Yes | Sender email address | |
| mailbox | No | Mailbox (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'Delete' implies a destructive operation, the description fails to specify whether emails are moved to trash or permanently deleted, whether the operation is reversible, or if there are rate limits for bulk operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no waste. However, it may be overly terse given the lack of annotations and the destructive nature of the operation; additional context about behavioral traits would improve utility without harming clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive bulk operation with no output schema and numerous sibling alternatives, the description is incomplete. It lacks safety warnings, recovery information (trash vs permanent), and guidance on the mailbox parameter's role in scoping the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents both 'sender' and 'mailbox' parameters. The description mentions 'specific sender' which aligns with the required parameter, but adds no additional semantic context (e.g., format expectations, case sensitivity) beyond what the schema provides. Baseline 3 is appropriate for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (Delete), resource (emails), and filter scope (all from a specific sender). The phrase 'all emails' distinguishes this from the single 'delete_email' sibling, and 'from a specific sender' distinguishes it from 'bulk_delete_by_subject' and general 'bulk_delete'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this tool versus alternatives like 'bulk_delete' (which may use different filters) or 'delete_email' (single item). Given the large number of bulk operation siblings, explicit selection criteria would help prevent incorrect tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_delete_by_subjectC
Delete all emails matching a subject pattern
| Name | Required | Description | Default |
|---|---|---|---|
| subject | Yes | Subject keyword to match | |
| mailbox | No | Mailbox (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. While 'Delete' implies destruction, it lacks critical details: whether deletion is permanent or moves to trash, if the pattern matching supports wildcards/regex, case sensitivity, or performance implications of bulk operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise at 7 words with the action verb front-loaded. No filler words, though brevity comes at the cost of safety warnings and behavioral details that would be appropriate for a destructive bulk tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a destructive bulk operation with no annotations and no output schema, the description is dangerously minimal. It omits irreversibility warnings, confirmation requirements, and scope limitations (subfolders, date ranges) that would help an agent use this safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, establishing a baseline of 3. The description adds 'pattern' which hints at matching behavior (substring vs exact), but doesn't clarify pattern syntax, case sensitivity, or mailbox scoping beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description provides a clear verb (Delete), resource (emails), and scope (matching a subject pattern). It implicitly distinguishes from siblings like bulk_delete_by_sender by specifying 'subject pattern', though it doesn't explicitly compare against alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus bulk_delete, bulk_delete_by_sender, or delete_older_than. No warnings about the destructive nature or prerequisites like confirming the mailbox selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_flagC
Flag or unflag emails matching any combination of filters in bulk
| Name | Required | Description | Default |
|---|---|---|---|
| flagged | Yes | True for flagged only, false for unflagged only | |
| mailbox | No | Mailbox (default INBOX) | |
| sender | No | Match exact sender email address | |
| domain | No | Match any sender from this domain (e.g. substack.com) | |
| subject | No | Keyword to match in subject | |
| before | No | Only emails before this date (YYYY-MM-DD) | |
| since | No | Only emails since this date (YYYY-MM-DD) | |
| unread | No | True for unread only, false for read only | |
| larger | No | Only emails larger than this size in KB | |
| smaller | No | Only emails smaller than this size in KB | |
| hasAttachment | No | Only emails with attachments (client-side BODYSTRUCTURE scan โ must be combined with other filters that narrow results to under 500 emails first) | |
| account | No | Account name to use (e.g. 'icloud', 'gmail'). Defaults to first configured account. Use list_accounts to see available accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure. While 'Flag or unflag' indicates mutation, the description fails to mention operational limits (like the 500-email limit for attachment scanning noted only in the schema), error handling, or performance characteristics of bulk operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence front-loaded with the action verbs. However, extreme brevity (9 words) contributes to underspecification for a complex 12-parameter tool; additional context on scope or safety would justify a longer description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex bulk mutation tool with 12 filtering parameters, no annotations, and no output schema, the 9-word description is inadequate. It lacks safety warnings about mass-modifying email states, return value documentation, or guidance on the 'hasAttachment' limitation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage across 12 parameters, the schema carries the semantic load. The description adds minimal parameter context beyond acknowledging 'filters' generally. It does not clarify the relationship between the required 'flagged' parameter and the 'Flag or unflag' action described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Flag or unflag') and identifies the resource ('emails'). It distinguishes from singular 'flag_email' by specifying 'in bulk' and implies differentiation from 'bulk_flag_by_sender' by emphasizing 'any combination of filters'. However, it could explicitly clarify when to use this versus the sender-specific variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'flag_email' (single) or 'bulk_flag_by_sender'. It omits prerequisites, safety warnings for bulk operations, or whether this operation is reversible.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_flag_by_senderB
Flag or unflag all emails from a specific sender
| Name | Required | Description | Default |
|---|---|---|---|
| sender | Yes | Sender email address | |
| flagged | Yes | True to flag, false to unflag | |
| mailbox | No | Mailbox (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it specifies the scope ('all emails'), it fails to mention whether the operation is idempotent, what happens to emails already in the target state, potential performance implications of bulk operations, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the action. There is no redundant or wasted text; every word serves to define the tool's core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool without an output schema, the description covers the essential function but remains minimal. Given this is a bulk operation affecting potentially many emails, the lack of guidance on error handling, empty results, or confirmation mechanisms leaves it at minimum viability rather than comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds minimal semantic value beyond the schema, though it maps the 'flagged' boolean conceptually to the 'Flag or unflag' action. It does not elaborate on parameter formats, validation rules, or the default mailbox behavior beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description provides a clear action ('Flag or unflag'), resource ('emails'), and scope ('all emails from a specific sender'). It implicitly distinguishes from sibling tools like 'flag_email' (single) and 'bulk_flag' (general criteria) by specifying 'by sender' in the name and 'specific sender' in the description, though it doesn't 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives like 'bulk_flag' (which may filter by different criteria) or 'flag_email' (for single messages). There are no stated prerequisites, exclusions, or conditions that would help an agent select this over similar bulk operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_mark_readB
Mark all emails as read, optionally filtered by sender
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox | No | Mailbox (default INBOX) | |
| sender | No | Optional: only mark emails from this sender as read |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but omits critical safety context: it doesn't warn that this mutates email state, affects potentially thousands of emails if unfiltered, or mention that 'bulk_mark_unread' can reverse it. For a bulk write operation, this lack of behavioral disclosure is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the primary action ('Mark all emails as read'), followed by the conditional scope. No redundancy or filler. Efficient length for the complexity level.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a two-parameter tool with complete schema documentation, but falls short for a bulk mutation operation. Missing: return value description, safety warnings about unfiltered usage, and reversibility notes. However, given the simple parameter structure and lack of output schema, it meets minimum viability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds conceptual framing ('optionally filtered by sender') that aligns with the schema parameters, but doesn't provide syntax examples, format constraints, or semantic relationships beyond what's already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Mark... as read') and resource ('emails'), using 'all' to indicate bulk scope. The phrase 'optionally filtered by sender' distinguishes it from date-based bulk variants like 'mark_older_than_read' and implies the difference from single-email 'mark_as_read', though it doesn't 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this versus 'mark_as_read' (single email) or 'mark_older_than_read' (date-based). No warning about the scope of 'all emails' or prerequisites. The agent must infer usage solely from the parameter descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_mark_unreadB
Mark all emails as unread, optionally filtered by sender
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox | No | Mailbox (default INBOX) | |
| sender | No | Optional: only mark emails from this sender as unread |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure, yet it omits critical context: this is a destructive mutation affecting potentially thousands of emails, whether the operation is reversible, performance implications of 'all', or threading behavior. The agent gets no warning about the scope of impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficiently structured sentence of 9 words. It front-loads the primary action and appends the conditional filter without waste or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk mutation tool with no output schema and no annotations, the description is minimally adequate. It covers the basic operation but lacks important contextual safeguards regarding the 'all' scope, potential volume of affected emails, or confirmation requirements that would help an agent invoke this tool safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage ('Mailbox' and 'Optional: only mark emails from this sender'), so the baseline is 3. The description adds minimal semantic value beyond the schema, merely noting the filtering capability without elaborating on mailbox format constraints or sender string syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the core action ('Mark all emails as unread') and scope ('all'), with the specific state change (unread) distinguishing it from sibling tools like bulk_mark_read. However, it does not explicitly differentiate this bulk operation from singular alternatives like 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the optional sender filter but provides no guidance on when to use this tool versus alternatives like mark_as_read (single email) or bulk_mark_read. There are no stated prerequisites, exclusions, or conditions for proper usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_moveA
Move emails matching any combination of filters from one mailbox to another. Uses safe copy-verify-delete with fingerprint verification and a persistent manifest. Use dryRun: true to preview without making changes.
| Name | Required | Description | Default |
|---|---|---|---|
| targetMailbox | Yes | Destination mailbox path | |
| sourceMailbox | No | Source mailbox (default INBOX) | |
| dryRun | No | If true, preview what would be moved without actually moving | |
| limit | No | Maximum number of emails to move (default: all matching) | |
| sender | No | Match exact sender email address | |
| domain | No | Match any sender from this domain (e.g. substack.com) | |
| subject | No | Keyword to match in subject | |
| before | No | Only emails before this date (YYYY-MM-DD) | |
| since | No | Only emails since this date (YYYY-MM-DD) | |
| unread | No | True for unread only, false for read only | |
| flagged | No | True for flagged only, false for unflagged only | |
| larger | No | Only emails larger than this size in KB | |
| smaller | No | Only emails smaller than this size in KB | |
| hasAttachment | No | Only emails with attachments (client-side BODYSTRUCTURE scan โ must be combined with other filters that narrow results to under 500 emails first) | |
| account | No | Account name to use (e.g. 'icloud', 'gmail'). Defaults to first configured account. Use list_accounts to see available accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden. It excellently documents the safety mechanism ('safe copy-verify-delete with fingerprint verification and a persistent manifest') and idempotency characteristics, critical for a destructive move operation. However, it omits potential rate limits, error handling behavior, or confirmation that source emails are deleted after verification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences efficiently structured: purpose statement, safety mechanism disclosure, and usage guidance. Every sentence earns its place with zero redundancy or filler. Technical details (fingerprint verification, persistent manifest) are packed concisely without sacrificing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 15-parameter destructive operation with no output schema, the description adequately covers the mechanism and safety but leaves gaps regarding return value structure (only hinting at a 'manifest'), success/failure indicators, and specific warnings about the hasAttachment constraint documented in the schema. Functional but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, establishing a baseline of 3. The description adds the concept of 'any combination of filters' which reinforces how the multiple filter parameters interact, and explicitly highlights the dryRun parameter's utility, but does not elaborate on specific parameter formats (e.g., date formats) or constraints beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Move emails matching any combination of filters from one mailbox to another', providing a specific verb, resource, and scope. The phrase 'any combination of filters' effectively distinguishes this tool from siblings like bulk_move_by_sender or bulk_move_by_domain which likely support limited filter types, and from move_email which likely handles single emails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides valuable safety guidance with 'Use dryRun: true to preview without making changes', but lacks explicit guidance on when to use this general-purpose filterable version versus the specialized bulk_move_by_sender/bulk_move_by_domain variants. No prerequisites or exclusion criteria are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_move_by_domainA
Move all emails from a specific domain to a folder. Convenience wrapper around bulk_move with a domain filter.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Sender domain to match (e.g. github.com, substack.com) | |
| targetMailbox | Yes | Destination folder | |
| sourceMailbox | No | Source mailbox (default INBOX) | |
| dryRun | No | Preview only โ return count without moving |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. While 'Move' implies a write operation, the description fails to disclose critical behavioral traits for a bulk operation: whether moves are reversible, what the dryRun behavior returns, success/failure handling, or performance implications of large batches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: first sentence establishes core function, second establishes architectural relationship to sibling tool. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is minimally adequate for a 4-parameter tool, but lacks important context for a bulk mutation operation (e.g., return value description, safety warnings). It meets baseline requirements but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema itself. The description adds context that this is a 'wrapper' which helps understand the domain parameter's filtering role, but does not add syntax details, format constraints, or examples beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the specific action (move), resource (emails), scope (from a specific domain to a folder), and explicitly identifies itself as a 'convenience wrapper around bulk_move with a domain filter,' effectively distinguishing it from the general bulk_move sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'convenience wrapper' statement implies this tool is for domain-specific filtering versus the general bulk_move, providing implicit context. However, it lacks explicit when-to-use guidance compared to siblings like bulk_move_by_sender or warnings about irreversible operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_move_by_senderB
Move all emails from a specific sender to a folder
| Name | Required | Description | Default |
|---|---|---|---|
| sender | Yes | Sender email address | |
| targetMailbox | Yes | Destination folder | |
| sourceMailbox | No | Source mailbox (default INBOX) | |
| dryRun | No | Preview only โ return count without moving |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden but only minimally discloses the bulk nature ('all emails'). It fails to mention the dryRun safety feature (present in schema), reversibility concerns, partial failure behavior, or performance implications of bulk operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is front-loaded and efficient with no wasted words. However, extreme brevity contributes to missing critical behavioral and usage context that would require additional sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk mutation tool with no annotations and no output schema, the description is inadequate. It fails to describe return values (success count? moved message IDs?), error conditions, or the dryRun preview capability, leaving agents uncertain about invocation outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, documenting all four parameters including dryRun and sourceMailbox defaults. The description implies usage of sender and folder but does not add syntax guidance or validation rules beyond the schema, warranting the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description provides a specific verb ('Move'), clear resource ('all emails from a specific sender'), and distinguishes from siblings by specifying the 'by sender' filtering mechanism (differentiating it from bulk_move, bulk_move_by_domain, and move_email).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this tool versus alternatives like bulk_move (general query-based moving), move_email (single item), or bulk_move_by_domain. Does not mention prerequisites or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compose_emailA
Compose and send a new email via iCloud SMTP. The From address is always your iCloud account. Supports plain text, HTML, or both (multipart/alternative).
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient email address(es), comma-separated or array | |
| subject | Yes | Email subject | |
| body | No | Plain text body (used as fallback when html is also provided) | |
| html | No | HTML body. If provided without body, plain text is auto-generated. If provided with body, sends multipart/alternative. | |
| cc | No | CC recipient(s), comma-separated or array | |
| bcc | No | BCC recipient(s), comma-separated or array | |
| replyTo | No | Reply-To address override |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the From address constraint and multipart format behavior, but fails to mention that this is an irreversible external action (sending email), potential rate limits, or error handling. Critical safety context for a destructive-by-nature operation is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. First sentence establishes core function and transport mechanism; second covers sender constraint and format support. Every clause provides essential information not redundant with structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter email sending tool with no output schema and no annotations, the description covers format options and sender identity but omits discussion of delivery status, failure modes, or irreversibility. Adequate but lacks critical behavioral warnings expected for external-communication tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage (baseline 3). The description adds value by explaining the implicit From constraint (not in schema) and summarizing the body/html multipart relationship. It clarifies that body serves as fallback when html is provided, adding semantic context beyond individual field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Compose and send a new email via iCloud SMTP' - specific verbs (compose, send), resource (email), and mechanism (iCloud SMTP). It distinguishes from sibling tools like reply_to_email and forward_email by specifying 'new email' and the SMTP transport method.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through 'new email' but does not explicitly state when to use this versus similar siblings like reply_to_email or forward_email. No explicit 'when-not-to-use' or alternatives are named, though the tool name provides strong implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_emailsA
Count how many emails match a set of filters without moving or deleting them. Use this before bulk_move or bulk_delete to preview how many emails will be affected.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox | No | Mailbox to count in (default INBOX) | |
| sender | No | Match exact sender email address | |
| domain | No | Match any sender from this domain (e.g. substack.com) | |
| subject | No | Keyword to match in subject | |
| before | No | Only emails before this date (YYYY-MM-DD) | |
| since | No | Only emails since this date (YYYY-MM-DD) | |
| unread | No | True for unread only, false for read only | |
| flagged | No | True for flagged only, false for unflagged only | |
| larger | No | Only emails larger than this size in KB | |
| smaller | No | Only emails smaller than this size in KB | |
| hasAttachment | No | Only emails with attachments (client-side BODYSTRUCTURE scan โ must be combined with other filters that narrow results to under 500 emails first) | |
| account | No | Account name to use (e.g. 'icloud', 'gmail'). Defaults to first configured account. Use list_accounts to see available accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It successfully communicates the non-destructive/safe nature ('without moving or deleting'), which is critical given the sibling context. However, it lacks disclosure of return value format, rate limits, or performance characteristics beyond the hasAttachment constraint buried in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. First sentence front-loads the core action and safety guarantee; second sentence provides workflow context. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 12 parameters and no output schema, the description omits what the tool returns (a number? an object?). The hasAttachment parameter has a critical 500-email limit constraint documented only in the schema. Adequate but has clear gaps regarding return value and high-impact parameter constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with 12 well-documented filter parameters. The description references 'a set of filters' acknowledging the filtering capability without redundant enumeration. Baseline 3 is appropriate since schema carries the full semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Count' with resource 'emails' and explicit scope 'without moving or deleting them'. Clearly distinguishes from destructive sibling tools like bulk_move and bulk_delete by contrasting its non-destructive nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use this before bulk_move or bulk_delete to preview how many emails will be affected', providing clear workflow guidance and indicating when to prefer this tool over immediate destructive actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_contactC
Create a new contact in iCloud Contacts.
| Name | Required | Description | Default |
|---|---|---|---|
| firstName | No | First name | |
| lastName | No | Last name | |
| fullName | No | Full display name (overrides firstName + lastName for FN field) | |
| org | No | Organization / company name | |
| phone | No | Primary phone number (shorthand for phones array) | |
| No | Primary email address (shorthand for emails array) | ||
| phones | No | Array of phone objects: [{ number, type }] where type is cell/home/work/etc. | |
| emails | No | Array of email objects: [{ email, type }] where type is home/work/etc. | |
| addresses | No | Array of address objects: [{ street, city, state, zip, country, type }] | |
| birthday | No | Birthday in YYYY-MM-DD format | |
| note | No | Notes / free text | |
| url | No | Website URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. 'Create' implies a write operation, but description omits duplicate handling, return value (no output schema exists), idempotency, or whether partial failures are possible. Lacks disclosure of iCloud-specific behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely brief at six words. While not verbose, the extreme brevity contributes to under-specification given the tool's complexity. No filler content, but misses critical context that would earn a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Inadequate for a 12-parameter mutation tool with zero required fields (unusual design) and no output schema. Description fails to explain what constitutes a valid minimal contact or what the operation returns, leaving significant agent uncertainty.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. Description adds no supplemental parameter guidance (e.g., precedence between 'fullName' vs 'firstName+lastName'), warranting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verb 'Create' and resource 'contact' with scope 'iCloud Contacts'. However, it does not explicitly distinguish from sibling tool 'update_contact' (e.g., clarifying this is for new records only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this versus 'update_contact' or 'search_contacts'. Fails to mention the unusual 'all parameters optional' constraint, which is critical for an agent to understand minimum viable input.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_eventA
Create a new event in an iCloud calendar. For all-day events use allDay:true and YYYY-MM-DD for start/end.
| Name | Required | Description | Default |
|---|---|---|---|
| calendarId | Yes | Calendar ID to add the event to | |
| summary | Yes | Event title | |
| start | Yes | Start date/time โ ISO 8601 (e.g. 2026-03-15T10:00:00) or YYYY-MM-DD for all-day | |
| end | No | End date/time โ ISO 8601 or YYYY-MM-DD. Defaults to 1 hour after start. | |
| timezone | No | IANA timezone (e.g. America/New_York). Use "UTC" or omit for UTC. | |
| allDay | No | True for all-day event (uses DATE values, no time) | |
| description | No | Event description / notes | |
| location | No | Event location | |
| recurrence | No | iCal RRULE string (e.g. FREQ=WEEKLY;BYDAY=MO,WE,FR) | |
| status | No | Event status: CONFIRMED, TENTATIVE, or CANCELLED | |
| reminder | No | Alert this many minutes before the event (default 30, set to 0 to disable) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the iCloud domain and all-day event behavior, but omits safety details (idempotency, validation errors), authorization requirements, and what the tool returns upon success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: first establishes purpose, second delivers critical implementation detail for all-day events. Appropriately front-loaded and dense with actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter creation tool with no output schema or annotations, the description covers the essential use case but leaves gaps regarding return values, error conditions, timezone handling behavior, and integration with list_calendars.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema description coverage, the description adds value by explicitly linking the allDay flag to the YYYY-MM-DD format requirement ('use allDay:true and YYYY-MM-DD'), reinforcing the parameter interaction imperatively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Create a new event') and target resource ('iCloud calendar'), distinguishing it from sibling tools like update_event, delete_event, and email-related functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides specific syntax guidance for all-day events ('use allDay:true and YYYY-MM-DD'), but lacks broader guidance on when to use this versus suggest_event_from_email or prerequisites like obtaining calendarId from list_calendars.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_mailboxC
Create a new mailbox/folder
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the new mailbox |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It fails to mention critical mutation behaviors: whether the operation is idempotent, if nested mailbox paths are supported, what happens if the name already exists, or what the return value indicates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely brief at only four words, containing no redundancy or filler. However, given the lack of annotations and behavioral context, it borders on under-specification rather than optimal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter creation tool without an output schema, the description meets minimum viability by identifying the operation type. However, given zero annotation coverage, it should explicitly address folder nesting capabilities and uniqueness constraints to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the 'name' parameter is already well-documented as 'Name of the new mailbox'. The description adds no additional semantic context (e.g., naming restrictions, path separators for nesting), but the baseline score of 3 is appropriate given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and identifies the resource ('mailbox/folder'), clarifying that this refers to email folders rather than user accounts. However, it does not explicitly differentiate from sibling operations like 'rename_mailbox' or 'delete_mailbox', nor does it specify scope constraints (e.g., parent mailbox context).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, prerequisites (such as checking for existing mailboxes via 'list_mailboxes'), or error handling scenarios (e.g., duplicate names).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ruleA
Create a saved rule that applies a specific action to emails matching a set of filters. Rules are stored persistently and can be run on demand or all at once with run_all_rules.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unique rule name (used to run or delete the rule) | |
| description | No | Optional human-readable description of what the rule does | |
| filters | Yes | Email filters (same as bulk_move/bulk_delete filters: sender, domain, subject, before, since, unread, flagged, larger, smaller) | |
| action | Yes | Action to apply to matching emails |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It successfully discloses the persistence model ('stored persistently') and execution lifecycle ('run on demand'). However, it fails to mention important behavioral traits: that rules perform real (potentially destructive) actions when run, what happens if a duplicate name is provided, or whether validation occurs immediately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two efficient sentences with zero waste. The first sentence front-loads the core purpose, while the second adds essential behavioral context about persistence and execution. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity (nested filter/action objects) and 100% schema coverage, the description adequately explains the tool's purpose and persistence model. It appropriately omits return value documentation since no output schema exists. Minor gap: lacks warning about destructive actions (delete) that rules can perform when executed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, establishing a baseline of 3. The description text implies the function of the 'filters' and 'action' parameters at a high level ('applies a specific action to emails matching a set of filters'), but does not add syntax details, format examples, or semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb (Create), resource (saved rule), and mechanism (applies action to emails matching filters). It effectively distinguishes from sibling bulk_* tools by emphasizing that rules are 'saved' and 'stored persistently' rather than executing immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (creating reusable automation) by stating rules 'can be run on demand or all at once with run_all_rules.' It explicitly references the sibling execution tool run_all_rules. However, it lacks explicit 'when-not-to-use' guidance contrasting with immediate bulk operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_contactA
Delete a contact from iCloud Contacts permanently.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | Contact ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the critical safety trait that deletion is 'permanent' (irreversible), but lacks other behavioral details such as error handling when contactId doesn't exist, authentication requirements, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Seven words, one sentence. Every element earns its place: action verb, resource, system boundary, and safety warning ('permanently'). No filler or redundancy. Perfectly front-loaded and sized for the operation complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (single required string parameter) and 100% schema coverage, the description adequately covers the operation's intent and critical safety warning. Lacks explicit mention of error states or success indicators, but sufficient for a simple destructive CRUD operation without output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with 'contactId' fully described as 'Contact ID to delete'. The description implies a single identifier is needed but adds no syntax details, format examples, or semantics beyond what the schema already provides, warranting the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description provides a specific verb ('Delete'), resource ('contact'), system context ('iCloud Contacts'), and scope modifier ('permanently'). It clearly distinguishes from siblings like create_contact, update_contact, and get_contact by specifying the destructive removal operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'permanently' implies this is for irreversible removal, but there is no explicit guidance on when to use this versus update_contact, or prerequisites like verifying the contact exists first. Usage is implied by the verb but not explicitly contextualized.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_emailC
Delete a single email
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Email UID | |
| mailbox | No | Mailbox name (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Critical omission: fails to disclose whether deletion is permanent or moves to trash (empty_trash sibling implies trash exists), whether the operation is reversible, or error behavior when UID doesn't exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely terse (3 words) which prevents waste, but for a destructive operation this is insufficiently front-loaded with safety warnings or behavioral context. The brevity costs necessary information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Inadequate for a destructive operation with no output schema. Missing critical safety context: no explanation of trash vs. permanent deletion, no return value description, and no error handling guidance despite the irreversible nature of the action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage (uid, mailbox), so baseline is adequate. Description implies single-item operation matching the uid parameter, but adds no syntax details, format examples, or behavioral context beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verb (Delete) and resource (email), and distinguishes from bulk_delete/bulk_delete_by_sender siblings by specifying 'single'. However, it does not differentiate from delete_older_than or clarify the deletion mechanism (permanent vs. trash) despite empty_trash being a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this versus bulk_delete for multiple emails, or versus delete_older_than for cleanup. No mention of prerequisites like email existence or mailbox selection strategy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_eventA
Delete a calendar event permanently from iCloud Calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| calendarId | Yes | Calendar ID containing the event | |
| eventId | Yes | Event ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the critical behavioral trait that deletion is 'permanent', which distinguishes it from trash/archive patterns. However, it lacks details about authorization requirements, side effects on event attendees, or reversibility windows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with zero waste. 'Permanently' efficiently conveys destructiveness without extra words, and 'iCloud Calendar' front-loads the domain context immediately. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward 2-parameter deletion tool without output schema, the description adequately covers the essential safety context (permanence) and system boundary (iCloud). Could be improved by noting where to obtain the IDs (e.g., from list_events), but sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear descriptions for calendarId and eventId. The description does not add parameter-specific guidance (such as ID formats or source locations), but with complete schema coverage, no additional compensation is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Delete' with resource 'calendar event' and specifies 'permanently from iCloud Calendar'. This clearly distinguishes it from sibling delete_email and distinguishes from update_event/create_event by explicitly stating the destructive action and target system.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'permanently' implies this is for irreversible removal, suggesting when to use it versus update_event, but lacks explicit when-to-use guidance or named alternatives (e.g., does not mention using update_event for modifications instead of deletion).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_mailboxA
Delete a mailbox/folder. The folder must be empty first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Mailbox path to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions the empty-folder constraint but omits other critical behavioral details: whether deletion is permanent, what error occurs if preconditions fail, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. Front-loaded with action, followed by constraint. Efficient and appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Minimum viable for a single-parameter tool. Covers the essential constraint but lacks safety warnings appropriate for a destructive operation, especially given absent annotations and no output schema to indicate success/failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage ('Mailbox path to delete'), so the structured data fully documents the parameter. Description adds no parameter-specific details, meeting baseline expectations for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific action (Delete) and resource (mailbox/folder) clearly. Distinguishes from sibling 'delete_email' by specifying folder-level operation, though could explicitly contrast with 'empty_trash' or 'bulk_delete'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides critical prerequisite ('folder must be empty first'), which implies when the tool will fail. However, lacks explicit guidance on when to use versus alternatives like 'empty_trash' or how to handle non-empty folders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_older_thanC
Delete all emails older than a certain number of days
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | Delete emails older than this many days | |
| mailbox | No | Mailbox (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but provides minimal safety context. It does not specify whether deleted emails move to trash (recoverable) or are permanently deleted, nor does it mention performance implications of bulk operations or verification requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence of nine words with no redundancy. However, extreme brevity comes at the cost of omitting critical safety and behavioral context that a destructive bulk operation demands.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive bulk operation with no annotations and no output schema, the description is inadequate. It fails to explain return values (success confirmation, count deleted), reversibility (trash vs permanent), or preconditions (permissions, mailbox existence validation).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'days' and 'mailbox' parameters fully documented in the schema. The description references the date threshold ('older than a certain number of days') which aligns with the schema, meeting the baseline expectation when structured documentation is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Delete), resource (emails), and scope (older than X days). However, it fails to distinguish from the sibling tool 'archive_older_than', which has similar parameters but fundamentally different outcomes (preservation vs removal).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus 'archive_older_than' (for non-destructive cleanup) or versus 'bulk_delete' (which may use different selection criteria). Given the irreversible nature of deletion, this lack of comparative guidance is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ruleB
Delete a saved rule by name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Rule name to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Delete' implies destruction, the description fails to mention whether this operation is permanent, what happens if the rule doesn't exist, or whether it affects emails already processed by the rule.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at six words with no filler. It front-loads the action ('Delete') and immediately specifies the scope ('a saved rule by name'), making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (single string parameter, no output schema, no nested objects), the description is minimally sufficient. However, for a destructive operation with no annotations, it should include safety warnings or error condition notes to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the 'name' parameter fully documented as 'Rule name to delete'. The description mentions 'by name' which aligns with the schema, but adds no additional semantic context (e.g., case sensitivity, whether it's the display name or internal ID) beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description provides a clear verb ('Delete') and resource ('saved rule') and distinguishes from siblings like 'run_rule' or 'create_rule' through the action word. However, it doesn't explicitly clarify what constitutes a 'rule' in this email context or mention how it differs from bulk deletion tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no explicit guidance on when to use this tool versus alternatives like 'run_rule' or 'create_rule', nor does it mention prerequisites such as the rule needing to exist first. It states only what the tool does, not when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
empty_trashA
Permanently delete all emails in the trash (Deleted Messages or Trash folder). Use dryRun: true to preview first.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | If true, preview how many emails would be deleted without deleting |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full disclosure burden. Successfully communicates destructive nature ('Permanently delete') and safety mechanism (dryRun preview). Missing return value description and rate limit details, but 'permanently' adequately warns of irreversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. Front-loaded with critical behavioral info ('Permanently delete') immediately signaling danger, followed by safety instruction. Perfect density for the tool complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with 100% schema coverage and no output schema, the description is complete. Covers scope (trash folder), destructive nature, and safety mechanism. No significant gaps given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage (baseline 3). Description adds value beyond schema by prescribing usage semantics ('preview first') rather than just defining the boolean, helping the agent understand WHEN to set dryRun=true.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb ('Permanently delete') + resource ('emails in the trash') + scope ('all'). Clarifies folder name variations ('Deleted Messages or Trash folder') to distinguish from other mailboxes, effectively differentiating from sibling deletion tools like bulk_delete 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit safety guidance ('Use dryRun: true to preview first') which establishes a recommended workflow before destructive execution. Lacks explicit comparison to siblings (e.g., when to use this vs bulk_delete), but the trash-specific scope makes usage context largely self-evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flag_emailA
Flag or unflag a single email
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Email UID | |
| flagged | Yes | True to flag, false to unflag | |
| mailbox | No | Mailbox name (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully indicates the bidirectional nature of the operation (both flagging and unflagging), but omits details about idempotency, error handling for invalid UIDs, or whether the operation is persistent/write-based.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It front-loads the core action and scope immediately, with no filler words or redundant explanations that duplicate the schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (3 simple parameters, 100% schema coverage) and lack of output schema, the description provides sufficient context for agent selection. It appropriately omits return value documentation (not required without output schema) but could be improved by noting the state-changing nature of the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage (uid, flagged, mailbox are all well-documented). Since the schema comprehensively defines parameter semantics including the default mailbox behavior, the description appropriately adds no redundant parameter details, meeting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description provides specific verbs ('Flag or unflag') and resource ('single email'), clearly distinguishing it from sibling tools like 'bulk_flag' by emphasizing the singular scope. It loses one point for not clarifying what 'flag' means in this email context (e.g., starring vs. marking as important).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage constraints by specifying 'single email', suggesting it shouldn't be used for bulk operations. However, it fails to explicitly name 'bulk_flag' or 'bulk_flag_by_sender' as alternatives for multiple emails, leaving the agent to infer this from the naming convention alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forward_emailB
Forward an existing email to one or more recipients. Fetches the original email body and includes it as a forwarded message block. Supports plain text and/or HTML note.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UID of the email to forward | |
| to | Yes | Recipient(s) to forward to, comma-separated or array | |
| note | No | Optional plain text note to prepend before the forwarded message | |
| html | No | Optional HTML note to prepend (overrides plain text note for HTML rendering) | |
| mailbox | No | Mailbox containing the original email (default INBOX) | |
| cc | No | CC recipients |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool 'fetches the original email body' (read behavior) and formats it as a forwarded block, plus prepends notes. However, it omits whether the original email is marked as forwarded, if a copy appears in the sent folder, or what the return value indicates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences: purpose statement, mechanism explanation, and feature support. No redundancy or filler. Each sentence adds distinct value (what it does, how it handles content, what formatting it supports).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for basic invocation given the comprehensive schema, but gaps remain regarding side effects and return values due to the absence of annotations and output schema. Missing: whether the operation creates a sent item, marks the original, or returns the new message ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, establishing a baseline of 3. The description references 'one or more recipients' (to) and 'plain text and/or HTML note' (note/html), aligning with the schema but adding minimal semantic detail beyond what the schema already provides for the 6 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb ('Forward') and resource ('existing email'), with specific detail about including the original body as a forwarded block. Distinguishes implicitly from siblings like compose_email or reply_to_email by describing the forwarding mechanics, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus similar tools like reply_to_email or compose_email. Given the sibling list includes both reply_to_email and get_email, explicit differentiation (e.g., 'use this to send to new recipients rather than responding to the original sender') would prevent selection errors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attachmentA
Download a specific attachment from an email. Returns the file content as base64-encoded data. Use list_attachments first to get the partId. Maximum 20 MB per request; use offset+length for larger files.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Email UID | |
| partId | Yes | IMAP body part ID from list_attachments (e.g. "2", "1.2") | |
| mailbox | No | Mailbox name (default INBOX) | |
| offset | No | Byte offset for paginated download (returns raw encoded bytes, not decoded) | |
| length | No | Max bytes to return for paginated download (default 20 MB) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and successfully discloses output format ('base64-encoded data'), size constraints ('Maximum 20 MB'), and pagination behavior. Lacks explicit read-only/safety declaration but 'download' implies non-destructive access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with zero waste: purpose, return format, prerequisite workflow, and operational limits. Information is front-loaded and logically ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive given no annotations or output schema. Covers return value format, prerequisites, and pagination strategy. Would be a 5 with explicit mention of error handling or idempotency, but adequately complete for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). Description adds valuable semantic context: linking partId to the list_attachments prerequisite and explaining that offset+length work together for paginated downloads of large files.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Download') and resource ('attachment'), clearly distinguishing this from sibling 'list_attachments' by implying content retrieval vs. metadata listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the prerequisite workflow ('Use list_attachments first to get the partId') and provides clear pagination guidance for large files ('use offset+length for larger files'), covering both normal and edge-case usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactA
Get full details for a specific contact by ID. Use list_contacts or search_contacts to find a contactId.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | Contact ID (UUID from list_contacts or search_contacts) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. The verb 'Get' implies a read-only operation (safe, non-destructive), but lacks details on error behavior (e.g., invalid ID), rate limits, or specific return structure beyond 'full details'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: first states purpose, second provides prerequisite workflow. Front-loaded with the core action and appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter retrieval tool with complete schema coverage, the description is functionally complete. It omits specific return value structure (no output schema exists), but 'full details' provides sufficient context for an agent to infer this returns a contact object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage with contactId defined as a UUID from sibling tools. Description reinforces this workflow ('by ID') but does not add syntax details, validation rules, or format constraints beyond what the schema already provides. Baseline 3 appropriate given complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Get' with resource 'contact' and scope 'by ID'. It clearly distinguishes from sibling tools 'list_contacts' and 'search_contacts' by implying this is for direct ID lookup versus browsing/searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use alternatives: 'Use list_contacts or search_contacts to find a contactId.' This provides clear workflow guidance (find ID first, then get details) and explicitly names sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_digest_stateA
Get the current inbox digest state โ last run timestamp, processed email UIDs (to skip on next run), pending actions, and per-sender skip counts for smart unsubscribe.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It successfully discloses behavioral semantics by explaining what the data represents (UIDs for skipping, skip counts for 'smart unsubscribe'), though it omits explicit read-only declaration or performance characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single efficient sentence with em-dash separated clauses. Front-loaded with action verb, followed by parenthetical elaboration. Zero waste; every clause explains a specific component of the returned state.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but description fully compensates by enumerating the specific fields and their semantic purposes (e.g., 'to skip on next run'). Adequate for a parameter-less state retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0 parameters with 100% coverage. Per rubric, 0 params = baseline 4. Description appropriately does not mention parameters since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Get') + resource ('inbox digest state') with clear differentiation from siblings like get_inbox_summary via detailed field enumeration (last run timestamp, processed UIDs, pending actions, per-sender skip counts).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context about what data is returned and implies workflow (processed UIDs 'to skip on next run'), but does not explicitly name alternatives (e.g., 'use update_digest_state to modify') or explicit when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emailB
Get full content of a specific email by UID
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Email UID | |
| mailbox | No | Mailbox name (default INBOX) | |
| maxChars | No | Max body characters to return (default 8000, max 50000) | |
| includeHeaders | No | If true, include a headers object with to/cc/replyTo/messageId/inReplyTo/references/listUnsubscribe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but fails to state whether this marks the email as read, what happens if the UID doesn't exist, or the return format structure. 'Full content' hints at scope but safety profile and side effects are unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, nine words, front-loaded with action verb. No filler or redundant phrases. Given the high schema coverage, this efficient length is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Minimum viable for a 4-parameter retrieval tool. While the schema covers parameters well, the absence of output schema and annotations leaves gaps regarding return structure and operational safety that the description does not fill. Adequate but could specify error handling or return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, documenting all four parameters (uid, mailbox, maxChars, includeHeaders) adequately. The description mentions 'by UID' reinforcing the required parameter, but adds no semantic detail beyond the schema regarding character limits or header structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get'), resource ('full content of a specific email'), and lookup method ('by UID'), distinguishing it from bulk retrieval siblings like get_emails_by_date_range. However, it does not explicitly differentiate from get_email_raw (likely returns MIME source) or clarify if this returns structured data vs. raw content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this tool versus alternatives like get_email_raw, get_thread, or read_inbox. Does not mention prerequisites such as needing a valid UID from list_mailboxes or search_emails first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_email_rawA
Get the raw RFC 2822 source of an email (full headers + MIME body) as base64-encoded data. Useful for debugging or export. Capped at 1 MB.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Email UID | |
| mailbox | No | Mailbox name (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses critical behavioral traits: base64 encoding format, inclusion of 'full headers + MIME body', and 'Capped at 1 MB' size limitation. Could improve by stating error behavior when limit exceeded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: core action (sentence 1), use case guidance (sentence 2), limitation warning (sentence 3). Front-loaded with the most critical information (RFC 2822 source).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter fetch operation without output schema, description adequately covers return format, size constraints, and intended use cases. Missing only explicit read-only safety declaration, though implied by 'Get'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% ('Email UID', 'Mailbox name'), so baseline is 3. Description does not add parameter semantics beyond what schema provides, but none are needed given complete schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Get' + precise resource 'raw RFC 2822 source' + format 'base64-encoded' clearly distinguishes from sibling 'get_email' by emphasizing raw headers/MIME body vs parsed content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States 'Useful for debugging or export' providing clear contextual guidance on when to use this over standard email retrieval. Lacks explicit 'when not to use' or named alternative, but the niche use case is clearly signaled.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emails_by_date_rangeC
Get emails between two dates
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | Yes | Start date (YYYY-MM-DD) | |
| endDate | Yes | End date (YYYY-MM-DD) | |
| mailbox | No | Mailbox (default INBOX) | |
| limit | No | Max results (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure, yet it fails to indicate whether this is a read-only operation, what data structure is returned, or how pagination/limiting behaves despite the presence of a limit parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is efficiently worded without redundancy and places the core action at the front; however, it is arguably too brief given the tool's complexity and lack of supporting annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 parameters, no output schema, no annotations, and numerous sibling retrieval tools, the 5-word description is insufficiently complete to support confident tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage for all 4 parameters (startDate, endDate, mailbox, limit), so the schema carries the semantic weight; the description adds no additional parameter context beyond implying date-range filtering.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action ('Get') and resource ('emails') with specific scope ('between two dates'), but fails to differentiate from siblings like search_emails or get_emails_by_sender that could overlap in functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives such as search_emails (which supports complex filtering) or get_emails_by_sender, nor any prerequisites or constraints beyond the date range.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emails_by_senderC
Get all emails from a specific sender
| Name | Required | Description | Default |
|---|---|---|---|
| sender | Yes | Sender email address or domain | |
| mailbox | No | Mailbox to search (default INBOX) | |
| limit | No | Max results to show (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure burden. It fails to clarify whether results include full message bodies or just metadata (given 'get_email' exists for individual retrieval), pagination behavior, or the conflict between 'all' and the limit parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single-sentence structure is appropriately brief, but the use of 'all' is misleading given the limit parameter, wasting the limited descriptive real estate on inaccurate scope definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 50+ sibling tools including multiple search/retrieval variants and no output schema, the description is insufficient. It should clarify return format (list of IDs vs full objects), distinguish from 'search_emails', and explain the domain-search capability implied by the parameter schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage (all 3 parameters documented), the baseline is 3. The description adds no additional parameter context (e.g., that 'sender' accepts domains per the schema description, or that 'limit' defaults to 10).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the core action (Get) and filter (specific sender), but claims 'all' emails which contradicts the default limit of 10 in the schema. It also fails to distinguish from the sibling 'search_emails' tool, which likely overlaps in functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this versus 'search_emails' or 'get_emails_by_date_range'. Does not mention prerequisites like mailbox access permissions or whether sender accepts domains (as hinted in parameter schema).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventA
Get full details of a specific calendar event by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| calendarId | Yes | Calendar ID containing the event | |
| eventId | Yes | Event ID (UUID from list_events or search_events) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. 'Get' implies a read-only operation and 'full details' suggests comprehensive data return, but it lacks disclosure of error handling (e.g., event not found) or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of appropriate length with no redundant words. Information is front-loaded with the action ('Get full details') immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter retrieval tool with complete schema coverage, the description adequately covers the tool's purpose and scope. Minor gap regarding error behavior keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the structured fields adequately document parameters. The description does not add parameter semantics, but the baseline 3 is appropriate given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Get' with resource 'calendar event' and scope 'by its ID', clearly distinguishing it from sibling tools like list_events, search_events, create_event, and delete_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by its ID' implies usage when a specific identifier is known, likely from list_events or search_events (referenced in schema), but lacks explicit when-to-use guidance or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inbox_summaryC
Get a summary of a mailbox including total, unread, and recent email counts
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox | No | Mailbox name (default INBOX) | |
| account | No | Account name to use (e.g. 'icloud', 'gmail'). Defaults to first configured account. Use list_accounts to see available accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Get' implies a read operation, the description does not explicitly confirm this is read-only, safe, or without side effects. It also fails to define what constitutes 'recent' (time window) or mention any rate limits or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that places the action verb at the beginning. It avoids redundancy with the schema, though its brevity contributes to the lack of differentiation from sibling tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 parameters, no nested objects, no output schema), the description minimally suffices by indicating the return value structure. However, it lacks completeness regarding the tool's relationship to 'get_mailbox_summary' and does not clarify behavioral safety in the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters ('mailbox' and 'account'), including default values. The description does not add semantic meaning beyond what the schema already provides, which warrants the baseline score of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('Get a summary') and return value ('total, unread, and recent email counts'), but creates ambiguity with the sibling tool 'get_mailbox_summary'. It fails to clarify whether this tool is inbox-specific (as the name suggests) or works for any mailbox (as the description and parameter suggest), leaving the agent uncertain about which tool to select.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_mailbox_summary', 'count_emails', or 'read_inbox'. The description does not mention prerequisites or conditions for use, despite the existence of functionally similar sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mailbox_summaryA
Get total, unread, and recent email counts for any specific mailbox/folder
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox | Yes | Mailbox path to summarize (e.g. Newsletters, Archive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. States it retrieves counts but fails to define what 'recent' means (time window?), disclose performance characteristics, or describe the return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single efficient sentence front-loaded with specific metrics (total, unread, recent). Zero redundancy; every word specifies scope or resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple single-parameter read operation. Minor gap: undefined 'recent' metric and no output schema, though the three count types are enumerated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the 'mailbox' parameter well-documented ('Mailbox path to summarize'). Description mentions 'mailbox/folder' but adds no semantic details beyond the schema (e.g., case sensitivity, path separators, validation rules).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Get' with clear resource 'mailbox/folder' and precise scope 'total, unread, and recent email counts'. Effectively distinguishes from sibling 'get_inbox_summary' by emphasizing 'any specific' folder capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for arbitrary folders via 'any specific mailbox/folder', differentiating it from inbox-specific tools, but lacks explicit when-to-use guidance or named alternatives like 'count_emails' or 'get_inbox_summary'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_move_statusA
Check the status of the current or most recent bulk move operation. Shows progress, chunk statuses, and any failures. Call this to monitor a long-running move or inspect a failed one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure burden. It effectively communicates key traits: it returns 'progress, chunk statuses, and any failures', operates on 'current or most recent' operation (statefulness), and handles 'long-running' async operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences: first states core purpose, second describes return data, third provides usage guidance. Every sentence earns its place with zero redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description adequately explains what information is returned (progress, chunks, failures). Given zero parameters and the specific monitoring purpose, the description provides sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0 parameters, which per guidelines sets baseline 4. The description correctly implies no inputs are required by focusing entirely on the operation's behavior and output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Check' with resource 'status of the current or most recent bulk move operation', clearly distinguishing it from sibling tools like 'bulk_move' (which initiates moves) and 'abandon_move' (which cancels them).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance ('Call this to monitor a long-running move or inspect a failed one'), clearly indicating this is for polling/inspection rather than initiation. Does not explicitly name alternative tools, though the context makes the distinction clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_storage_reportA
Estimate storage usage by size bucket and identify top senders by email size. Uses SEARCH LARGER queries for bucketing and samples large emails for sender analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox | No | Mailbox to analyze (default INBOX) | |
| sampleSize | No | Max number of large emails to sample for sender analysis (default 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, description carries the full burden and successfully discloses implementation methodology: it uses 'SEARCH LARGER queries' for bucketing and performs 'sampling' (not exhaustive analysis). Does not mention performance costs or read-only nature, though implied by 'Estimate' and 'get' prefix.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. First sentence front-loads the value proposition (what it does), second sentence explains methodology (how it works). Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter analysis tool with no output schema, the description adequately explains what the report contains (size buckets, top senders by size). Could be improved by noting that results are estimates/samples, but sufficient for tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, establishing baseline 3. Description adds value by connecting sampleSize to 'sender analysis' and implying mailbox scopes the storage analysis, providing functional context beyond the schema's mechanical descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states specific actions: 'Estimate storage usage by size bucket' and 'identify top senders by email size.' Effectively distinguishes from sibling get_top_senders by specifying size-based analysis rather than frequency-based analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides implicit context that this is for storage analysis, but lacks explicit when-to-use guidance versus alternatives like get_mailbox_summary or search_emails. Does not specify prerequisites or when to prefer this over get_top_senders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_threadA
Find all emails in the same thread as a given email. Uses subject matching + References/In-Reply-To header filtering. Note: iCloud does not support server-side threading โ results are approximate.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Email UID to find the thread for | |
| mailbox | No | Mailbox to search (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations provided, description carries full disclosure burden excellently. Reveals implementation algorithm (subject matching + References/In-Reply-To headers) and platform-specific limitation (iCloud lacks server-side threading, results approximate). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: sentence 1 states purpose, sentence 2 reveals implementation method, sentence 3 warns about platform limitation. Front-loaded with action and resource. Efficient density of information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, description adequately covers behavioral complexity (threading logic, header parsing, platform variance). Missing only minor details like return format or error handling for invalid UIDs, but explains the critical approximation caveat for iCloud users.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage (uid defined as 'Email UID to find the thread for', mailbox as 'Mailbox to search'). Description implies uid references the anchor email but doesn't add syntax, format constraints, or validation rules beyond schema. Baseline 3 appropriate given complete schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with specific verb 'Find' + resource 'emails' + scope 'in the same thread as a given email', clearly distinguishing from sibling get_email (single email retrieval) and search_emails (general criteria search). The threading concept is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides important technical context about iCloud limitations and result approximation, implying reliability concerns. However, lacks explicit guidance on when to use this versus search_emails or get_email for conversation reconstruction, and doesn't specify prerequisites like UID validity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_sendersA
Get the top senders by email count from a sample of the inbox
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox | No | Mailbox to analyze (default INBOX) | |
| sampleSize | No | Number of emails to sample (default 500) | |
| maxResults | No | Max number of senders/domains to return (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the sampling behavior (non-exhaustive analysis), but omits safety characteristics (read-only status), performance implications of large sample sizes, or return value structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is front-loaded with the action ('Get the top senders') and efficiently qualifies it with the metric ('by email count') and scope ('from a sample'). No redundant words or wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter analytical tool with simple types and no output schema, the description adequately covers the core functionality and key limitation (sampling). It appropriately relies on the schema for parameter details, though explicit read-only assurance would improve completeness given the lack of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, establishing a baseline of 3. The description provides context that 'sampleSize' relates to inbox sampling, but does not add syntax details, valid ranges, or semantic relationships beyond what the schema property descriptions already provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves sender frequency data ('top senders by email count') and specifies the methodology ('from a sample'). However, it does not explicitly distinguish from sibling tool 'get_unread_senders', which likely performs similar ranking but only on unread messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mention of 'sample' implicitly signals this is for approximate/quick analysis rather than exhaustive reporting, which helps usage context. However, there is no explicit guidance on when to choose this over 'get_emails_by_sender' or 'search_emails' for sender analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unread_sendersC
Get top senders of unread emails
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox | No | Mailbox to analyze (default INBOX) | |
| sampleSize | No | Number of emails to sample (default 500) | |
| maxResults | No | Max number of senders to return (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but fails to state whether this is read-only (implied by 'Get' but not explicit), what data structure is returned, or how 'top' is calculated. No mention of pagination or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely brief (6 words) and front-loaded with no filler. While not wasteful, the brevity contributes to under-specification given the lack of annotations and output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and annotations, the description should explain the return format (list of sender strings? objects with counts?) and ranking logic. It provides neither, leaving significant gaps for an agent attempting to interpret results or handle errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema adequately documents all three parameters (mailbox, sampleSize, maxResults). The description mentions 'top senders' which loosely maps to maxResults, but doesn't add syntax details or usage guidance beyond the schema definitions. Baseline score appropriate given schema completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Get') and resource ('senders of unread emails'), and the 'unread' qualifier distinguishes it from sibling tool 'get_top_senders'. However, it doesn't define what 'top' means (frequency, recency, etc.), leaving the ranking criteria ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this versus 'get_top_senders', 'get_inbox_summary', or 'search_emails'. No mention of prerequisites, performance implications of the sampleSize parameter, or when bulk operations might be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unsubscribe_infoA
Get the List-Unsubscribe header from an email, parsed into email and URL components. Useful for AI-assisted inbox cleanup.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Email UID | |
| mailbox | No | Mailbox name (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the parsing behavior (splitting into email/URL components) which explains output structure, but fails to declare safety properties (read-only), error behavior when header is missing, or whether the operation is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences totaling 17 words. First sentence front-loads the core function; second provides use-case context. No redundancy or filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with no output schema, the description partially compensates by describing the return structure ('parsed into email and URL components'). However, it omits behavior when the header is absent. Reasonably complete for low-complexity tool but could specify return format more explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with 'uid' and 'mailbox' already well-described in the input schema. Description adds no additional parameter semantics (e.g., UID format, mailbox path conventions), so baseline 3 is appropriate per scoring rules for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description provides specific verb ('Get'), exact resource ('List-Unsubscribe header'), and processing detail ('parsed into email and URL components'). Clearly distinguishes from sibling 'get_email' by specifying header-specific extraction rather than full message retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides implied usage context ('Useful for AI-assisted inbox cleanup') suggesting when to use it, but lacks explicit when-not guidance or comparison to alternatives like using 'get_email' and parsing manually. No mention of prerequisites like email UID availability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsA
List all configured email accounts (names and IMAP hosts). Use the account name in any mail tool's account parameter.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full disclosure burden. Mentions return content (names and hosts) but omits safety profile (read-only), error handling, return format structure, or idempotency characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: first states purpose, second states usage context. Front-loaded with action verb and immediately useful. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple parameter-less tool. Mentions what data is returned despite lack of output schema. Could improve by specifying return format (array vs object) or empty-state behavior, but sufficient for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters present (empty schema). Per rubric, baseline is 4 for zero-parameter tools. Description appropriately focuses on return value usage rather than nonexistent inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'List' with clear resource 'configured email accounts' and specifies returned fields (names and IMAP hosts). Distinct from sibling list_mailboxes by focusing on account configuration rather than folders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states to 'Use the account name in any mail tool's account parameter,' establishing clear workflow relationship to sibling tools. Lacks explicit 'when not to use' exclusions, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_attachmentsA
List all attachments in an email without downloading them. Returns filename, MIME type, size, and IMAP part ID for each attachment.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Email UID | |
| mailbox | No | Mailbox name (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and effectively discloses the return structure (filename, MIME type, size, IMAP part ID) and the non-destructive, read-only nature of the operation. It could improve by mentioning behavior when no attachments exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficiently structured sentences with zero waste: first establishes the action and key behavioral constraint (no download), second specifies return fields. Information is front-loaded and dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description appropriately enumerates the returned fields for each attachment. For a 2-parameter tool with complete schema coverage, this is sufficient, though explicitly stating it returns an array would be ideal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage ('Email UID', 'Mailbox name'), meeting the baseline. The description adds context by stating these parameters identify 'an email' but does not elaborate on UID format or mailbox naming conventions beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action (List) and resource (attachments), and distinguishes from sibling tool 'get_attachment' by emphasizing 'without downloading them', clarifying this is a metadata-only operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without downloading them' implicitly guides the agent to use this for metadata inspection versus 'get_attachment' for content retrieval. However, it lacks explicit 'when not to use' guidance or prerequisites (e.g., requiring the email UID to exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_calendarsA
List all calendars in iCloud Calendar (e.g. Personal, Work, LSAT PREP). Returns calendarId, name, and supported event types.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses return fields (calendarId, name, supported event types) which compensates for the missing output schema. However, it omits safety characteristics (read-only), idempotency, or rate limiting that would help an agent understand operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficiently structured sentences with zero waste. First sentence establishes scope with examples; second sentence discloses return values. Information is front-loaded and appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (no parameters, simple list operation) and absence of output schema, the description adequately covers return values. It could be improved by noting that no authentication parameters are required (since iCloud auth is implicit), but this is sufficient for agent selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema contains zero parameters. According to scoring rules, 0 parameters establishes a baseline score of 4. The description does not need to compensate for parameter documentation gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'List' with resource 'calendars' and context 'iCloud Calendar'. Examples (Personal, Work, LSAT PREP) clarify scope. It clearly distinguishes from sibling 'list_events' by targeting calendar containers rather than individual events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the return value disclosure (calendarId), suggesting it's for discovering available calendars. However, it lacks explicit guidance on when to use this versus 'list_events' or prerequisites like 'use this first to get calendarIds before creating events'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsA
List contacts from iCloud Contacts. Returns names, phones, emails, and other fields.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max contacts to return (default 50) | |
| offset | No | Skip this many contacts (default 0, for pagination) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of disclosure and successfully specifies return fields (names, phones, emails) compensating for the missing output schema. However, it omits explicit safety declarations (read-only nature) or pagination behavior details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: first establishes scope and source (iCloud Contacts), second discloses return payload structure. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with no output schema, the description adequately covers the data returned and source system. Could be improved by noting this retrieves all contacts (subject to pagination) versus filtered results, but sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage for both parameters (limit and offset), the schema fully documents the pagination interface. The description adds no supplemental parameter semantics, meeting the baseline for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'List' with resource 'contacts from iCloud Contacts', clearly distinguishing it from sibling tools like get_contact (singular retrieval), search_contacts (filtered query), and mutation tools like create_contact/delete_contact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb 'List' suggesting bulk enumeration versus siblings like 'search' or 'get', but provides no explicit guidance on when to prefer this over search_contacts or whether it returns all contacts versus a default subset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsA
List events in a specific iCloud calendar within a date range. Use list_calendars first to get a calendarId.
| Name | Required | Description | Default |
|---|---|---|---|
| calendarId | Yes | Calendar ID from list_calendars | |
| since | No | Start of range (YYYY-MM-DD, default: 30 days ago) | |
| before | No | End of range (YYYY-MM-DD, default: 30 days ahead) | |
| limit | No | Max events to return (default 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full disclosure burden. States read operation ('List') and date range scoping, but omits output format details, pagination behavior, or what occurs when no events match. Adequate but minimal 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: first states purpose, second states prerequisite. Perfectly front-loaded and appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter listing tool with complete schema documentation, description is sufficiently complete. The prerequisite instruction is critical for successful invocation. Minor gap: does not describe return value structure (array of event objects?), though absence of output schema makes this less strictly required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, establishing baseline of 3. Description adds valuable workflow context for calendarId parameter ('from list_calendars'), but does not augment understanding of date range parameters (since/before) or limit beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'List' with clear resource 'events in a specific iCloud calendar' and scope 'within a date range'. Effectively distinguishes from sibling operations like create_event, delete_event, and get_event (single retrieval).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit prerequisite 'Use list_calendars first to get a calendarId', establishing clear workflow. Lacks explicit differentiation from search_events (text search alternative) or guidance on when to use date range vs. other filtering methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mailboxesA
List all mailboxes/folders in iCloud Mail
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It clearly indicates this is a read operation by using 'List', but lacks disclosure of what specific data is returned (e.g., folder names, IDs, hierarchy levels, message counts) since no output schema exists to supplement this information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It is front-loaded with the action verb and immediately communicates scope, making it perfectly sized for a parameterless utility function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no input parameters) and lack of output schema, the description adequately covers the core functionality. It could be improved by briefly describing the return structure (e.g., 'returns folder names and paths'), but remains complete enough for agent selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema contains zero parameters. Per the evaluation rules, 0 parameters establishes a baseline score of 4, as there are no parameter semantics to clarify beyond the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description provides a specific verb ('List'), clear resource ('mailboxes/folders'), and scope ('all...in iCloud Mail'). It effectively distinguishes from siblings like create_mailbox, delete_mailbox, and get_mailbox_summary by emphasizing the enumeration aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While 'List all' implies this is for retrieving folder structure enumeration, there is no explicit guidance on when to use this versus get_mailbox_summary (which likely returns statistics) or other mailbox-related operations. Usage is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rulesA
List all saved rules with their filters, actions, and run history.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It partially compensates by describing the return content (filters, actions, run history), but omits explicit safety declarations (read-only status), pagination behavior, or permission requirements that would be essential for a complete behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. Every phrase earns its place: 'List all saved rules' establishes the operation, while 'with their filters, actions, and run history' provides necessary specificity about the data richness without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no annotations, and no output schema, the description adequately compensates by hinting at the return structure through the field enumeration (filters, actions, run history). However, it could be improved by noting the read-only nature or pagination limits given the lack of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema contains zero parameters, which establishes a baseline score of 4 per the scoring rules. The description appropriately does not mention parameters since none exist, and the schema coverage is 100% (trivially, as there are no parameters to document).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description provides a specific verb ('List') and resource ('saved rules'), and distinguishes from siblings by specifying the detailed scope includes 'filters, actions, and run history' rather than just rule names or IDs. This clearly differentiates it from create_rule, delete_rule, and run_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description implies this is for inspection/auditing of existing rules (vs. creating or running them), it provides no explicit when-to-use guidance or mention of alternatives like create_rule. The agent must infer usage context from the verb 'List' and the detailed field descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_clearA
Clear the session log and start fresh. Use this at the start of a new task.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'Clear' implies a destructive action, the description omits explicit warnings about data loss, irreversibility, or what happens to existing log entries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of exactly two sentences with zero waste: the first defines the action, and the second defines the usage context. It is appropriately front-loaded and sized for a simple parameter-less tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description adequately covers its purpose and usage context. It is slightly incomplete regarding the destructive implications of clearing logs, which would be helpful given the absence of destructiveHint annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema contains zero parameters. Per the scoring rules, 0 params equals a baseline score of 4, as there are no parameter semantics to elaborate upon.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Clear') with a specific resource ('the session log') and distinguishes itself from siblings 'log_read' and 'log_write' by describing a destructive reset action rather than read/write operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence ('Use this at the start of a new task') provides explicit temporal guidance for when to invoke the tool. It lacks explicit 'when-not-to-use' guidance or named alternatives (e.g., contrasting with log_write for appending), preventing a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_readA
Read the current session log to see what has been done so far.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It mentions 'current session' implying scope/persistence behavior, but fails to disclose safety characteristics (idempotent?), return format, log size limits, or whether the log includes timestamps/agent actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the action ('Read'). Every word serves a purpose with no redundancy or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters) and lack of output schema, the description provides minimum viable context. However, it omits the return value structure (string, array, or object?), which would be essential for an agent to use the output effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage (vacuously), meeting the baseline expectation for simple tools. No additional parameter context is required or provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('current session log') to clearly define the tool's function. It effectively distinguishes this from siblings like log_write and log_clear by specifying the read-only nature of the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'to see what has been done so far' provides implied usage context (use when checking session history), but lacks explicit when-to-use guidance, exclusions, or comparisons to alternatives like log_write.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_writeA
Write a step to the session log. Use this to record your plan before starting, and after each completed step. Helps maintain progress across long operations.
| Name | Required | Description | Default |
|---|---|---|---|
| step | Yes | Description of what you are doing or just completed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full disclosure burden. It explains the purpose (maintaining progress across long operations) but omits mechanical details like whether entries append or overwrite, storage limits, persistence duration, or retrieval methods. Adequate but not rich in behavioral specifics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly constructed sentences with zero redundancy: (1) functional definition, (2) usage timing, (3) value proposition. Information density is high with no filler content. Well front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Appropriate for a single-parameter tool with no output schema. The description covers the operational lifecycle and intent. Could be improved by referencing the sibling log_read tool for retrieval or noting persistence characteristics, but sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds valuable semantic context beyond the schema's generic 'Description of what you are doing' by specifying content types: 'plan before starting' versus 'completed step,' guiding the agent on what content to provide in the step parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific action 'Write a step to the session log,' clearly identifying the verb (write) and resource (session log). It effectively distinguishes from siblings log_read (reading) and log_clear (clearing) through this explicit action statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit temporal guidance: 'Use this to record your plan before starting, and after each completed step.' This establishes clear when-to-use context for long-running operations. Lacks explicit negative guidance (when not to use) or direct sibling comparison, but the workflow pattern is clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_as_readA
Mark a single email as read or unread
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Email UID | |
| seen | Yes | True to mark as read, false for unread | |
| mailbox | No | Mailbox name (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It indicates a state mutation ('mark') but does not disclose idempotency, error handling for invalid UIDs, or whether the operation is destructive. It confirms the toggle nature (read or unread) which is the essential behavioral trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient 8-word sentence with no filler. It is front-loaded with the action verb and immediately qualifies scope ('single') and capability ('read or unread'), earning every word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity of a single-item state toggle and 100% input schema coverage, the description is functionally complete. The absence of an output schema is acceptable as the operation likely returns simple success/failure, though explicit confirmation of the return type would improve completeness further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (uid, seen, mailbox) fully documented in the schema. The description adds no additional parameter semantics beyond what the schema provides, meeting the baseline expectation for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Mark' with clear resource 'single email' and states both possible states ('read or unread'). The word 'single' effectively distinguishes it from the 'bulk_mark_read' and 'bulk_mark_unread' siblings without explicitly naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the 'single' keyword (suggesting individual vs. batch operations) but provides no explicit guidance on when to choose this over 'bulk_mark_read'/'bulk_mark_unread' or other alternatives. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_older_than_readA
Mark all unread emails older than N days as read. Useful for bulk triage of a cluttered inbox.
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | Mark emails older than this many days as read | |
| mailbox | No | Mailbox (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure; it specifies the operation affects 'all unread emails' (indicating scope), but omits reversibility details, performance implications for large operations, and return value information since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two-sentence structure efficiently conveys the core functionality and specific use case without redundancy. Every phrase earns its placeโthe first defines the operation mechanics while the second provides the value proposition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description is incomplete regarding what the tool returns (count of affected emails, success boolean, etc.). For a bulk mutation operation affecting potentially thousands of emails, the absence of behavioral details like idempotency or error conditions creates a significant information gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage with both 'days' and 'mailbox' parameters fully self-documented. The description references 'N days' which aligns with the days parameter semantics, but adds no additional clarifying context (such as valid ranges or format) beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action (Mark...as read), target resource (unread emails), and filtering criteria (older than N days). It effectively distinguishes from siblings like `mark_as_read` (single email) and `archive_older_than` (different action) by specifying both the temporal scope and the state-change intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides implied usage context stating it is 'Useful for bulk triage of a cluttered inbox,' suggesting when to employ the tool. However, it fails to explicitly differentiate from similar age-based siblings like `archive_older_than` or `delete_older_than`, or clarify when marking read is preferable to archiving or deleting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_emailB
Move a single email to a different mailbox/folder
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Email UID | |
| targetMailbox | Yes | Destination mailbox path | |
| sourceMailbox | No | Source mailbox (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It states 'Move' but does not clarify whether the operation is atomic, whether the email's UID changes (critical for IMAP-style systems), what happens if the target mailbox doesn't exist, or what the return value indicates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It is appropriately front-loaded with the action verb. However, extreme brevity limits the information provided, preventing a score of 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with simple semantics, the description provides minimum viable context. However, given the lack of output schema and annotations, it should ideally disclose success/failure indicators, whether the sourceMailbox defaults to INBOX (mentioned in schema but not description), or error conditions. Adequate but with gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage (uid, targetMailbox, sourceMailbox all documented), the schema carries the semantic load. The description mentions 'mailbox/folder' which aligns with the parameter names but adds no additional syntax guidance, format details, or examples beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb ('Move') and resource ('single email', 'mailbox/folder') to clearly define the operation. The word 'single' effectively distinguishes this from sibling bulk operations (bulk_move, bulk_move_by_sender, etc.), though it does not explicitly reference them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage scope through 'single email' (suggesting this is for individual items rather than bulk), but provides no explicit guidance on when to prefer this over bulk_move for multiple emails, or how it relates to abandon_move or get_move_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_inboxB
Read emails from iCloud inbox with pagination
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of emails per page (default 10) | |
| page | No | Page number (default 1) | |
| onlyUnread | No | Only fetch unread emails | |
| mailbox | No | Mailbox to read (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. While 'Read' implies read-only safety, the description lacks explicit behavioral disclosures (idempotency, return format, rate limits, error conditions) that annotations would typically cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 9 words, front-loaded with verb. No redundant phrases or unnecessary elaboration. Efficiently communicates core function without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for basic invocation given complete schema coverage, but gaps remain: no output schema hints (what fields returned?), no differentiation from 50+ siblings, and no iCloud-specific constraints or authentication notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage, establishing baseline of 3. Description mentions 'pagination' which aligns with limit/page parameters, and 'iCloud inbox' which maps to the mailbox parameter, but doesn't add syntax details, validation rules, or semantic relationships beyond the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb ('Read') and resource ('emails from iCloud inbox'). Mention of 'pagination' distinguishes from sibling 'get_email' (likely single fetch), though it doesn't differentiate from 'search_emails' or other bulk retrieval siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance or alternative suggestions. With numerous siblings (search_emails, get_emails_by_sender, get_emails_by_date_range), the description fails to specify when this general pagination approach is preferred over specialized queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_mailboxC
Rename an existing mailbox/folder
| Name | Required | Description | Default |
|---|---|---|---|
| oldName | Yes | Current mailbox path | |
| newName | Yes | New mailbox path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden for a mutation operation. It fails to specify whether emails/subfolders are preserved, if the operation is atomic, idempotency, or required permissions. Only implies the mailbox must exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and wastes no words, but given zero annotations and lack of output schema, it is arguably underspecified rather than optimally concise. No structural issues, but insufficient depth for the complexity of a mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool, the description meets minimum viability given good schema coverage, but gaps remain due to missing annotations and output schema. It omits what happens to contained emails, subfolder handling, and return value expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, establishing a baseline of 3. The description adds no supplemental context about path syntax, delimiters, case sensitivity, or validation rules beyond what the schema already provides for 'oldName' and 'newName'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Rename' and identifies the target resource as 'mailbox/folder'. It implicitly distinguishes from sibling tools create_mailbox and delete_mailbox by specifying 'existing', though it could further clarify path format or hierarchical behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like bulk_move or delete_mailbox/create_mailbox. No mention of prerequisites (e.g., target must not exist) or error conditions. Only the word 'existing' hints at pre-conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_emailA
Reply to an existing email. Automatically sets correct threading headers (In-Reply-To, References) and prefixes the subject with Re:. Supports plain text and/or HTML body.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UID of the email to reply to | |
| body | No | Plain text reply body | |
| html | No | HTML reply body (auto-generates plain text fallback if body not provided) | |
| mailbox | No | Mailbox containing the original email (default INBOX) | |
| replyAll | No | If true, reply to all recipients (To + Cc). Default false. | |
| cc | No | Additional CC recipients for this reply |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It successfully discloses specific behaviors (automatic threading header management, subject prefixing, body format support) but fails to indicate critical safety properties like whether the reply sends immediately or saves as draft, or if the operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of three tightly constructed sentences with zero waste. It front-loads the core purpose (reply), follows with technical implementation details (headers), and ends with format support, earning its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 6 parameters with complete schema coverage and lack of output schema, the description adequately covers the primary function. However, with no annotations to indicate side effects or safety, the description should have disclosed whether this sends immediately or creates a draft, marking it as minimally viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 6 parameters (uid, body, html, mailbox, replyAll, cc). The description mentions body format support but adds no semantic depth beyond what the schema already provides, meeting the baseline for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific action (Reply) and resource (existing email) clearly. It distinguishes from siblings like compose_email and forward_email by mentioning Re: prefixing and threading headers (In-Reply-To, References), which are specific to reply semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implicit context through mentions of threading headers and Re: prefixing, suggesting use for continuing conversations. However, it lacks explicit guidance on when to choose this over compose_email (new messages) or forward_email (forwarding), and states no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_all_rulesA
Run all saved rules in sequence. Use dryRun: true to preview all rules without making changes.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | If true, preview all rules without making changes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions 'in sequence' execution and dryRun behavior, but omits critical mutation details: side effects of rules, error handling (fail-fast vs. continue), idempotency, and synchronous/asynchronous nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. Front-loaded with purpose, followed immediately by usage hint. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a single-parameter tool, but given lack of output schema and annotations, description should ideally disclose success/failure signals or execution behavior. Sufficient for basic operation but leaves operational gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with dryRun fully documented. Description essentially repeats the schema definition ('preview all rules without making changes') without adding syntax details, examples, or edge cases. Baseline 3 appropriate when schema does heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verb (Run), resource (saved rules), scope (all), and execution pattern (in sequence). Clearly distinguishes from sibling 'run_rule' by emphasizing 'all' and sequential execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides specific guidance on using dryRun for previewing changes, but lacks explicit comparison to sibling 'run_rule' or guidance on when to use single vs. bulk execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_ruleB
Run a specific saved rule by name. Use dryRun: true to preview what would be affected without making changes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Rule name to run | |
| dryRun | No | If true, preview what would be affected without making changes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains dryRun behavior but omits critical details: whether the tool performs writes (likely given email-related siblings), what actions the rule executes (move/delete/flag), side effects, return values, or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of exactly two efficient sentences with no filler: the first establishes purpose immediately, and the second provides the most critical usage hint (dryRun). Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool likely performing mutations on email state (given the ecosystem of bulk_move, bulk_delete siblings), the description is incomplete. It lacks output format details, error handling, andโcriticallyโany description of what 'running' a rule actually does to the user's data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage ('Rule name to run' and dryRun explanation), establishing a baseline of 3. The description adds minimal semantic value beyond the schema, essentially restating the dryRun parameter description verbatim rather than adding context about valid rule names or usage patterns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb ('Run') and resource ('saved rule'), and distinguishes itself from siblings like 'create_rule', 'delete_rule', and 'run_all_rules' by emphasizing 'specific saved rule by name'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage guidance by explaining the dryRun parameter's purpose (previewing changes), but fails to explicitly differentiate when to use this single-rule tool versus the sibling 'run_all_rules' tool or state prerequisites (e.g., rule must exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_draftA
Save a draft email to your iCloud Drafts folder without sending it. Supports plain text, HTML, or both. The draft can be edited and sent later from Mail.app or iCloud.com.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Intended recipient(s), comma-separated or array | |
| subject | Yes | Email subject | |
| body | No | Plain text body (used as fallback when html is also provided) | |
| html | No | HTML body. If provided without body, plain text is auto-generated. If provided with body, saves multipart/alternative. | |
| cc | No | CC recipient(s) | |
| bcc | No | BCC recipient(s) | |
| inReplyTo | No | Message-ID of the email being replied to โ sets In-Reply-To header for threading | |
| references | No | Space-separated Message-IDs for the References header โ enables full thread linking | |
| account | No | Account whose Drafts folder to save into (e.g. "umd", "personal", "alt"). Defaults to iCloud. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and succeeds in explaining: the destination folder, the non-destructive nature (no sending), content format support (plain text/HTML/multipart), and persistence/editability lifecycle. Missing only error handling and return value details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: sentence 1 defines the core action and constraint, sentence 2 covers format capabilities, sentence 3 explains persistence. Front-loaded with the most critical information (save without send).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 100% schema coverage handling parameter semantics, the description adequately covers the tool's behavioral complexity (multipart email support, threading headers via inReplyTo/references). The only gap is the lack of output schema description, which would ideally clarify what identifier or confirmation is returned upon saving.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, establishing a baseline of 3. The description reinforces the content type parameters by mentioning 'plain text, HTML, or both' and implies the 'account' parameter's default ('iCloud Drafts folder'), but doesn't add syntax or validation details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Save') and resource ('draft email'), clarifies the destination ('iCloud Drafts folder'), and explicitly distinguishes from siblings by stating it operates 'without sending it'โcritical differentiation from the likely 'compose_email' sending tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use: when you want to save without sending and edit later from Mail.app or iCloud.com. The 'without sending it' phrase implicitly defines the alternative (immediate sending), though it doesn't explicitly name the sibling tool to use for that purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactsB
Search iCloud Contacts by name, email address, or phone number.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Text to search for (matched against name, email, and phone) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, yet description fails to disclose critical behavioral traits: whether search is case-sensitive, supports wildcards, returns partial matches, pagination limits, or what format results take. Does not confirm this is read-only/safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, efficient sentence with zero redundancy. Action and resource front-loaded; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a single-parameter tool with full schema coverage, but lacks mention of return value structure or empty-result behavior given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, establishing baseline 3. Description confirms the multi-field matching behavior (name/email/phone) but adds no syntax guidance (e.g., phone formatting) or examples beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Search' with clear resource 'iCloud Contacts' and explicit scope (name, email, phone). Effectively distinguishes from siblings like list_contacts (full enumeration) and get_contact (direct retrieval by ID).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this versus list_contacts (for bulk export) or get_contact (for direct ID lookup). No mention of performance implications or search limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_emailsB
Search emails by keyword or targeted field queries, with optional filters for date, read status, domain, and more
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search keyword (matches subject, sender, body โ use OR across all fields) | |
| subjectQuery | No | Match only in subject field | |
| bodyQuery | No | Match only in body field | |
| fromQuery | No | Match only in from/sender field | |
| queryMode | No | How to combine subjectQuery/bodyQuery/fromQuery: or (default) or and | |
| mailbox | No | Mailbox to search (default INBOX) | |
| limit | No | Max results (default 10) | |
| includeSnippet | No | If true, include a 200-char body preview snippet for each result (max 10 emails) | |
| sender | No | Match exact sender email address | |
| domain | No | Match any sender from this domain (e.g. substack.com) | |
| subject | No | Keyword to match in subject | |
| before | No | Only emails before this date (YYYY-MM-DD) | |
| since | No | Only emails since this date (YYYY-MM-DD) | |
| unread | No | True for unread only, false for read only | |
| flagged | No | True for flagged only, false for unflagged only | |
| larger | No | Only emails larger than this size in KB | |
| smaller | No | Only emails smaller than this size in KB | |
| hasAttachment | No | Only emails with attachments (client-side BODYSTRUCTURE scan โ must be combined with other filters that narrow results to under 500 emails first) | |
| account | No | Account name to use (e.g. 'icloud', 'gmail'). Defaults to first configured account. Use list_accounts to see available accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but fails to mention critical traits: pagination behavior, result ordering, rate limits, or the read-only nature of the operation. It does not describe the return format (absent output schema), and omits the performance constraint mentioned in the hasAttachment parameter description regarding the 500-email limit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficiently structured sentence that front-loads the primary action. Every phrase serves a purpose: defining the search modality (keyword vs. targeted) and exemplifying filter categories. Despite the tool's complexity (19 parameters), the description avoids redundancy and wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the schema provides complete parameter documentation, the description remains minimal given the tool's complexity and lack of output schema or annotations. The phrase 'and more' hand-waves over 12 additional filter parameters. For a search tool with nuanced query modes (OR/AND) and performance constraints, the description adequately introduces capabilities but leaves significant behavioral gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given 100% schema description coverage, the baseline score is 3. The description adds marginal value by categorizing parameters conceptually ('keyword', 'targeted field queries', 'date, read status, domain'), which helps map intent to parameters, but does not elaborate on syntax, format details, or the interaction between query and field-specific parameters beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the core action (Search) and resource (emails), distinguishing between 'keyword' (general) and 'targeted field queries' (specific fields). However, it does not explicitly differentiate this tool from sibling retrieval tools like get_emails_by_sender or get_emails_by_date_range, which could cause selection ambiguity given the large tool set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus the numerous alternatives (e.g., get_emails_by_sender, read_inbox, get_email). It omits prerequisites, performance considerations, and selection criteria, leaving the agent to infer based on parameter names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsA
Search for events by title/summary across all calendars within an optional date range.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Text to search for in event titles | |
| since | No | Start of search range (YYYY-MM-DD, default: 1 year ago) | |
| before | No | End of search range (YYYY-MM-DD, default: 1 year ahead) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully clarifies the scope ('across all calendars') and field restrictions ('title/summary' rather than full-text search). However, it omits critical behavioral details expected for a search tool: whether the search is case-insensitive, supports partial matching/wildcards, pagination behavior, and the read-only nature of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that is front-loaded with the action ('Search for events'). Every clause earns its place: 'by title/summary' defines the search fields, 'across all calendars' defines the scope, and 'within an optional date range' defines temporal constraints. No redundant or unnecessary text is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 simple parameters, no output schema, no annotations), the description adequately covers the primary functional aspects: what is searched (events), how (by title/summary text), where (all calendars), and temporal constraints. While missing details on matching logic and pagination, it provides sufficient context for an agent to understand the tool's basic contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, establishing a baseline of 3. The description adds minimal semantic value beyond the schema, though it does clarify that the date range is 'optional' (implied by defaults but not explicit in schema) and that the search covers 'summary' in addition to 'title' (potentially distinct fields). It does not provide additional context on query syntax or date format constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for events by title/summary text across all calendars within a date range. It effectively distinguishes from 'get_event' (which likely retrieves by ID) and 'list_events' (which presumably lists events from a specific calendar without text search) by specifying 'across all calendars' and the text-based search mechanism. However, it does not explicitly clarify when to choose this over filtering via list_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the verb 'Search' and the scope 'across all calendars,' suggesting use when looking for events by text across multiple calendars. However, it lacks explicit guidance on when to use this versus 'list_events' (e.g., 'use this when you need text search across all calendars instead of listing a specific calendar'). No alternatives or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_event_from_emailA
Fetch an email and return its content formatted for calendar event extraction. After calling this tool, extract the event fields from the returned content (pay attention to _dateAnchor for resolving relative dates like "Tuesday"), present a summary to the user for confirmation, then call create_event. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Email UID to extract event from | |
| mailbox | No | Mailbox containing the email (default INBOX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and succeeds in disclosing key behavioral traits: the special formatting for calendar extraction, the presence of _dateAnchor for date resolution, and the 'No API key required' authentication detail. Minor gap: does not explicitly declare read-only status (though implied by 'Fetch').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero waste. Front-loaded with purpose ('Fetch an email...'), followed by workflow instructions, and ending with authentication note. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description adequately compensates by explaining the return value's purpose (formatted for extraction) and highlighting the critical _dateAnchor field. It also names the follow-up tool (create_event). Could be improved by specifying the return format type (JSON vs text), but sufficient for agent operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (uid and mailbox are fully documented with types and descriptions). The description does not add parameter-specific semantics beyond what the schema already provides, which is appropriate given the complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Fetch') and resource ('email'), and immediately distinguishes this from sibling tools like get_email by specifying the content is 'formatted for calendar event extraction.' This clearly defines the unique scope and intent of the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit procedural guidance: extract fields from the returned content, pay attention to _dateAnchor for relative dates, present to user for confirmation, then call create_event. This establishes a clear workflow and implicitly distinguishes when to use this (calendar extraction workflow) versus standard email retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactA
Update an existing contact in iCloud Contacts. Only provided fields are changed; others are preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | Contact ID to update | |
| firstName | No | ||
| lastName | No | ||
| fullName | No | ||
| org | No | ||
| phone | No | ||
| No | |||
| phones | No | ||
| emails | No | ||
| addresses | No | ||
| birthday | No | ||
| note | No | ||
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It successfully discloses the partial-update behavior (preservation of unspecified fields), but omits other critical behavioral traits like error handling for invalid contactIds, authentication requirements, or the return value structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two efficient sentences with zero waste. The first establishes purpose immediately; the second provides essential behavioral context (partial update semantics). Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high parameter count (13) and lack of output schema, the description provides the minimum viable context for a standard CRUD operation. However, with severely incomplete schema documentation and no annotations, it should ideally elaborate on parameter expectations or error states to be truly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is critically low at 8% (only contactId is documented). The description fails to compensate by explaining the remaining 12 parameters, their formats (e.g., phone vs phones arrays), or valid value ranges. It mentions 'fields' abstractly without mapping to specific parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action (Update), resource (contact), and system (iCloud Contacts). It effectively distinguishes from siblings like create_contact, delete_contact, and get_contact through the verb 'Update' and context 'existing contact'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies PATCH semantics through 'Only provided fields are changed; others are preserved,' guiding the user toward partial updates. However, it lacks explicit guidance on when to use this versus create_contact, or prerequisites like obtaining the contactId first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_digest_stateA
Update the digest state after a run. Merges new processed UIDs into the existing list, updates lastRun, replaces pendingActions, and accumulates per-sender skip counts.
| Name | Required | Description | Default |
|---|---|---|---|
| lastRun | No | ISO timestamp of this run | |
| processedUids | No | Email UIDs processed in this run โ merged with existing and capped at 5000 | |
| pendingActions | No | Full replacement list of pending action items to track across runs (deadlines, waiting-for-reply, etc.). Each item: { type, subject, to/from, dueDate?, notes? } | |
| skipCounts | No | Map of sender address to skip count increment for this run, e.g. { "bestbuy@email.bestbuy.com": 3 }. Accumulated across runs for smart unsubscribe. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It excellently discloses merge-vs-replace semantics for each parameter (merges UIDs, replaces pendingActions, accumulates skip counts), but omits broader behavioral context like idempotency guarantees, error states, or what constitutes a 'run'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, dense sentence with zero waste. Front-loaded with the main action ('Update the digest state'), followed by parallel clauses mapping each parameter to its specific behavioral mode. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a state-management tool for what appears to be an email digest system (evidenced by 'smart unsubscribe' in schema), the description adequately covers the four parameters but fails to explain the domain conceptโwhat a 'digest' is, what 'processed UIDs' refer to (email IDs?), or the overall lifecycle of the digest state machine.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema has 100% coverage, the description adds crucial semantic meaning by specifying operation types (merge vs replace vs accumulate) that aren't fully explicit in the schema alone, helping the agent understand how each parameter transforms the existing state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action (update) and resource (digest state), and explicitly distinguishes from sibling 'get_digest_state' by specifying this is a write operation that modifies state rather than retrieving it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides temporal context ('after a run') suggesting when to invoke, but lacks explicit guidance on when NOT to use this versus alternatives, and doesn't clarify the relationship with 'get_digest_state' (likely a read-before-write pattern).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_eventB
Update an existing calendar event. Only provided fields are changed; others are preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| calendarId | Yes | Calendar ID containing the event | |
| eventId | Yes | Event ID to update | |
| summary | No | ||
| start | No | ||
| end | No | ||
| timezone | No | ||
| allDay | No | ||
| description | No | ||
| location | No | ||
| recurrence | No | ||
| status | No | ||
| reminder | No | Alert minutes before event (0 to disable) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the partial-update/PATCH-like behavior explicitly, which is critical for safe usage. However, it omits other behavioral details like error handling if the event doesn't exist, timezone handling conflicts, or recurrence modification side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two efficiently structured sentences with zero waste. The first states purpose immediately; the second provides essential behavioral context. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation tool with no output schema, the description meets minimum viability by capturing the core operation and partial-update semantics. However, gaps remain regarding return values, error cases, and the specific formats required for complex fields like recurrence rules.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low at 25% (only 3 of 12 parameters have descriptions). The description mentions 'provided fields' generally but does not compensate by explaining undocumented parameters like 'recurrence' string format, valid 'status' values, or date-time formats for 'start'/'end'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and resource 'calendar event', establishing a specific purpose. It distinguishes from create_event by specifying 'existing' event, though it does not explicitly differentiate from siblings like delete_event or get_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence provides crucial behavioral guidance ('Only provided fields are changed; others are preserved') clarifying partial update semantics. However, it lacks explicit when-to-use guidance versus alternatives like create_event or when to prefer this over delete+create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The tools cover distinct operations like moving, deleting, flagging, and managing emails, contacts, and events, but there is significant overlap in bulk operations (e.g., bulk_delete, bulk_delete_by_sender, bulk_delete_by_subject) and single-email actions (e.g., delete_email, flag_email, move_email), which could cause confusion. Descriptions help clarify, but the redundancy in functionality may lead to misselection.
Most tools follow a consistent verb_noun or verb_noun_by_filter pattern (e.g., bulk_move, get_email, list_contacts), with clear and predictable naming. Minor deviations exist, such as 'read_inbox' instead of 'list_inbox_emails' and 'log_clear'/'log_read'/'log_write' using a different prefix, but overall the naming is coherent and readable.
With 69 tools, the count is excessive for an iCloud email and productivity management server. Many tools are redundant or highly specific (e.g., separate bulk operations by sender, subject, or domain), making the surface overly complex and likely overwhelming for agents to navigate effectively.
The tool set provides comprehensive coverage for email management (CRUD, moving, flagging, searching), contacts, calendars, rules, and logging. It includes advanced features like digest states, storage reports, and event extraction from emails, leaving no obvious gaps for the domain's core workflows and lifecycle operations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that provides email capabilities, hosted on Alpic platform
An MCP server that provides email capabilities, hosted on Alpic platform
An MCP server that provides email capabilities, hosted on Alpic platform
Email infrastructure for AI agents โ send, receive, search, and reply to email over MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/adamzaidi/icloud-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server