Fastmail MCP Server
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., "@Fastmail MCP Serverlist my recent emails from inbox"
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.
Fastmail MCP Server
A Model Context Protocol (MCP) server that provides access to the Fastmail API, enabling AI assistants to interact with email, contacts, and calendar data.
Features
Core Email Operations
List mailboxes and get mailbox statistics
List, search, and filter emails with advanced criteria
Get specific emails by ID with full content
Send emails (text and HTML) with proper draft/sent handling
Reply to emails with proper threading (In-Reply-To, References headers)
Create and save email drafts (with or without threading)
Email management: mark read/unread, delete, move between folders
Advanced Email Features
Attachment Handling: List and download email attachments
Threading Support: Get complete conversation threads
Advanced Search: Multi-criteria filtering (sender, date range, attachments, read status)
Bulk Operations: Process multiple emails simultaneously
Statistics & Analytics: Account summaries and mailbox statistics
Contacts Operations
List all contacts with full contact information
Get specific contacts by ID
Search contacts by name or email
Calendar Operations
List all calendars and calendar events
Get specific calendar events by ID
Create new calendar events with participants and details
Label vs Move Operations
move_email/bulk_move: Replaces ALL mailboxes for an email (folder behavior)
add_labels/remove_labels: Adds/removes SPECIFIC mailboxes while preserving others (label behavior)
Identity & Account Management
List available sending identities
Account summary with comprehensive statistics
Setup
Prerequisites
Node.js 20+
A Fastmail account with API access
Fastmail API token
Installation
Clone or download this repository
Install dependencies:
npm installBuild the project:
npm run build
Configuration
Get your Fastmail API token:
Log in to Fastmail web interface
Go to Settings ā Privacy & Security
Find "Connected apps & API tokens" section
Click "Manage API tokens"
Click "New API token"
Copy the generated token
Set environment variables:
export FASTMAIL_API_TOKEN="your_api_token_here" # Optional: customize base URL (defaults to https://api.fastmail.com) # Only api.fastmail.com and www.fastmailusercontent.com are accepted by default. # For self-hosted JMAP servers, also set FASTMAIL_ALLOW_UNSAFE_BASE_URL=true. export FASTMAIL_BASE_URL="https://api.fastmail.com" # Optional: customize attachment download directory (defaults to ~/Downloads/fastmail-mcp/) export FASTMAIL_DOWNLOAD_DIR="/path/to/your/downloads"
Running the Server
Start the MCP server:
npm startFor development with auto-reload:
npm run devRun via npx (GitHub)
Default to main branch:
FASTMAIL_API_TOKEN="your_token" FASTMAIL_BASE_URL="https://api.fastmail.com" \
npx --yes github:MadLlama25/fastmail-mcp fastmail-mcpWindows PowerShell:
$env:FASTMAIL_API_TOKEN="your_token"
$env:FASTMAIL_BASE_URL="https://api.fastmail.com"
npx --yes github:MadLlama25/fastmail-mcp fastmail-mcpPin to a tagged release:
FASTMAIL_API_TOKEN="your_token" \
npx --yes github:MadLlama25/fastmail-mcp@v1.9.4 fastmail-mcpInstall as a Claude Desktop Extension (DXT)
You can install this server as a Desktop Extension for Claude Desktop using the packaged .dxt file.
Build and pack:
npm run build npx @anthropic-ai/dxt packThis produces
fastmail-mcp.dxtin the project root.Install into Claude Desktop:
Open the
.dxtfile, or drag it into Claude DesktopWhen prompted:
Fastmail API Token: paste your token (stored encrypted by Claude)
Fastmail Base URL: leave blank to use
https://api.fastmail.com(default)
Use any of the tools (e.g.
get_recent_emails).
Available Tools (38 Total)
šÆ Most Popular Tools:
check_function_availability: Check what's available and get setup guidance
test_bulk_operations: Safely test bulk operations with dry-run mode
send_email: Full-featured email sending with proper draft/sent handling
advanced_search: Powerful multi-criteria email filtering
get_recent_emails: Quick access to recent emails from any mailbox
Email Tools
list_mailboxes: Get all mailboxes in your account
list_emails: List emails from a specific mailbox or all mailboxes
Parameters:
mailboxId(optional),limit(default: 20),ascending(optional, oldest first)
get_email: Get a specific email by ID
Parameters:
emailId(required)
send_email: Send an email (supports threading via optional
inReplyToandreferencesheaders)Parameters:
to(required array),cc(optional array),bcc(optional array),from(optional),mailboxId(optional),subject(required),textBody(optional),htmlBody(optional),inReplyTo(optional array),references(optional array),replyTo(optional array)
reply_email: Reply to an existing email with proper threading headers (automatically builds In-Reply-To and References). Set
send=falseto save as draft instead of sending.Parameters:
originalEmailId(required),to(optional array, defaults to original sender),cc(optional array),bcc(optional array),from(optional),textBody(optional),htmlBody(optional),send(optional boolean, default: true),replyTo(optional array)
save_draft: Save an email as a draft without sending (supports threading headers for reply drafts)
Parameters:
to(required array),cc(optional array),bcc(optional array),from(optional),subject(required),textBody(optional),htmlBody(optional),inReplyTo(optional array),references(optional array)
create_draft: Create a minimal email draft (at least one of to/subject/body required)
Parameters:
to(optional array),cc(optional array),bcc(optional array),from(optional),mailboxId(optional),subject(optional),textBody(optional),htmlBody(optional),replyTo(optional array)
search_emails: Search emails by content
Parameters:
query(required),limit(default: 20),ascending(optional, oldest first)
get_recent_emails: Get the most recent emails from a mailbox (inspired by JMAP-Samples top-ten)
Parameters:
limit(default: 10, max: 50),mailboxName(default: 'inbox'),ascending(optional, oldest first)
mark_email_read: Mark an email as read or unread
Parameters:
emailId(required),read(default: true)
delete_email: Delete an email (move to trash)
Parameters:
emailId(required)
move_email: Move an email to a different mailbox (replaces all mailboxes)
Parameters:
emailId(required),targetMailboxId(required)
add_labels: Add labels (mailboxes) to an email without removing existing ones
Parameters:
emailId(required),mailboxIds(required array)
remove_labels: Remove specific labels (mailboxes) from an email
Parameters:
emailId(required),mailboxIds(required array)
Advanced Email Features
get_email_attachments: Get list of attachments for an email
Parameters:
emailId(required)
download_attachment: Download an email attachment. If savePath is provided, saves the file to disk and returns the file path and size. Otherwise returns a download URL.
Parameters:
emailId(required),attachmentId(required),savePath(optional)
advanced_search: Advanced email search with multiple criteria
Parameters:
query(optional),from(optional),to(optional),subject(optional),hasAttachment(optional),isUnread(optional),mailboxId(optional),after(optional),before(optional),limit(default: 50),ascending(optional, oldest first)
get_thread: Get all emails in a conversation thread
Parameters:
threadId(required)
Email Statistics & Analytics
get_mailbox_stats: Get statistics for a mailbox (unread count, total emails, etc.)
Parameters:
mailboxId(optional, defaults to all mailboxes)
get_account_summary: Get overall account summary with statistics
Bulk Operations
bulk_mark_read: Mark multiple emails as read/unread
Parameters:
emailIds(required array),read(default: true)
bulk_move: Move multiple emails to a mailbox
Parameters:
emailIds(required array),targetMailboxId(required)
bulk_delete: Delete multiple emails (move to trash)
Parameters:
emailIds(required array)
bulk_add_labels: Add labels to multiple emails simultaneously
Parameters:
emailIds(required array),mailboxIds(required array)
bulk_remove_labels: Remove labels from multiple emails simultaneously
Parameters:
emailIds(required array),mailboxIds(required array)
Contact Tools
list_contacts: List all contacts
Parameters:
limit(default: 50)
get_contact: Get a specific contact by ID
Parameters:
contactId(required)
search_contacts: Search contacts by name or email
Parameters:
query(required),limit(default: 20)
Calendar Tools
list_calendars: List all calendars
list_calendar_events: List calendar events
Parameters:
calendarId(optional),limit(default: 50)
get_calendar_event: Get a specific calendar event by ID
Parameters:
eventId(required)
create_calendar_event: Create a new calendar event
Parameters:
calendarId(required),title(required),description(optional),start(required, ISO 8601),end(required, ISO 8601),location(optional),participants(optional array)
Identity & Testing Tools
list_identities: List sending identities (email addresses that can be used for sending)
check_function_availability: Check which functions are available based on account permissions (includes setup guidance)
test_bulk_operations: Safely test bulk operations with dry-run mode
Parameters:
dryRun(default: true),limit(default: 3)
API Information
This server uses the JMAP (JSON Meta Application Protocol) API provided by Fastmail. JMAP is a modern, efficient alternative to IMAP for email access.
Inspired by Fastmail JMAP-Samples
Many features in this MCP server are inspired by the official Fastmail JMAP-Samples repository, including:
Recent emails retrieval (based on top-ten example)
Email management operations
Efficient chained JMAP method calls
Authentication
The server uses bearer token authentication with Fastmail's API. API tokens provide secure access without exposing your main account password.
Rate Limits
Fastmail applies rate limits to API requests. The server handles standard rate limiting, but excessive requests may be throttled.
CalDAV Calendar Support
Fastmail does not currently expose calendar access via JMAP API tokens ā the urn:ietf:params:jmap:calendars scope is not available because the JMAP Calendars specification is still an IETF Internet-Draft (draft-ietf-jmap-calendars). Fastmail has stated they will add JMAP calendar support once the spec becomes an RFC, but there is no public timeline.
However, Fastmail fully supports CalDAV for calendar access via caldav.fastmail.com. This server automatically falls back to CalDAV when JMAP calendar access is unavailable.
Setup
Create an app-specific password on Fastmail:
Go to Settings ā Privacy & Security ā Manage app passwords
Create a new app password (you can name it "CalDAV MCP" or similar)
Set the following environment variables:
export FASTMAIL_CALDAV_USERNAME="your-email@fastmail.com" export FASTMAIL_CALDAV_PASSWORD="your-app-specific-password"
When these variables are set, the calendar tools (list_calendars, list_calendar_events, get_calendar_event, create_calendar_event) will automatically fall back to CalDAV if JMAP calendars are not available. When these variables are not set, the server behaves exactly as before (JMAP only).
Development
Project Structure
src/
āāā index.ts # Main MCP server implementation
āāā auth.ts # Authentication handling
āāā jmap-client.ts # JMAP client wrapper
āāā contacts-calendar.ts # Contacts and calendar extensions
āāā caldav-client.ts # CalDAV calendar client (fallback)Building
npm run buildDevelopment Mode
npm run devLicense
MIT
Contributing
Contributions are welcome! Please ensure that:
Code follows the existing style
All functions are properly typed
Error handling is implemented
Documentation is updated for new features
Troubleshooting
Common Issues
Authentication Errors: Ensure your API token is valid and has the necessary permissions
Missing Dependencies: Run
npm installto ensure all dependencies are installedBuild Errors: Check that TypeScript compilation completes without errors using
npm run buildCalendar/Contacts "Forbidden" Errors: Use
check_function_availabilityto see setup guidance
Email Tools Failing with Serialization Errors?
If get_email, list_emails, search_emails, or advanced_search fail with "content serialization" or "Cannot read properties of undefined" errors, upgrade to v1.7.1+. This was caused by incomplete JMAP response validation that surfaced after the MCP SDK v1.x upgrade added stricter result checking.
Calendar/Contacts Not Working?
If calendar and contacts functions return "Forbidden" errors, this is likely due to:
Account Plan: Calendar/contacts API may require business/professional Fastmail plans
API Token Scope: Your API token may need calendar/contacts permissions enabled
Feature Enablement: These features may need explicit activation in your account
Solution: Run check_function_availability for step-by-step setup guidance.
Testing Your Setup
Use the built-in testing tools:
check_function_availability: See what's available and get setup help
test_bulk_operations: Safely test bulk operations without making changes
For more detailed error information, check the console output when running the server.
Privacy & Security
API tokens are stored encrypted by Claude Desktop when installed via the DXT and are never logged by this server.
The server avoids logging raw errors and sensitive data (tokens, email addresses, identities, attachment names/blobIds) in error messages.
Tool responses may include your email metadata/content by design (e.g., listing emails) but internal identifiers and credentials are not disclosed beyond what Fastmail returns for the requested data.
If you encounter errors, messages are sanitized and summarized to prevent leaking personal information.
Available Tools
38 toolsadd_labelsA
Add labels (mailboxes) to an email without removing existing ones
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | ID of the email to add labels to | |
| mailboxIds | Yes | Array of mailbox IDs to add as labels |
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 discloses an important behavioral trait (incremental labeling) but does not mention error conditions, return values, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that conveys the essential purpose and key behavior with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and two parameters, the description covers the main function but lacks details on error cases, return values, or prerequisites, leaving gaps for a fully informed agent.
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, so description adds minimal value. The 'without removing existing ones' comment is not parameter-specific, resulting in 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 clearly states that the tool adds labels to an email without removing existing ones, distinguishing it from related tools like 'remove_labels' and 'bulk_add_labels'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'without removing existing ones' to indicate additive use, but lacks explicit guidance on when to use this tool versus alternatives like 'bulk_add_labels' or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advanced_searchC
Advanced email search with multiple criteria
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Text to search for in subject/body | |
| from | No | Filter by sender email | |
| to | No | Filter by recipient email | |
| subject | No | Filter by subject | |
| hasAttachment | No | Filter emails with attachments | |
| isUnread | No | Filter unread emails | |
| isPinned | No | Filter pinned emails | |
| mailboxId | No | Search within specific mailbox | |
| after | No | Emails after this date (ISO 8601) | |
| before | No | Emails before this date (ISO 8601) | |
| limit | No | Maximum results (default: 50) | |
| ascending | No | Sort oldest first instead of newest first (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only mentions 'advanced search' and 'multiple criteria', but does not explain traits like pagination (limit param exists), result ordering, performance implications, or whether it combines criteria as AND/OR. Inadequate transparency for a complex search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (5 words), but at the cost of omitting critical information. It is front-loaded with 'Advanced email search', but could benefit from a brief note on its relationship to similar 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 has 12 parameters, no output schema, and many sibling tools, the description is insufficiently complete. It lacks information on return type, default behavior, and how it differs from simpler search tools. The agent would lack key context to use it 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?
Schema description coverage is 100%, so baseline is 3. The description adds no additional meaning beyond what the schema already provides. It does not clarify parameter interactions or provide examples.
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 'Advanced email search with multiple criteria', which identifies the tool as a search function for emails. However, it does not distinguish it from the sibling tool 'search_emails', leaving ambiguity about when to use which. The purpose is somewhat clear but lacks specificity.
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 'search_emails' or 'list_emails'. The description provides no usage context, prerequisites, or exclusions, leaving the agent to infer appropriateness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_add_labelsA
Add labels to multiple emails simultaneously
| Name | Required | Description | Default |
|---|---|---|---|
| emailIds | Yes | Array of email IDs to add labels to | |
| mailboxIds | Yes | Array of mailbox IDs to add as labels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only states the action; does not disclose whether labels are added incrementally or replace existing ones, permissions required, atomicity, or rate limits. 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?
Single sentence, no unnecessary words. Information is 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?
For a simple tool with 2 parameters and no output schema, the description is minimally adequate. However, it lacks any indication of return value, side effects, or error conditions. Could be more 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 both parameters described. The description adds no additional meaning beyond the schema; it's generic. Baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states action (Add), resource (labels), and scope (multiple emails simultaneously). Differentiates from sibling tools like add_labels (single) and bulk_remove_labels (opposite action).
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 batch labeling but provides no explicit guidance on when to use vs alternatives (e.g., add_labels for single email) or when not to use (e.g., need to replace all labels). No prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_deleteA
Delete multiple emails (move to trash)
| Name | Required | Description | Default |
|---|---|---|---|
| emailIds | Yes | Array of email IDs to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Specifies the behavior 'move to trash', which is a key detail, but lacks disclosure of additional traits such as irreversibility, permission requirements, rate limits, or effect on trash retention. No annotations are provided, so the description bears full responsibility but only partially fulfills it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence that front-loads the core action and outcome. Efficient but could include more detail without losing 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?
Adequate for a simple bulk operation with one parameter, but lacks information on partial success, error handling, or limits (e.g., maximum number of IDs). No output schema, so no return value explanation needed. Could be more complete for a bulk 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 coverage is 100%, so the schema fully describes the parameter. The description adds no new meaning beyond repeating 'multiple emails'. No extra context on array size limits, required format, or 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?
Clearly states the action 'Delete multiple emails' and specifies it moves to trash, distinguishing it from permanent deletion. The tool name 'bulk_delete' is accurately reflected and differentiated from sibling 'delete_email' for 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?
Implies use for deleting multiple emails, but no explicit guidance on when to use this tool over alternatives like 'delete_email' for single deletes or 'bulk_move' for moving to other folders. No prerequisites or constraints mentioned.
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 multiple emails as read/unread
| Name | Required | Description | Default |
|---|---|---|---|
| emailIds | Yes | Array of email IDs to mark | |
| read | No | true to mark as read, false as unread |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only states the basic action. No mention of failure handling, limits, 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?
The description is a single, clear sentence with no wasted words. It could be slightly longer to include usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple bulk operation, the description is adequate but lacks guidance on when to use and behavioral details. The presence of a similar sibling tool makes it slightly incomplete.
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 baseline is 3. The description adds no additional meaning beyond the schema descriptions for 'emailIds' and 'read'.
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 marks multiple emails as read/unread, with a specific verb and resource. The bulk nature is explicit, distinguishing it from the singular 'mark_email_read' 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?
No guidance is provided on when to use this tool versus alternatives like 'mark_email_read' or other bulk operations. The context for choosing this tool is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_moveC
Move multiple emails to a mailbox
| Name | Required | Description | Default |
|---|---|---|---|
| emailIds | Yes | Array of email IDs to move | |
| targetMailboxId | Yes | ID of target mailbox |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must bear full burden. It only states the action but does not disclose behavioral traits such as atomicity, error handling, permissions required, or side effects. The description is insufficient for a bulk 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 short sentence, directly stating the function. It is concise and front-loaded without unnecessary words, though it could provide more context without losing 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?
Given two parameters with schema descriptions and no output schema, the description is minimal. For a bulk operation, it lacks details on return values, limits, error behavior, or any post-conditions. More context is needed for effective use.
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% coverage with descriptions for both parameters, so baseline is 3. The description adds no additional meaning beyond the schema, hence score remains at 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (move) and resources (multiple emails) and target (mailbox). It distinguishes from sibling bulk operations like bulk_delete and from singular move_email, though the bulk aspect is already implied by the 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?
No guidance on when to use this tool versus alternatives like move_email or bulk_delete. It does not mention suitable contexts, prerequisites, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_pinA
Pin or unpin multiple emails
| Name | Required | Description | Default |
|---|---|---|---|
| emailIds | Yes | Array of email IDs to pin/unpin | |
| pinned | No | true to pin, false to unpin |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose any behavioral traits such as side effects, permissions, or error conditions. Minimal 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, concise sentence with no wasted words. Well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameters and lack of annotations or output schema, the description is adequate but does not cover behavioral context like idempotency or error handling.
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; the description adds no extra meaning beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('pin or unpin') and the resource ('multiple emails'), distinguishing it from the singular 'pin_email' 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?
No explicit guidance on when to use this tool vs. alternatives like 'pin_email'. The bulk vs. single distinction is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_remove_labelsB
Remove labels from multiple emails simultaneously
| Name | Required | Description | Default |
|---|---|---|---|
| emailIds | Yes | Array of email IDs to remove labels from | |
| mailboxIds | Yes | Array of mailbox IDs to remove as labels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description only states the basic operation. It does not disclose behavioral traits such as whether the operation is destructive, reversible, requires permissions, handles partial failures, or has 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 a single concise sentence. While front-loaded, it is too brief and lacks necessary context, making it merely adequate.
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, no output schema, and the presence of sibling tools, the description is incomplete. It does not explain return values, error handling, how it differs from 'remove_labels', or confirm whether labels are removed from all emails atomically.
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 clear parameter descriptions. The tool description adds no extra meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Remove labels', the resource 'labels', and the scope 'from multiple emails simultaneously'. It effectively distinguishes from sibling tools like 'remove_labels' (singular) and 'add_labels' (opposite).
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 'remove_labels' or 'bulk_remove_'. There is no mention of prerequisites, conditions, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_function_availabilityB
Check which MCP functions are available based on account permissions
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description only mentions the purpose but not behavioral traits like read-only nature, idempotency, or error handling, leaving the agent to infer.
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, direct and no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple tool with no parameters and no output schema, but could hint at return format or behavior when no functions are available.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so baseline 4 applies. The description adds no additional parameter info, which is acceptable.
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 checks which MCP functions are available based on permissions, distinguishing it from action-oriented siblings. However, 'MCP functions' is slightly vague without 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?
No guidance on when to use this tool versus alternatives, prerequisites, or typical usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_calendar_eventC
Create a new calendar event
| Name | Required | Description | Default |
|---|---|---|---|
| calendarId | Yes | ID of the calendar to create the event in | |
| title | Yes | Event title | |
| description | No | Event description (optional) | |
| start | Yes | Start time in ISO 8601 format | |
| end | Yes | End time in ISO 8601 format | |
| location | No | Event location (optional) | |
| participants | No | Event participants (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only says 'Create', implying mutation, but no details on permissions, side effects, or restrictions like time zone handling or participant 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?
Extremely brief (one sentence), but this sacrifices necessary detail for a tool with 7 parameters. Could be more informative without losing 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?
No output schema, and description omits return values, error conditions, or confirmation. Lacks completeness for a creation tool with nested parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage, so description adds no extra meaning beyond what schema already provides. Baseline 3 without additional insights.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it creates a calendar event with verb+resource, but does not differentiate from siblings like get_calendar_event or list_calendar_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?
No guidance on when to use this tool vs alternatives. No context about prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_draftA
Create an email draft without sending it. Supports threading headers for replies. IMPORTANT: each call creates a new draft ā do not call twice for the same message.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Recipient email addresses (optional) | |
| cc | No | CC email addresses (optional) | |
| bcc | No | BCC email addresses (optional) | |
| from | No | Sender email address (optional, defaults to account primary email) | |
| mailboxId | No | Mailbox ID to save the draft to (optional, defaults to Drafts folder) | |
| subject | No | Email subject (optional) | |
| textBody | No | Plain text body (optional) | |
| htmlBody | No | HTML body (optional) | |
| inReplyTo | No | Message-IDs to reply to (optional, for threading) | |
| references | No | Message-IDs for References header (optional, for threading) | |
| replyTo | No | Reply-To email addresses (replies go here instead of to the sender) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses it creates a new draft each call, supports threading, and warns against duplicates, which is good 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 concise sentences with no wasted words; first states purpose, second adds important threading and warning 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?
Adequately covers purpose and a critical warning, but lacks details on return value or how to retrieve the created draft since no output schema exists.
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 baseline is 3; description adds no extra parameter details beyond what 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 tool creates an email draft without sending, and distinguishes from siblings by mentioning threading headers and the warning about duplicate drafts.
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 and provides a crucial warning against calling twice, though it does not contrast with edit_draft or send_draft.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_emailB
Delete an email (move to trash)
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | ID of the email to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It adds a nuance that deletion means moving to trash, but does not disclose if it's reversible, requires permissions, or triggers 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?
A single, concise sentence that efficiently conveys the core action. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with no output schema and no annotations, the description is minimally adequate but missing expected return value or success/failure indicator. It does not fully compensate for the lack of structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameter 'emailId' with a clear description. The tool description adds no additional meaning beyond the schema, meeting the baseline for high 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 'Delete an email (move to trash)' clearly states the action and the specific resource (email). It distinguishes from sibling tools like 'bulk_delete' (batch) and 'move_email' (different folder).
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 alternatives (e.g., 'bulk_delete' for multiple emails, 'move_email' for relocating). The description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_attachmentA
Download an email attachment. If savePath is provided, saves the file to disk and returns the file path and size. Otherwise returns a download URL.
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | ID of the email | |
| attachmentId | Yes | ID of the attachment | |
| savePath | No | File path to save the attachment to. Paths are restricted to ~/Downloads/fastmail-mcp/ (configurable via FASTMAIL_DOWNLOAD_DIR). Path traversal outside this directory is rejected for security. Parent directories will be created automatically. |
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. It discloses two operational modes and path restrictions for savePath, but does not mention URL expiry, overwrite behavior, or authentication needs, which leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundant words. Every sentence adds value. Highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-param tool with no output schema, the description covers the two modes and security restrictions. However, it does not address overwrite behavior for savePath or URL expiration, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaningful context for savePath (path restrictions, auto-creation) beyond the schema. For emailId and attachmentId, no additional meaning is added, so overall it provides moderate extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Download an email attachment' using a specific verb and resource. It distinguishes two modes (save to disk vs. return URL), which helps the agent understand its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by explaining the tool's behavior, but it does not explicitly state when to use this tool versus alternatives like get_email_attachments, nor does it provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_draftA
Edit an existing draft email. Since JMAP emails are immutable, this atomically destroys the old draft and creates a new one with the updated fields. Only fields you provide will be changed; others are preserved from the original draft.
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | The ID of the draft email to edit | |
| to | No | Updated recipient email addresses (optional, keeps existing if omitted) | |
| cc | No | Updated CC email addresses (optional) | |
| bcc | No | Updated BCC email addresses (optional) | |
| from | No | Updated sender email address (optional) | |
| subject | No | Updated email subject (optional) | |
| textBody | No | Updated plain text body (optional) | |
| htmlBody | No | Updated HTML body (optional) | |
| replyTo | No | Reply-To email addresses (replies go here instead of to the sender) |
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 immutable nature of JMAP emails (atomically destroys and creates), and explains field preservation. It does not detail authorization or rate limits, but sufficiently covers the key mutation 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 no wasted words. First sentence states action, second explains immutable behavior, third clarifies field update. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters (all documented) and no output schema, the description is fairly complete. It covers the update behavior and immutability. However, it omits what is returned (presumably the new draft) and does not mention error scenarios, leaving slight 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 coverage is 100%, so baseline is 3. The description adds value by explaining that only provided fields are changed and others preserved, reinforcing the schema's 'optional, keeps existing' notes. The atomic destruction-creation context further enhances parameter understanding.
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 edits an existing draft email, distinguishing it from siblings like create_draft. It explicitly mentions the immutable behavior (destroy old, create new), which adds specific purpose beyond the 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 indicates when to use this tool (to edit an existing draft) and explains that only provided fields change. It does not explicitly state when not to use it or mention alternatives, but context from sibling tools and the 'edit' verb provide sufficient clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_summaryB
Get overall account summary with statistics
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It only says 'get' and 'statistics', but doesn't confirm read-only nature, required permissions, or side effects. This is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only 6 words, efficient but front-loaded. No wasted words, but could be expanded slightly for 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?
No output schema, and description barely hints at return value ('statistics'). For a tool with no params, more context on what statistics are included would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters, so description adds no param info. Baseline is 4 because there's nothing to add beyond 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 ('Get') and the resource ('overall account summary'), adding 'with statistics' to hint at the content. However, it doesn't differentiate from sibling tools like 'get_mailbox_stats', which may overlap.
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 alternatives (e.g., get_mailbox_stats or list_mailboxes). The description lacks context about prerequisites or use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendar_eventA
Get a specific calendar event by ID
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | ID of the event to retrieve |
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. It states 'Get' implying read-only, but does not disclose any behavioral traits such as authentication requirements, rate limits, or what happens if the event is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words. Perfectly concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get tool with one parameter and no output schema, the description is largely sufficient. Could mention return format or error handling, but not critical.
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% (eventId has a description). The description adds no additional meaning beyond what the schema already provides, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get a specific calendar event by ID' clearly states the verb (Get), resource (calendar event), and method (by ID). It distinguishes itself from siblings like create_calendar_event and list_calendar_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 when you have an event ID, but does not explicitly state when to use it versus alternatives like list_calendar_events. No exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactB
Get a specific contact by ID
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | ID of the contact to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits like required permissions, rate limits, or error behavior. For a simple read operation, the lack of transparency is a 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?
The description is a single, clear sentence with no unnecessary words. It is optimally concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description provides sufficient information to understand its purpose. However, adding what is returned (e.g., contact details) would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers both parameters with descriptions. The tool description adds no additional meaning beyond 'by ID', which is already implied. With 100% schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get a specific contact by ID' clearly specifies the action (get), resource (contact), and method (by ID). It distinguishes from siblings like list_contacts and search_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as list_contacts or search_contacts. It lacks explicit usage context or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emailB
Get a specific email by ID
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | ID of the email to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description lacks any behavioral details beyond the parameter. It does not disclose what data the response contains, any permission requirements, or whether the email is returned in full. Since no annotations are provided, the description carries the full burden, and it falls short.
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 very concise (five words) but lacks necessary context. It is front-loaded, but the brevity reduces its informative value. Every word earns its place, but more details could be added without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description should explain what is returned (e.g., email details or attachments). It does not. For a simple tool, this is still incomplete for an AI to understand the tool's full behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'emailId' is described in the schema as 'ID of the email to retrieve', which is clear. The tool description adds no additional semantic meaning beyond what the schema already provides. With 100% schema coverage, the baseline is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a specific email by ID', which is a specific verb-resource combination. It distinguishes from sibling tools like 'get_recent_emails' or 'search_emails' by focusing on a single email 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?
No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention that this is for retrieving a known email by ID, as opposed to listing or searching. There are no prerequisites or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_email_attachmentsB
Get list of attachments for an email
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | ID of the email |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It does not mention any behavioral traits such as whether the list includes metadata, file sizes, or content types, nor any side effects or permissions needed.
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, focused sentence with no extraneous words, making it highly concise and well-structured for quick comprehension.
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 fails to specify what the list contains (e.g., attachment IDs, names, sizes), and provides no information on error conditions or authentication requirements, leaving the agent with incomplete context for invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'emailId' is fully described in the input schema (100% coverage). The description adds no additional meaning beyond what the schema provides, meeting the baseline for full 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 action ('Get list'), the resource ('attachments'), and the scope ('for an email'), distinguishing it from siblings like 'download_attachment' (which downloads a specific attachment) and 'get_email' (which retrieves email 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?
The description provides no guidance on when to use this tool versus alternatives like 'download_attachment', no prerequisites (e.g., email existence), and no mention of what not to use it for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mailbox_statsA
Get statistics for a mailbox (unread count, total emails, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| mailboxId | No | ID of the mailbox (optional, defaults to all mailboxes) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the purpose but lacks any behavioral details beyond that. Since annotations are absent, the description should mention that this is a read operation, potential permissions required, or what happens if the mailbox ID is invalid. No such information is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundant words. It efficiently communicates 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?
Given the tool's simplicity (1 optional param, no output schema), the description is minimally adequate but could be more complete by detailing the return format or providing an example. Without an output schema, more context about the returned object structure would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameter descriptions (defaults to all mailboxes). The tool description adds meaning by specifying what kind of statistics are returned ('unread count, total emails, etc.'), which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'mailbox statistics', and examples of statistics ('unread count, total emails, etc.'). It distinguishes from sibling tools like list_mailboxes which list mailbox metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to retrieve mailbox statistics, but provides no explicit when-to-use guidance or alternatives. The context of when to choose get_mailbox_stats over other tools like list_mailboxes or get_account_summary is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_emailsC
Get the most recent emails from inbox (like top-ten)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recent emails to retrieve (default: 10, max: 50) | |
| mailboxName | No | Mailbox to search (default: inbox) | inbox |
| ascending | No | Sort oldest first instead of newest first (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description should disclose behavioral traits. It only states it gets recent emails, but does not mention read-only nature, response format, or any 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?
Single sentence, no wasted words. Informal 'like top-ten' adds clarity without excess.
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 retrieval, but lacks explanation of return values (no output schema) and could mislead on scope (e.g., only inbox? default mailbox parameter says 'inbox' but not stated in description).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 3 parameters. Description adds no extra meaning 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?
Clearly states it retrieves recent emails from inbox, with 'like top-ten' adding specificity. However, it does not explicitly differentiate from sibling tools like list_emails or search_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?
No guidance on when to use this tool versus alternatives, nor any conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_threadA
Get all emails in a conversation thread
| Name | Required | Description | Default |
|---|---|---|---|
| threadId | Yes | ID of the thread/conversation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as authentication requirements, rate limits, or error handling for invalid thread IDs. The agent has no insight into potential side effects or 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?
The description is a single, concise sentence. Every word is informative, with no unnecessary content. Ideal for a straightforward 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 simplicity (one parameter, no output schema), the description is minimally adequate. However, it lacks details on return format (e.g., order of emails, fields included) and does not explain what 'all emails' entails for large threads.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with a description for 'threadId'. The tool description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'get' and the resource 'all emails in a conversation thread', distinguishing it from siblings like 'get_email' (single email) and 'list_emails' (listing emails without thread 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?
No explicit when-to-use or when-not-to-use guidance is provided. The description implies use for retrieving entire threads, but alternatives like 'get_email' or 'search_emails' are not discussed. Minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_calendar_eventsC
List events from a calendar
| Name | Required | Description | Default |
|---|---|---|---|
| calendarId | No | ID of the calendar (optional, defaults to all calendars) | |
| startDate | No | Filter events starting from this date (ISO 8601, e.g. 2026-03-23T00:00:00Z) | |
| endDate | No | Filter events ending before this date (ISO 8601, e.g. 2026-03-30T00:00:00Z) | |
| limit | No | Maximum number of events to return (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it provides none. Missing details on pagination, ordering, timezone handling, or return format.
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?
Only one sentence, which is efficient but too brief for a tool with 4 parameters and many siblings. Could include more context without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks completeness: no mention of return fields, default behavior when calendarId is omitted, or limitations. For a listing tool with date filters, more context is needed.
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 with clear parameter details. The description adds no extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists events from a calendar, but does not specify the scope (e.g., single calendar or all) or differentiate from sibling tools like get_calendar_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?
No guidance on when to use this tool vs alternatives such as get_calendar_event or search_emails. Missing context on prerequisites or default behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_calendarsB
List all calendars
| 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 must disclose behavior. It only says 'List all calendars' without mentioning scope, ordering, pagination, or any side effects. Minimal behavioral insight.
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, no extraneous text. Perfectly concise for a simple list operation.
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 simplicity (no parameters, no output schema), the description is mostly adequate. However, it lacks mention of default ordering or limit, which could be useful for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the description adds no parameter detail. Since schema coverage is 100% (empty), no additional semantics are needed; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all calendars' clearly states the action and resource. It distinguishes from sibling tools like list_calendar_events, but does not explicitly differentiate from other list 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?
No guidance on when to use this tool versus alternatives (e.g., list_calendar_events). No context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsB
List contacts from the address book
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of contacts to return (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits like read-only nature, pagination behavior, and ordering, but it only states 'list contacts'. It does not confirm the operation is non-destructive or describe any 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 is a single clear sentence with no redundant words. Every word contributes to the purpose, making it highly concise and effectively front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter, the description is minimally adequate. However, it is incomplete as it does not specify which address book is used, how contacts are ordered, or what happens when the limit is exceeded. More context would improve utility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage of the single 'limit' parameter, including its default value. The description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'list' and resource 'contacts' from 'the address book', clearly indicating the tool's function. It distinguishes itself from siblings like 'search_contacts' (filtered search) and 'get_contact' (single contact 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?
There is no guidance on when to use this tool versus alternatives such as 'search_contacts' for filtered queries or 'get_contact' for a single contact. The description does not mention exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emailsC
List emails from a mailbox
| Name | Required | Description | Default |
|---|---|---|---|
| mailboxId | No | ID of the mailbox to list emails from (optional, defaults to all) | |
| limit | No | Maximum number of emails to return (default: 20) | |
| ascending | No | Sort oldest first instead of newest first (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the basic action. It does not disclose whether the operation is read-only, what data is returned, or any constraints like pagination. 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?
The description is a single concise sentence with no redundancy. However, it could be slightly more informative while remaining concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description is too brief. It fails to specify the return format, field details, or pagination behavior, leaving the agent underinformed.
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 description adds limited value beyond the existing parameter descriptions. It restates defaults and optionality, but no deeper semantics.
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 verb and resource ('List emails from a mailbox'), but does not differentiate from sibling tools like search_emails or get_recent_emails, which have similar purposes.
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. It lacks explicit context, exclusions, or mentions of prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_identitiesA
List sending identities (email addresses that can be used for sending)
| 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 must carry the burden. It states the tool lists identities but does not disclose behavioral traits such as read-only nature, authentication requirements, or edge cases like empty results.
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, no wasted words, front-loaded with verb and 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?
Tool is simple with no parameters and no output schema. Description is sufficient to understand the tool's function.
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 zero parameters, so parameter semantics are not needed. Baseline 4 applies per criteria.
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 (list) and resource (sending identities) with additional context (email addresses for sending). It distinguishes from sibling tools that list other entities like contacts, emails, mailboxes, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. Usage is implied by the tool name and description, but lacks contextual clues or exclusions.
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 in the Fastmail account
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits beyond listing, such as read-only nature, rate limits, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundancy. Every word is necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description adequately informs the agent of the tool's purpose, though it omits mention of the return format or structure.
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 with 100% schema coverage. The baseline is 4 as per rubric, and no additional description is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'list' and the resource 'mailboxes' with scope 'all'. It distinguishes from sibling tools like list_emails or list_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any preconditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_email_readB
Mark an email as read or unread
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | ID of the email to mark | |
| read | No | true to mark as read, false to mark as unread |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description fails to disclose any behavioral traits such as reversibility, authentication needs, or side effects. Bare minimum.
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, no fluff. Appropriate length for a simple toggle 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?
For a simple tool, the description lacks context about expected outcomes or return values. Given no output schema, more detail could be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters adequately (100% coverage). Description adds no additional meaning 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?
Clearly states the action of marking an email as read/unread. Implicitly distinguishes from bulk_mark_read by implying a single email via the required emailId parameter, but does not explicitly mention 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?
No guidance on when to use this tool vs alternatives like bulk_mark_read. The agent is left to infer from parameter count.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_emailB
Move an email to a different mailbox
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | ID of the email to move | |
| targetMailboxId | Yes | ID of the target mailbox |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavioral traits. It only says 'move' without mentioning side effects (e.g., preserving labels), permissions, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, no fluff. It efficiently conveys the action, though it could be slightly expanded for 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?
Given no output schema and no annotations, the description is sparse. It lacks details about return values, error handling, or constraints like mailbox permissions.
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 explicit descriptions for both parameters. The description adds no extra meaning beyond the schema, meeting the baseline for high 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 'Move' and the resource 'email' to a 'different mailbox'. It distinguishes from siblings like delete_email and mark_email_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?
No guidance on when to use this tool versus alternatives like bulk_move. The description lacks context about prerequisites or scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_emailC
Pin or unpin an email
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | ID of the email to pin/unpin | |
| pinned | No | true to pin, false to unpin |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states action without disclosing side effects (e.g., visual changes, reversibility) or behavioral traits beyond the basic 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?
Extremely concise (5 words) with no waste. Appropriate for a simple tool, though lacks structural elements like examples or bullet points.
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 straightforward toggle operation, but missing details on return value or effect on email order/visibility. Could be more informative given no 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 covers all parameters with descriptions. The tool description adds no extra semantic value beyond the schema content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states action (pin/unpin) and resource (email). Distinguishes from sibling 'bulk_pin' by implication, but lacks explicit scope indication.
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 alternatives like bulk_pin or other email operations. No context on prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_labelsA
Remove specific labels (mailboxes) from an email
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | ID of the email to remove labels from | |
| mailboxIds | Yes | Array of mailbox IDs to remove as labels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose side effects (e.g., if labels must exist, impact of removing nonexistent labels, or return value).
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 single sentence with no redundancy, efficiently conveying the tool's 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?
Lacks details on return value, error conditions, or prerequisites; adequate for a simple operation but could be more 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?
Schema coverage is 100% and description adds minimal value beyond schema definitions, providing only the parenthetical clarification '(mailboxes)'.
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 'Remove specific labels' and the target 'email', distinguishing it from sibling tools like 'add_labels'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool over alternatives like 'bulk_remove_labels', but the purpose is straightforward and implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_emailA
Reply to an existing email with proper threading headers (In-Reply-To, References). Automatically fetches the original email to build the reply chain. By default sends immediately; set send=false to save as a draft instead.
| Name | Required | Description | Default |
|---|---|---|---|
| originalEmailId | Yes | ID of the email to reply to | |
| to | No | Recipient email addresses (optional, defaults to the original sender) | |
| cc | No | CC email addresses (optional) | |
| bcc | No | BCC email addresses (optional) | |
| from | No | Sender email address (optional, defaults to account primary email) | |
| textBody | No | Plain text body (optional) | |
| htmlBody | No | HTML body (optional) | |
| send | No | Whether to send the reply immediately (default: true). Set to false to save as draft instead. | |
| replyTo | No | Reply-To email addresses (replies go here instead of to the sender) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses automatic fetching of original email and threading header construction. No annotations exist, so description carries full burden; adequately covers key behaviors for a reply action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no extraneous information; every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers core functionality and key parameter (send) well. No output schema exists, but description doesn't describe return value; acceptable for a straightforward reply tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value by stating defaults (e.g., to defaults to original sender) and explaining send parameter behavior beyond schema type descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Reply to an existing email with proper threading headers', distinguishing it from siblings like send_email or create_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance on the send parameter: 'By default sends immediately; set send=false to save as a draft instead.' Implicitly differentiates from send_email and create_draft, but lacks explicit when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactsB
Search contacts by name or email
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string | |
| limit | No | Maximum number of results (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description does not disclose whether the tool is read-only, required permissions, rate limits, or side effects. Minimal behavioral info.
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 verb and resource. No wasted words, but could include more detail without losing 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?
No output schema, no annotations, and no description of return format, ordering, pagination, or result set details. Incomplete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. Description adds no additional meaning beyond the schema entries; 'query' description is redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'search' and resource 'contacts', with specific search fields 'name or email'. Distinguishes from siblings like 'list_contacts' and 'get_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?
Implies usage for searching by name/email, but lacks explicit guidance on when to use this tool vs alternatives like 'advanced_search' or 'list_contacts'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_emailsC
Search emails by subject or content
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string | |
| limit | No | Maximum number of results (default: 20) | |
| ascending | No | Sort oldest first instead of newest first (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only implies a read operation through 'search', but does not specify permissions, rate limits, or whether it searches body content or just subject. Minimal transparency beyond the obvious.
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 short sentence, which is concise but may be too brief to convey important nuances. It is front-loaded but lacks structure; every word earns its place, but more detail would improve 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?
Given no output schema and no annotations, the description lacks completeness. It does not describe return format, pagination behavior, or how sorting interacts with the 'ascending' parameter. Also, it fails to distinguish this tool from the similar 'advanced_search' sibling.
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 each parameter already has a description. The tool description adds no extra meaning beyond what the schema provides, but it does not contradict it either. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches emails by subject or content, which is a specific and understandable purpose. However, it does not differentiate from the 'advanced_search' sibling tool, which likely offers more complex querying capabilities.
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 'advanced_search' or 'list_emails'. There is no mention of when-not-to-use or context-appropriate conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_draftA
Send an existing draft email. The draft must have recipients (to/cc/bcc) and a from address. After sending, the email is moved to the Sent folder and the draft keyword is removed.
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | The ID of the draft email to send |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses that after sending, the email is moved to Sent folder and draft keyword removed. This covers the key behavioral effects, though error handling is not mentioned.
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 no wasted words. Front-loaded with the core action, then conditions and aftermath. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers purpose, prerequisites, and outcome. No gaps remain.
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?
Only one parameter with 100% schema coverage. The description does not add meaning beyond the schema, but the prerequisite conditions indirectly clarify the parameter's context. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Send' and resource 'existing draft email', distinguishing it from siblings like 'create_draft' and 'send_email'. It also specifies prerequisites (recipients and from address).
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 prerequisites (draft must have recipients and from address), guiding when to use. It does not explicitly name alternatives, but the context from sibling tools implies when not to use (e.g., use 'send_email' for non-drafts).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailC
Send an email
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient email addresses (array of strings, or a comma-separated string) | |
| cc | No | CC email addresses (optional) | |
| bcc | No | BCC email addresses (optional) | |
| from | No | Sender email address (optional, defaults to account primary email) | |
| mailboxId | No | Mailbox ID to save the email to (optional, defaults to Drafts folder) | |
| subject | Yes | Email subject | |
| textBody | No | Plain text body (optional) | |
| htmlBody | No | HTML body (optional) | |
| inReplyTo | No | Message-ID(s) of the email being replied to (optional, for threading) | |
| references | No | Full reference chain of Message-IDs (optional, for threading) | |
| replyTo | No | Reply-To email addresses (replies go here instead of to the sender) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden of behavioral disclosure, but it fails entirely. It does not indicate that sending an email is a destructive/write operation, any required permissions, rate limits, or side effects like saving to Sent folder. The agent has no behavioral cues beyond the verb 'send'.
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 (3 words) but at the cost of missing critical information. It is not structured or front-loaded with the most important details; it is simply too short to be useful.
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 tool with no output schema and no annotations, the description is grossly insufficient. It fails to explain the tool's behavior, return value, or any constraints, leaving the agent with only the parameter names to infer functionality.
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, meaning each parameter already has a description. The tool description adds no further meaning beyond the schema, but baseline 3 is appropriate since the schema handles parameter semantics adequately.
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 ('send') and the resource ('an email'), making the basic purpose unambiguous. However, it does not differentiate this tool from siblings like 'create_draft' or 'send_draft' which have overlapping functionality, missing an opportunity to clarify scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'create_draft', 'reply_email', or 'send_draft'. There is no mention of prerequisites, error conditions, or context that would help an agent decide correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_bulk_operationsA
Test bulk operations by finding recent emails and performing safe operations (mark read/unread)
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | If true, only shows what would be done without making changes (default: true) | |
| limit | No | Number of emails to test with (default: 3, max: 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. It states 'safe operations (mark read/unread)' but does not disclose what happens when dryRun is false, whether changes are permanent, or any limits beyond the schema. More detail on the test's actual effect would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with key action, no redundant words. Efficient and to the point.
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, so the description should explain the test's output (e.g., what is returned). It does not mention return values, success/failure indicators, or how results relate to sibling bulk tools. This is a significant gap for a test tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (dryRun, limit) are well described in the schema. The description adds no additional meaning beyond the schema, meeting the baseline expectation.
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 tests bulk operations by finding recent emails and performing safe operations like mark read/unread. It distinguishes itself from sibling bulk tools (e.g., bulk_mark_read, bulk_delete) by being a test tool, not the actual 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 description implies use for testing, but lacks explicit guidance on when to use versus alternatives like bulk_mark_read or when not to use. No exclusions or prerequisites are mentioned, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
38 tool updates
v1.9.4- First observed
add_labels - First observed
advanced_search - First observed
bulk_add_labels - First observed
bulk_delete - First observed
bulk_mark_read - First observed
bulk_move - First observed
bulk_pin - First observed
bulk_remove_labels - First observed
check_function_availability - First observed
create_calendar_event - First observed
create_draft - First observed
delete_email - First observed
download_attachment - First observed
edit_draft - First observed
get_account_summary - First observed
get_calendar_event - First observed
get_contact - First observed
get_email - First observed
get_email_attachments - First observed
get_mailbox_stats - First observed
get_recent_emails - First observed
get_thread - First observed
list_calendar_events - First observed
list_calendars - First observed
list_contacts - First observed
list_emails - First observed
list_identities - First observed
list_mailboxes - First observed
mark_email_read - First observed
move_email - First observed
pin_email - First observed
remove_labels - First observed
reply_email - First observed
search_contacts - First observed
search_emails - First observed
send_draft - First observed
send_email - First observed
test_bulk_operations
TDQS
Most tools have distinct purposes, with clear differentiation between single and bulk operations (e.g., pin_email vs bulk_pin). However, some overlap exists between get_recent_emails, list_emails, and search_emails, though descriptions help distinguish them.
All tools follow a consistent verb_noun snake_case convention. Bulk operations are prefixed with 'bulk_', and variants like 'mark_read', 'move', 'delete' maintain the same pattern throughout.
38 tools is excessive compared to typical MCP servers (5-15). Many operations are duplicated as single and bulk variants, which could be combined with parameters. This overcomplicates the tool surface.
Email operations are well-covered, but calendar and contact support is incomplete: missing update/delete for calendar events and create/update/delete for contacts. The domain coverage has notable gaps.
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoā¦
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Email infrastructure for AI agents ā send, receive, search, and reply to email over MCP.
MCP server for Nylas ā read email, calendars, events and contacts, and send email or create events.
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/owen-nash/fastmail-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server