ProtonMail MCP Server
This server lets AI agents manage ProtonMail through Proton Bridge: send, read, search, draft, and organize email, including attachments, threading, folders, and connection health.
Send email: send messages with to/cc/bcc, HTML, priority, reply-to, threading headers, and attachments; send test emails.
Read email: fetch folder emails with pagination; get full email by ID with body/headers/attachment metadata; download attachments, using index for duplicate filenames.
Search email: filter by from, to, subject, date range, read status, starred status, attachment presence, and full-text query.
Manage drafts: create, create threaded reply drafts, update, delete, and send drafts via SMTP.
Act on emails: mark read/unread, star/unstar, move between folders, and soft-delete to Trash; permanent delete only from Trash.
Manage folders: list all folders with message counts and force-refresh the folder list.
Check system: get SMTP and IMAP connection status.
Threading support: correctly thread replies using In-Reply-To/References; create_reply_draft derives recipients, Re: subject, and threading headers.
Transports: run locally via stdio or remotely via Streamable HTTP with a health check.
Email management through ProtonMail and Proton Bridge, including sending, reading, searching, and organizing emails.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ProtonMail MCP Servershow me my unread emails"
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.
ProtonMail MCP Server
Email management for AI agents through ProtonMail and Proton Bridge
Send, read, search, and organize emails from Claude Code, Claude Desktop, Cursor, or any MCP-compatible client.
Quick start
Install from npm (recommended)
npx @ronamosa/protonmail-pro-mcpOr install globally:
npm install -g @ronamosa/protonmail-pro-mcp
protonmail-pro-mcpInstall from source
git clone https://github.com/ronamosa/protonmail-pro-mcp.git
cd protonmail-pro-mcp
npm install
npm linkVerify the install:
which protonmail-pro-mcpPrerequisites -- Node.js >= 18 and Proton Bridge running locally.
Related MCP server: Proton Mail MCP Server
Configuration
cp .env.example .env # then fill in your credentialsVariable | Required | Default | Description |
| Yes | -- | Your ProtonMail email address |
| Yes | -- | Proton Bridge password (not your login password) |
|
| SMTP server host | |
|
| SMTP server port | |
|
| IMAP host (Proton Bridge) | |
|
| IMAP port (Proton Bridge) | |
|
| Enable TLS for IMAP | |
|
| HTTP transport port | |
|
| Enable debug logging |
Security --
PROTONMAIL_PASSWORDis the bridge-generated password, not your ProtonMail login. Never commit.envfiles.
Local development (Cursor)
To test this repo's built output instead of the published npm package:
npm run build
cp .cursor/mcp.json.example .cursor/mcp.json # add your Bridge credentialsRestart Cursor MCP (Settings → MCP → reload). The local server runs node dist/index.js from this workspace.
Manual attachment test (Bridge required)
Sends a self-addressed email with two attachments named dupe.txt, then verifies ambiguous lookup and index-based retrieval:
cp .env.example .env # if you have not already
npm run build
npm run test:attachments:manualThe script leaves the test email in INBOX so you can also exercise get_email_by_id and get_attachment from Cursor.
Usage
Add to ~/.claude.json under mcpServers, or run claude mcp add:
{
"mcpServers": {
"protonmail": {
"type": "stdio",
"command": "npx",
"args": ["@ronamosa/protonmail-pro-mcp"],
"env": {
"PROTONMAIL_USERNAME": "you@protonmail.com",
"PROTONMAIL_PASSWORD": "your-bridge-password"
}
}
}
}Add to ~/.config/claude/claude_desktop_config.json:
{
"mcpServers": {
"protonmail": {
"command": "npx",
"args": ["@ronamosa/protonmail-pro-mcp"],
"env": {
"PROTONMAIL_USERNAME": "you@protonmail.com",
"PROTONMAIL_PASSWORD": "your-bridge-password"
}
}
}
}Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"protonmail": {
"command": "npx",
"args": ["@ronamosa/protonmail-pro-mcp"],
"env": {
"PROTONMAIL_USERNAME": "you@protonmail.com",
"PROTONMAIL_PASSWORD": "your-bridge-password"
}
}
}
}protonmail-pro-mcp --transport http --port 3000Endpoints: POST /mcp, GET /mcp, DELETE /mcp (Streamable HTTP). Health check at GET /health.
Tools
Tool | Description | |
Send |
| Send with to/cc/bcc, HTML, priority, reply-to, threading, attachments |
| Quick test email to verify SMTP | |
Read |
| Fetch from a folder with pagination |
| Full email with body, headers, and attachment metadata (includes | |
| Download an attachment by | |
| Filter by from, to, subject, date, flags, attachments | |
Drafts |
| Create a new draft in the Drafts folder |
| Draft a threaded reply — derives recipients, | |
| Replace an existing draft with new content | |
| Delete a draft | |
| Send a draft via SMTP and remove it from Drafts | |
Act |
| Mark read or unread |
| Star or unstar | |
| Move between folders | |
| Soft-delete to Trash; permanent only if already in Trash | |
Folders |
| List all folders with message counts |
| Force-refresh folder list | |
System |
| SMTP and IMAP connection health |
Threading
Replies thread when the message carries In-Reply-To and References (RFC 5322 §3.6.4).
Subject-line matching alone is not threading — Gmail happens to group on it, most clients do not.
create_reply_draft is the tool to reach for: give it the parent's emailId and a body, and it
derives the recipients, the Re: subject and both headers itself. Assembling the chain by hand is
easy to get wrong, and a wrong chain threads one level deep and then breaks.
create_reply_draft({ emailId: "INBOX:4821", body: "Sounds good." })create_draft, update_draft and send_email also accept inReplyTo and references directly
for cases the helper does not cover.
Every outgoing message now carries a generated Message-ID, so replies to your own sent mail
thread as well. send_draft forwards the draft's threading headers to SMTP — without that a
correctly threaded draft would send un-threaded.
A parent with no Message-ID cannot be threaded to. create_reply_draft returns
threaded: false in that case rather than pretending otherwise.
Architecture
src/
index.ts Entry point, transport selection, graceful shutdown
server.ts McpServer setup, tool registration
config.ts Zod-validated environment configuration
logger.ts Structured stderr logger with credential redaction
types.ts Shared TypeScript interfaces
services/
smtp.ts nodemailer wrapper (lazy connection)
imap.ts imapflow + mailparser wrapper (lazy connection, auto-reconnect)
tools/
sending.ts send_email, send_test_email
reading.ts get_emails, get_email_by_id, search_emails
drafts.ts create_draft, create_reply_draft, update_draft, delete_draft, send_draft
actions.ts mark_email_read, star_email, move_email, delete_email
folders.ts get_folders, sync_folders
system.ts get_connection_statusMcpServer API (SDK v1.29+) with Zod input validation on every tool
Tool annotations (
readOnlyHint,destructiveHint,openWorldHint) per MCP specDual transport -- stdio for local use, Streamable HTTP for remote deployment
Lazy connections -- SMTP and IMAP connect on first use, not at startup
Credential redaction -- passwords scrubbed from all log output
Soft delete --
delete_emailmoves to Trash first; permanent delete only from Trash
Development
npm run dev # Watch mode with tsx
npm run typecheck # Type checking without emit
npm run lint # ESLint
npm run format # Prettier
npm test # Run tests
npm run build # Rebuild (symlink picks up changes automatically)Credits
Originally scaffolded from anyrxo/protonmail-pro-mcp. Completely rewritten with modern MCP SDK, Zod validation, dual transport, and full tool implementations.
License
MIT
Available Tools
18 toolscreate_draftB
Create a new draft email in the Drafts folder
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients, comma-separated | |
| to | No | Recipient email address(es), comma-separated | |
| bcc | No | BCC recipients, comma-separated | |
| body | Yes | Email body content | |
| isHtml | No | Whether body is HTML | |
| replyTo | No | Reply-to email address | |
| subject | Yes | Email subject | |
| inReplyTo | No | RFC 5322 Message-ID of the message being replied to, e.g. '<abc@example.com>'. Prefer create_reply_draft, which derives this for you. | |
| references | No | Full Message-ID chain of the conversation, oldest first. Prefer create_reply_draft, which derives this for you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is known. The description adds that the result lands in the Drafts folder (a non-obvious side effect of a 'create' call), which is real added value, but it says nothing about permissions, persistence, or that creation does not send the email.
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 short sentence with the key fact (drafts folder) front-loaded and zero filler. Appropriately sized for a tool whose parameters are fully documented elsewhere.
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 no parameter gaps, so the description need not explain return values. But for a mutation tool in a dense sibling family, it omits any sibling differentiation and any note that this only stages the message rather than sending it — an agent could confuse it with send_email or send_draft.
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% across all 9 parameters, so the schema fully documents fields, formats, and even the create_reply_draft preference for inReplyTo/references. The description adds no parameter-level information, which is the expected baseline when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a new draft email') and adds the destination scope ('in the Drafts folder'), which distinguishes it from the generic send_email. However it does not differentiate from the sibling create_reply_draft, which also creates drafts; the routing hint for that sibling lives in the schema's inReplyTo description, not the tool description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance. With siblings create_reply_draft, update_draft, and send_draft in the same family, an agent gets no explicit rule for choosing this tool over them — the only disambiguation is buried in a parameter description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reply_draftA
Create a draft reply to an existing email, threaded correctly. Derives recipients, the Re: subject and the In-Reply-To/References headers from the parent message. Does not send.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Additional CC recipients, comma-separated | |
| to | No | Override the derived recipients, comma-separated | |
| bcc | No | BCC recipients, comma-separated | |
| body | Yes | Reply body content | |
| isHtml | No | Whether body is HTML | |
| emailId | Yes | ID of the message being replied to (format: folder:uid) | |
| replyAll | No | Include the parent's To and Cc recipients as well as its sender |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description adds genuinely non-obvious behavior: recipients, the 'Re:' subject, and the In-Reply-To/References headers are derived from the parent message, and no send occurs. It stops short of saying whether an existing draft is replaced or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the core action and threading guarantee front-loaded and the non-send constraint last. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter creation tool with no output schema, the description covers threading derivation, recipient derivation, and the non-send behavior, which is most of what an agent needs. It omits the return value (e.g., a draft ID for later update_draft/send_draft calls), which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does add the concept that recipients are derived from the parent (which explains the optional 'to' override), but it adds no format or syntax detail beyond what the schema already documents per parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a draft reply to an existing email') and immediately qualifies it with 'threaded correctly', which separates it from create_draft, update_draft, and send_draft in the sibling set. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing 'Does not send' draws the boundary against send_draft/send_email, implying this is the right tool when a draft (not a sent message) is wanted. However, it never names the alternative tools or states prerequisites such as needing an existing emailId or an active connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_draftBDestructive
Delete a draft email
| Name | Required | Description | Default |
|---|---|---|---|
| draftId | Yes | Draft ID to delete (format: Drafts:uid) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so description adds no further behavioral context (e.g., permanence, effects on attachments, undo capability). It simply restates the action without expanding on 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, effectively conveying the tool's purpose without unnecessary elaboration.
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 delete tool with one parameter and destructive annotation, the description is sufficient but minimal. It does not clarify what happens after deletion (e.g., success, error responses) or mention if the draft must exist. Could be improved with a brief note on side effects.
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 for the single parameter 'draftId', including format 'Draft:uid'. Description adds no extra meaning beyond the schema, meeting baseline for well-documented 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?
Description states 'Delete a draft email', which clearly specifies the action (delete) and the resource (draft email). This distinguishes it from sibling tools like delete_email, update_draft, and send_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?
The description provides no guidance on when to use this tool versus alternatives, such as delete_email for non-draft emails or update_draft for modifications. It also lacks context about prerequisites like the draft being unsent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_emailADestructive
Delete an email. Moves to Trash first; permanently deletes only if already in Trash.
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | Email ID (format: folder:uid) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint, so the description adds value by detailing the two-step deletion process (Trash first, then permanent). This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with the action. Every sentence provides distinct information, making it highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one required parameter, good annotations, and no output schema, the description fully covers behavior and edge cases. No additional context 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?
Schema coverage is 100% for the single parameter emailId, which already includes description. The tool description does not add additional meaning beyond what the schema provides, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Delete an email' and distinguishes the two-step behavior (moves to Trash first, permanently deletes only if already in Trash). This is specific and differentiates from siblings like delete_draft or move_email.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (for deletion, with awareness of current state), but does not explicitly compare to alternatives like move_email or delete_draft. The two-step process gives some context but lacks explicit when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attachmentCRead-only
Download a specific attachment from an email
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | 0-based attachment index from get_email_by_id; required when filename is duplicated | |
| emailId | Yes | Email ID (format: folder:uid) | |
| filename | Yes | Attachment filename to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond the purpose restatement: it does not say how the attachment is delivered (inline content, base64, saved path) or whether authorization/scoping applies.
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 efficient sentence with the resource and action front-loaded and zero filler. It is arguably too terse for a tool with no output schema, but there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations covering return behavior, the description should explain what 'Download' yields — file content, a URL, or a local save. That gap matters for an agent that must handle the result, and it is left entirely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the emailId format (folder:uid), filename, and the conditional index parameter are all documented in the schema. The description contributes no additional parameter meaning, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Download) and resource (attachment from an email), which is distinguishable from get_email_by_id and get_emails at a glance. It does not explicitly name or contrast with any sibling, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_email_by_id or the other retrieval tools, and no mention of prerequisites. The condition for supplying 'index' (duplicated filenames) exists only in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_connection_statusARead-only
Check the current SMTP and IMAP connection status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false; description adds specificity about checking SMTP and IMAP status, providing value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words, perfectly concise and 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?
Adequate for a zero-parameter read tool; could mention that it returns status object, but annotations and context make it functional.
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 (baseline 4), description adds context about what connection status means (SMTP and IMAP), compensating for absence of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Check' and identifies resource 'current SMTP and IMAP connection status', clearly distinguishing from sibling email operation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives, but the simple zero-parameter tool implies its use for verifying connectivity before other operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_email_by_idARead-only
Get a specific email by its ID with full body and headers
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Body format: text (default), html, or raw (both) | text |
| emailId | Yes | Email ID (format: folder:uid) | |
| includeBody | No | Include email body (set false for headers/metadata only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds that the tool returns full body and headers, which is helpful beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, direct, and front-loaded. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 100% schema coverage, read-only annotations, and no output schema, the description is sufficiently complete. It could mention that the response includes full email content and headers, which it does.
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%, and the description does not add meaning beyond what the schema already provides for each parameter. 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'), resource ('specific email by its ID'), and what is included ('full body and headers'). It distinguishes from sibling tools like get_emails (which lists multiple) and get_attachment (specific attachment).
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 an email ID is known and full content is needed. It does not explicitly state when not to use or alternatives, but the sibling list and context make it clear. Slight room for improvement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emailsARead-only
Fetch emails from a folder with pagination
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of emails to fetch | |
| folder | No | Folder name | INBOX |
| offset | No | Pagination offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to repeat that. It adds pagination context but does not disclose further behavioral traits like rate limits, authentication requirements, or response format. The description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded with the core purpose. It is efficient, though it could benefit from a brief mention of the output without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description should indicate what is returned (e.g., a list of email objects). It does not. For a simple fetch tool, the description is somewhat complete but misses output details. With many sibling tools, additional context would be helpful but not strictly necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described adequately in the schema. The description adds the phrase 'with pagination' which hints at limit/offset usage but does not provide additional parameter semantics beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Fetch emails'), resource ('emails'), and context ('from a folder with pagination'). It effectively distinguishes from siblings like search_emails or get_email_by_id by specifying pagination and folder 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 does not explicitly state when to use this tool versus alternatives. It implies usage for folder-based listing with pagination, but lacks guidance on when to prefer this over search_emails or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_foldersARead-only
List all email folders with message counts
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds 'with message counts', providing behavioral context beyond the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundancy, and front-loaded with the action 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?
No output schema, but the description mentions 'with message counts', giving some idea of return values. For a simple list, it is fairly complete, though it could specify expected fields like folder IDs or names.
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; baseline score of 4 applies. The description does not need to add parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list', resource 'email folders', and includes 'with message counts' which specifies the output. It is distinct from sibling tools like 'sync_folders'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description implies usage for retrieving folder lists, it does not explicitly mention when to use or not use this tool versus alternatives. However, for a simple read-only list tool, this is acceptable.
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 |
|---|---|---|---|
| isRead | No | Set to true for read, false for unread | |
| emailId | Yes | Email ID (format: folder:uid) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not destructive. The description adds no additional behavioral context, such as whether the change is immediate, how it interacts with IMAP, or any side effects. With annotations present, the description does not enhance 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?
A single sentence with no redundant words. Every part is essential: the verb, the resource, and the state options. No fluff or unnecessary structure.
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 of the tool (2 parameters, no output schema, no nested objects), the description is minimally adequate. It explains the core action but could be slightly improved by noting the immediate effect on the email or the need for a connection. Still sufficient for a straightforward operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions for 'emailId' (format) and 'isRead' (default and behavior). 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 action ('mark') and the resource ('email') with the possible states ('read or unread'). It effectively distinguishes this tool from siblings like 'star_email', 'delete_email', and 'move_email' by focusing on the read status flag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., using 'get_emails' to check status, or 'star_email' for importance). It lacks any context about prerequisites (like connection state) or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_emailC
Move an email to a different folder
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | Email ID (format: folder:uid) | |
| targetFolder | Yes | Target folder name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds little beyond the annotations: it states 'move' but does not clarify if the email is copied or removed from the source, nor does it explain permissions, reversibility, or side effects. Annotations indicate it is not read-only and not destructive, but the description does not elaborate on what that implies for the user.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly states the tool's purpose. Every word is necessary, and there is no redundant or irrelevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that modifies state (moving an email), the description lacks information about the return value (e.g., success status) or any confirmation of the operation. Given the absence of an output schema, the description should provide more context about what happens after the move.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the schema already documents both parameters (emailId format 'folder:uid', targetFolder name). The description does not add extra meaning or context beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Move an email to a different folder' clearly states the action (move) and the resource (email) with a target context. It is specific and easily understood, though it does not explicitly differentiate from sibling tools like 'delete_email' or 'star_email'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'get_email_by_id' or 'mark_email_read'. There is no mention of prerequisites, limitations, or comparison with other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_emailsARead-only
Search emails with advanced filters across from, to, subject, dates, and flags
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Filter by recipient | |
| from | No | Filter by sender | |
| limit | No | Max results | |
| query | No | Full-text search query | |
| dateTo | No | End date (ISO format) | |
| folder | No | Folder to search in | INBOX |
| isRead | No | Filter by read status | |
| subject | No | Filter by subject | |
| dateFrom | No | Start date (ISO format) | |
| isStarred | No | Filter starred emails | |
| hasAttachment | No | Filter by attachment presence |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true (safe) and destructiveHint=false. The description adds no new behavioral context such as performance, rate limits, authentication, or result handling. With annotations covering safety, the description provides minimal additional 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?
The description is a single sentence, 12 words, front-loading the key action and filter dimensions. Every word is functional, and it avoids redundancy with schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters and no output schema, the description is insufficient. It does not mention return format, pagination (limit behavior), error handling, or that results are email objects. The openWorldHint annotation suggests variable results, but description adds no clarity.
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 summarizes filter types but does not add semantics beyond the schema (e.g., date format details, how flags interact). No extra value provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a search tool for emails with advanced filters, specifying the filter dimensions (from, to, subject, dates, flags). It distinguishes itself from sibling tools like get_emails (list all) and get_email_by_id (single email) by indicating it offers filtered searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for complex filtering but does not explicitly contrast with simpler alternatives like get_emails. No guidance on when not to use or when to prefer other tools.
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 via SMTP and remove it from Drafts
| Name | Required | Description | Default |
|---|---|---|---|
| draftId | Yes | Draft ID to send (format: Drafts:uid) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false. The description adds the behavioral detail that the draft is removed from Drafts after sending, which is not in annotations. This provides useful context beyond what annotations already indicate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 10 words with no fluff. Every word contributes to the tool's purpose and behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema. The description covers the core action and side effect. It lacks prerequisites (e.g., draft must exist, must be in Drafts), but for this low complexity, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents draftId and its format. The description does not add additional meaning or constraints beyond what the schema provides, thus meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Send' and the resource 'existing draft', and specifies the method (via SMTP) and the effect (remove from Drafts). This distinguishes it from siblings like send_email (which composes new) and delete_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?
The description implies usage when you have a draft to send, but does not explicitly state when to use this tool versus alternatives like send_email or create_draft. No when-not or alternative naming is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailB
Send an email via ProtonMail SMTP with support for CC, BCC, HTML, priority, and attachments
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients, comma-separated | |
| to | Yes | Recipient email address(es), comma-separated | |
| bcc | No | BCC recipients, comma-separated | |
| body | Yes | Email body content | |
| isHtml | No | Whether body is HTML | |
| replyTo | No | Reply-to email address | |
| subject | Yes | Email subject | |
| priority | No | Email priority | normal |
| inReplyTo | No | RFC 5322 Message-ID of the message being replied to, e.g. '<abc@example.com>' | |
| references | No | Full Message-ID chain of the conversation, oldest first | |
| attachments | No | File attachments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, and destructiveHint=false, so the agent knows this is a non-destructive outward-facing write. The description adds that delivery is via ProtonMail SMTP, which is useful context. It omits the irreversibility of sending, any authentication/credential prerequisites, and rate limits — gaps that matter for a real send operation, so it stays at 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the action, transport, and supported features with no filler. Efficient and appropriately sized, though it is arguably terse given an 11-parameter side-effecting tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a side-effecting send tool with 11 parameters and no output schema, the description covers the feature surface but omits auth/credential prerequisites and the irreversibility of dispatch. Annotations carry the safety profile, so the definition is minimally adequate but not complete for the operation's risk level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 11 parameters are documented in the schema (including the RFC 5322 inReplyTo example and attachment encoding). The description only echoes feature names (CC, BCC, HTML, priority, attachments) without adding syntax or format detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource ('Send an email') plus the transport channel (ProtonMail SMTP) and a list of supported features. An agent immediately knows what it does. However, it does not differentiate from close siblings like send_draft, send_test_email, or create_reply_draft, which is the missing piece for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance. With siblings send_draft, send_test_email, and create_reply_draft present, the description should say when to compose-and-send directly versus when to draft first or use the test path. Nothing routes the agent among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_test_emailA
Send a quick test email to verify SMTP is working
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient email address | |
| customMessage | No | Optional custom message body |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only and non-destructive behavior. The description adds that it sends a 'quick test email' for SMTP verification, which is consistent with annotations and clarifies the testing nature. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the action and purpose, with no unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple test tool with full schema coverage and adequate annotations, the description is complete enough. It explains the purpose and scope. There is no output schema, but the return value is likely straightforward (success/failure) and not critical for agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions for both 'to' and 'customMessage'. The description does not add additional meaning beyond what the schema provides; it mentions 'quick test email' but that does not elaborate on parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Send a quick test email to verify SMTP is working', specifying a verb (send), resource (test email), and purpose (verify SMTP). It distinguishes from siblings like 'send_email' and 'send_draft' by emphasizing testing.
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 this tool is for testing SMTP rather than regular email sending, but it does not explicitly state when not to use it or name alternatives like 'send_email'. The context is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
star_emailA
Star or unstar an email
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | Email ID (format: folder:uid) | |
| isStarred | No | Set to true to star, false to unstar |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false) and non-destructiveness. The description adds no additional behavioral details such as authorization needs, error handling, or effects on other actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no extraneous text, front-loaded with the core action. Highly concise and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple toggle operation with two well-documented parameters and no output schema, the description is fully sufficient for the agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. The tool description adds no extra meaning beyond what the schema provides, meeting baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('star or unstar') and the resource ('an email'), distinguishing it from sibling tools like mark_email_read or move_email.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs alternatives, nor prerequisites or conditions. The purpose is clear but lacking usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_foldersARead-only
Force a refresh of the folder list from the IMAP server
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the tool is a safe read. Description adds the 'force refresh' behavior, which is beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words, front-loaded with the 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?
For a simple tool with no parameters and no output schema, the description is complete and sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description does not need to add parameter info; baseline is 4.
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 tool forces a refresh of the folder list from the IMAP server, distinguishing it from sibling get_folders which likely returns cached data.
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 needing an up-to-date folder list, but does not explicitly mention when not to use it or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_draftB
Update an existing draft by replacing it with new content
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients, comma-separated | |
| to | No | Recipient email address(es), comma-separated | |
| bcc | No | BCC recipients, comma-separated | |
| body | Yes | Email body content | |
| isHtml | No | Whether body is HTML | |
| draftId | Yes | Draft ID to update (format: Drafts:uid) | |
| replyTo | No | Reply-to email address | |
| subject | Yes | Email subject | |
| inReplyTo | No | RFC 5322 Message-ID of the message being replied to, e.g. '<abc@example.com>'. Prefer create_reply_draft, which derives this for you. | |
| references | No | Full Message-ID chain of the conversation, oldest first. Prefer create_reply_draft, which derives this for you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so the bar is lower. The phrase 'replacing it with new content' usefully signals full-replacement semantics rather than a merge, but the description says nothing about what happens to unset fields, permission requirements, or whether the draft is re-saved to the same folder.
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 efficient sentence with the key replacement behavior front-loaded. No filler, though it is arguably too terse for a 10-parameter mutation.
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 mutation tool with 10 parameters and no output schema, the description is thin: it never clarifies the replacement-vs-merge contract for the 7 optional fields, nor does it mention the sibling routing hints that the schema carries.
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% and all 10 parameters are documented in the schema, so baseline 3 applies. The description adds no parameter-level detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource (update a draft) and adds the replacement semantics. However it does nothing to distinguish itself from siblings like create_draft, send_draft, or delete_draft, which an agent must pick between.
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 when-to-use guidance, no prerequisites, no alternatives named. The schema mentions create_reply_draft for reply fields, but the description itself offers nothing about when this tool is the right choice over send_draft or create_draft.
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.
5 tool updates
v2.2.0- Changed
create_draft2 fields changed- added
Input schema / properties / inReplyToAdded value: +{ + "description": "RFC 5322 Message-ID of the message being replied to, e.g. '<abc@example.com>'. Prefer create_reply_draft, which derives this for you.", + "type": "string" +} - added
Input schema / properties / referencesAdded value: +{ + "description": "Full Message-ID chain of the conversation, oldest first. Prefer create_reply_draft, which derives this for you.", + "items": { + "type": "string" + }, + "type": "array" +}
- Added
create_reply_draft - Changed
get_attachment1 field changed- added
Input schema / properties / indexAdded value: +{ + "description": "0-based attachment index from get_email_by_id; required when filename is duplicated", + "minimum": 0, + "type": "integer" +}
- Changed
send_email2 fields changed- added
Input schema / properties / inReplyToAdded value: +{ + "description": "RFC 5322 Message-ID of the message being replied to, e.g. '<abc@example.com>'", + "type": "string" +} - added
Input schema / properties / referencesAdded value: +{ + "description": "Full Message-ID chain of the conversation, oldest first", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
update_draft2 fields changed- added
Input schema / properties / inReplyToAdded value: +{ + "description": "RFC 5322 Message-ID of the message being replied to, e.g. '<abc@example.com>'. Prefer create_reply_draft, which derives this for you.", + "type": "string" +} - added
Input schema / properties / referencesAdded value: +{ + "description": "Full Message-ID chain of the conversation, oldest first. Prefer create_reply_draft, which derives this for you.", + "items": { + "type": "string" + }, + "type": "array" +}
17 tool updates
v2.0.0- First observed
create_draft - First observed
delete_draft - First observed
delete_email - First observed
get_attachment - First observed
get_connection_status - First observed
get_email_by_id - First observed
get_emails - First observed
get_folders - First observed
mark_email_read - First observed
move_email - First observed
search_emails - First observed
send_draft - First observed
send_email - First observed
send_test_email - First observed
star_email - First observed
sync_folders - First observed
update_draft
TDQS
Scored across 18 tools
Most tools target clearly distinct resources and actions (folders, emails, drafts, attachments, connection). Minor overlap between get_emails/get_email_by_id/search_emails and between sync_folders/get_folders, though descriptions differentiate list vs. fetch-by-id vs. search and refresh vs. list.
Every tool follows a consistent snake_case verb_noun pattern (get_emails, create_draft, send_email, mark_email_read, move_email). The convention is applied uniformly across all 18 tools with no deviations.
18 tools is slightly heavy but justified for a full email client spanning folders, reading, sending, drafts, attachments, search, and flags. Each tool earns its place with little redundancy.
Covers core lifecycle: list/read/search, send, draft create/update/send/delete, attachments, folders, move, delete, and flags. Gaps include direct reply/forward sending and thread/conversation views, but most workflows are workable.
Maintenance
Related MCP Connectors
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Your agent needs a mailbox of its own — to receive, thread, draft and send, with attachments, without borrowing your personal inbox or your company's SMTP. **What you can ask for** • "Create an inbox for this agent and tell me its address." • "Read the new messages in this thread and draft a reply." • "Send this message with the attachment and wait for the response." • "Search this inbox for everything from that domain." • "Show delivery metrics and the events on this inbox." **How to use it** Point any MCP client at https://mcp.aisa.one/mail/mcp and sign in with OAuth — there is no key to create or paste. 49 tools: create and delete inboxes, list and read messages, raw message bodies, attachments, threads, drafts and draft attachments, send and reply, message search, inbox events, metrics, and list entries — reads and writes. **Why this rather than the source** A real inbox an agent owns, rather than an SMTP credential it borrows from a human. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Find the contact elsewhere in the catalogue, then write to them from here — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/sales/mcp finds the person to write to.
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to send, read, search, and organize email from Proton Mail accounts via SMTP and IMAP.85 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to send, read, search, and organize Proton Mail email via SMTP and IMAP through the Model Context Protocol.MIT
- AlicenseNot gradedqualityCmaintenanceProvides read-only access to Proton Mail via MCP, enabling AI agents to list accounts/folders, search messages, and read emails using Proton Mail Bridge's local IMAP server.MIT
- AlicenseAqualityAmaintenanceEnables AI assistants to read, organize, and send Proton Mail through the local Proton Bridge, with careful gating for sending and attachment access.341Apache 2.0