Simple IMAP MCP Server
This server is an MCP email assistant that lets you read, search, send, and organize email over IMAP/SMTP.
Search & list emails — search by folder, sender, recipient, subject, date, keyword, or unread status, with pagination.
Fetch email content — retrieve full emails, body-only, or headers by UID.
Manage messages — mark read/unread, move between folders, delete to Trash, and create folders.
Send email — send plain-text or HTML emails, with optional attachments, CC/BCC, and sender override.
Handle drafts — list, save, and delete draft emails.
Wait for emails — poll a mailbox until an email matching conditions arrives or a timeout is reached.
Expose MCP resources & prompts — email body/headers resources, plus prompts for searching, composing replies, and organizing the inbox.
Flexible transport — runs over stdio or Streamable HTTP.
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., "@Simple IMAP MCP Servercheck my inbox for unread emails from today"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Simple IMAP MCP Server
A Node.js IMAP/SMTP MCP server that provides email operations via the Model Context Protocol.
Quick Start
# Install and run locally
npm install @adam-gfam/imap-server
# OR run without installing
npx -y @adam-gfam/imap-serverRelated MCP server: Email Alert MCP Server
Configuration
Copy .env.example to .env and fill in your IMAP/SMTP credentials. See the full Configuration Guide for details.
Usage
Once the server is running, it exposes the following tools, resources, and prompts via the MCP protocol.
Transport Modes
Mode | Use Case | Configuration |
stdio | Claude Desktop, CLI tools, local agents | Default, no config needed |
Streamable HTTP | Remote LLM clients, web dashboards |
|
IMAP Tools
list_folders — List all IMAP mailboxes/folders. Parameters:
folder_pattern,include_subfolders.search_emails — Search emails by criteria (folder, from, to, subject, date, keyword, unread_only). Paginated results.
fetch_email — Fetch full email content including headers, body, and attachments by UID.
get_email_body — Fast body-only fetch (text and/or HTML) for a given UID.
get_email_headers — Minimal-bandwidth header fetch without downloading the body.
mark_as_read — Toggle read/unread status via IMAP FLAGS.
move_email — Move an email to a different IMAP folder (creates destination if needed).
delete_email — Delete an email (moves to Trash).
create_folder — Create a new IMAP mailbox folder (supports hierarchy like
"Work/Projects").list_unread — Quick listing of unread messages with pagination.
SMTP Tools
send_email — Send an email with text or HTML body. Supports
to,subject,body,html,from,cc,bcc.send_email_with_attachment — Send an email with file attachments (
[{ name, content (base64), content_type }]).list_drafts — List draft emails in the Drafts folder.
save_as_draft — Save an email as a draft (plain text or HTML).
delete_draft — Delete a draft email by UID.
MCP Resources
Resource | Description | URI Template |
email_body | Parsed email body text |
|
email_headers | Email headers |
|
MCP Prompts
Prompt | Description | Arguments |
search_emails | "Help me search my emails" | query, date_range, folder |
compose_reply | "Draft a reply to this email" | email_uid, tone |
organize_inbox | "Help me organize my inbox" | criteria, folder |
Documentation
All project documentation is hosted in the Simple IMAP MCP Project collective:
Project Overview — Architecture, tech stack, project structure
API Reference — Complete tool and resource API docs
Source Code Index — Source file inventory
Configuration Guide — Env vars, installation, setup
Contributing
All future design and technical documents must be created directly in the Nextcloud collective, not locally. The collective is the single source of truth for all project documentation.
Tech Stack
MCP Server:
@modelcontextprotocol/serverv2IMAP:
imapflowv1.7SMTP:
nodemailerv9MIME Parser:
mailparserv3.9Schema:
zodv4Env:
dotenvv17
Available Tools
16 toolscreate_folderCreate FolderB
Create a new IMAP mailbox folder
| Name | Required | Description | Default |
|---|---|---|---|
| folder_name | Yes | Folder name (supports hierarchy: "Work/Projects") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It only states the action, omitting side effects like what happens if the folder already exists, whether hierarchy components are created, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, efficient sentence with no fluff, but slightly under-specified; still well-structured 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?
Missing return behavior and error handling. With no output schema, the description should mention what is returned or whether it throws on duplicate names. Incomplete for a mutation 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 provides 100% coverage with a helpful description of folder_name including hierarchy support. The tool description adds no additional parameter context, 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?
Clearly states the verb 'Create' and the resource 'new IMAP mailbox folder', distinguishing it from sibling tools like list_folders which list, not create.
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. It does not mention prerequisites or exclusions, leaving the agent to infer from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_draftDelete DraftC
Delete a draft email
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Draft UID | |
| folder | No | Drafts folder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Delete a draft email' signals destructive intent but gives no information about reversibility, trash behavior, folder implications, or side effects beyond the operation name.
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, direct sentence with no filler or redundant phrases. It is appropriately sized for a simple tool, though it duplicates the title almost exactly and adds only minimal differentiation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter deletion tool, the one-sentence description plus complete parameter schema is minimally usable. However, the absence of annotations, output schema, and usage guidance leaves side effects and tool-selection boundaries unaddressed, so it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'uid' and 'folder' already described in the input schema. The tool description adds no parameter-level meaning, so it neither compensates nor detracts; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and resource ('a draft email'), which is clear and distinct from the sibling tool delete_email by resource type. It doesn't explicitly name the alternative, but the meaning is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use delete_draft versus delete_email, save_as_draft, or list_drafts among the sibling tools. An agent must infer the boundary from the word 'draft' alone; no conditions or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_emailDelete EmailA
Delete an email (move to Trash folder)
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Message UID | |
| folder | No | Source folder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Because no annotations are provided, the description carries the full behavioral disclosure burden. It does disclose an important non-obvious behavior: deletion is implemented as moving to Trash, not permanent destruction. However, it does not mention side effects, permission requirements, or how the optional folder parameter affects the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence that front-loads the action and then adds the essential qualifier about Trash. There is no redundant wording or unnecessary detail, so 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 two-parameter mutation with no output schema, the description plus fully documented schema parameters are nearly sufficient. The main omissions are any statement about what the API returns and whether the delete can be reversed, though 'move to Trash' reasonably implies recoverability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with 'Message UID' and 'Source folder' already documented. The description adds no parameter-level meaning beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb ('Delete') and the resource ('an email'), and the parenthetical 'move to Trash folder' clarifies the exact semantic outcome. This distinguishes it from permanently erasing a message and from sibling operations like move_email or 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?
There is no guidance about when to use this tool versus alternatives. With siblings like move_email and delete_draft present, an agent gets no explicit cue about which tool is appropriate or when this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_waitingEmail Waiting (Polling)A
Poll a mailbox repeatedly until an email matching conditions is found or timeout elapses
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | IMAP folder, default "INBOX" | |
| timeout | No | Max seconds to wait, default 30 | |
| conditions | No | Search conditions (same as search_emails) | |
| poll_interval | No | Seconds between polls, default 2 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the polling loop, repeated checks, and timeout termination, but it does not state whether pre-existing matching emails are considered, whether messages are marked as read, what happens exactly on timeout, or what the return value looks like. Core behavior is visible, but edge behavior is undocumented.
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 front-loads the core operation ('Poll a mailbox repeatedly') and names both stopping conditions concisely. There is no wasted text, and the description is highly scannable.
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?
All parameter semantics are covered by the schema, and the conditions object is explicitly tied to search_emails, which helps. However, with no output schema, the description should clarify what a successful result vs a timeout result looks like, and whether pre-existing matching emails are included. These gaps require the agent to infer behavior beyond what is written.
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 itself adds no parameter details beyond what the schema already provides; it only refers to 'conditions', which the schema defines thoroughly. This is acceptable but not additive.
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 ('poll') and resource ('a mailbox'), and clearly states the two stopping conditions: a matching email is found or timeout elapses. This separates it from one-shot tools like search_emails and leaves no ambiguity about the tool's core function.
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 polling behavior implies this is for waiting scenarios, and the schema notes conditions are 'same as search_emails', but the description never explicitly says when to use email_waiting instead of search_emails or what prerequisites apply. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_emailFetch EmailB
Fetch full email content including headers, body, and attachments
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Message UID in the folder | |
| folder | No | IMAP folder, default "INBOX" | |
| include_body | No | Include parsed body, default true | |
| include_attachments | No | Include attachment data, default false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It does not state whether fetching affects read/unread state, what the default attachment behavior is, or what the response looks like; 'including attachments' is also stronger than the include_attachments default of false.
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 wasted words. It puts the core action and resource first.
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?
There is no output schema or annotations, and the description does not clarify that attachments are off by default or explain how this tool relates to get_email_body/get_email_headers. An agent selecting among the many email siblings gets minimal decision-relevant context.
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 lightly maps output content (headers, body, attachments) to the include_body and include_attachments parameters but adds no syntax or additional 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?
The description uses a specific verb ('Fetch') and resource ('full email content') and enumerates the components (headers, body, attachments). This distinguishes it from the sibling granular tools get_email_body and get_email_headers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'full email content' implies you should use it when needing a complete message, but the description never explicitly states when to prefer it over get_email_body or get_email_headers, nor does it state exclusions. The guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_email_bodyGet Email BodyB
Fetch only the body (text and/or HTML) of an email
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Message UID | |
| folder | No | IMAP folder | |
| text_only | No | If true, return only plain text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that both text and HTML body may be returned, but it does not state whether fetching marks the email as read, how MIME parts are handled, what the default return format is, or what happens when no body is found. This is a meaningful gap for an email tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler. It immediately communicates the tool's purpose and key output distinction, making it easy for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with full schema coverage, the description gives the core idea but leaves out behavioral details that matter in an email context, such as whether the operation has side effects like marking the email as read. It also does not describe the output structure, which is notable because there is no output schema to fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides full descriptions for all three parameters, so the baseline is 3. The description does not add extra semantic detail beyond mentioning text/HTML bodies, which partially aligns with the text_only parameter but does not elaborate on defaults or interactions between 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 states a specific verb ('Fetch') and a specific resource ('body of an email'), and the qualifier 'only' helps set it apart from sibling tools like get_email_headers. However, it does not explicitly distinguish itself from fetch_email, which could also return the body as part of a full message.
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 retrieving just the email body rather than headers or full messages, but it does not explicitly say when to prefer it over fetch_email or get_email_headers. There are no explicit exclusions or alternative-routing statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_email_headersGet Email HeadersA
Fetch only email headers - minimal bandwidth, no body download
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Message UID | |
| folder | No | IMAP folder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of explaining behavior. It discloses that only headers are fetched and that no body is downloaded, which is useful. However, it does not mention response format, error behavior for invalid UIDs, or whether folder selection has side effects, leaving some 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?
The description is a single front-loaded sentence with no filler. Every word contributes meaning, especially the bandwidth/no-body qualifier which 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 read-like tool with only two parameters, the description is largely sufficient. It lacks an output schema and annotations, so a bit more detail about what 'headers' includes could strengthen it, but the core invocation context is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with uid described as 'Message UID' and folder as 'IMAP folder.' The description adds no parameter-specific meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Fetch only email headers' with the explicit qualifier 'no body download.' This clearly distinguishes it from siblings like get_email_body and fetch_email even without inspecting them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the intended use case: retrieving just headers for minimal bandwidth. It does not explicitly name alternatives or state when not to use this tool, but the context is clear enough for an agent to make the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_draftsList DraftsA
List draft emails in the Drafts folder
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results | |
| folder | No | Drafts folder name, default "Drafts" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavior. 'List' implies a read-only operation, but the description does not mention what is returned (e.g., summaries vs. full emails), pagination, or any side effects. It is adequate for a simple list operation but lacks richer detail.
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 that states the core behavior with no filler. The essential information is front-loaded and 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 list tool with two optional parameters fully documented in the schema and no output schema, the description is sufficient to understand what the tool does. It lacks explicit usage guidance, but that gap is covered by the purpose clarity and schema; no critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'limit' and 'folder' already documented in the input schema. The description adds no additional meaning about the parameters, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the specific resource ('draft emails in the Drafts folder'). This is immediately distinct from sibling tools like list_unread (which lists unread messages) and search_emails (which searches broadly), so an agent can identify it 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 description provides no guidance on when to choose this tool over alternatives such as search_emails or list_unread, nor does it mention any exclusions or prerequisites. An agent is left to infer usage from the tool name and brief phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foldersList IMAP FoldersC
List all IMAP mailboxes/folders in the account
| Name | Required | Description | Default |
|---|---|---|---|
| folder_pattern | No | IMAP wildcard pattern, default "*" | |
| include_subfolders | No | true for recursive listing |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavior. It only states that the tool lists folders; it does not mention whether the operation is read-only, what output format to expect, or how include_subfolders alters the result.
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 filler. It is efficiently packaged, though it is short enough that some behavioral details are absent.
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, has only optional parameters, and the schema documents those parameters well. However, without an output schema or annotations, the description does not disclose the return shape or any edge-case behavior, and it does not help differentiate from sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both folder_pattern and include_subfolders already documented in the input schema. The description adds no parameter-level detail, which is acceptable given the complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'List all IMAP mailboxes/folders in the account.' It distinguishes the tool from email-centric siblings like fetch_email and list_unread, though it doesn't explicitly name an alternative like list_folders versus create_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?
There is no guidance on when to use this tool versus alternatives such as list_unread or search_emails. The context is implied by the name but not stated, and no exclusions or preferred conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_unreadList Unread MessagesB
Quick listing of unread messages with pagination
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results, default 50 | |
| folder | No | IMAP folder, default "INBOX" | |
| offset | No | Pagination offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It reveals pagination but does not state whether the tool is read-only, whether it marks messages as read, what fields are returned, or how it handles empty results or invalid folders. 'Quick' is too vague to substitute for concrete behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no redundant detail. It front-loads the primary action and resource, then notes pagination. Every word earns its place, aside from the mildly subjective 'Quick,' which is not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple listing tool with all parameters documented in the schema, which helps. However, without an output schema or annotations, an agent still lacks clarity about what a listed message contains and whether any side effects occur. The description is minimally viable but leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents limit, folder, and offset meaning. The description adds only the word 'pagination,' which aligns with offset/limit but provides no additional semantic value beyond the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb ('listing') and resource ('unread messages'), and mentions pagination. It is distinguishable from siblings like fetch_email or get_email_body, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Quick listing of unread messages' implies the tool is for lightweight enumeration of unread items, and pagination hints at large-result scenarios. However, it gives no explicit guidance about when to choose this over search_emails, fetch_email, or get_email_headers, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_as_readMark as ReadB
Mark messages as read or unread using IMAP FLAGS
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Message UID | |
| read | Yes | true = mark read, false = mark unread | |
| folder | No | IMAP folder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does reveal that this mutates IMAP flags and supports both read and unread states, implying reversibility via the read parameter. However, it does not disclose required permissions, whether marking read affects list_unread or other views, or what is returned on success or failure.
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 action-first sentence with no filler. Every word contributes to the operation ('Mark', 'messages', 'read or unread', 'IMAP FLAGS').
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 mutation with two required parameters, the schema plus description is mostly usable. Gaps include behavior when the optional folder is omitted, whether the change affects unread lists, and any return or error contract, especially since no output schema or annotations are provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all three parameters with descriptions (100% coverage), including the UID, the read boolean meaning true/false, and the folder. The description restates the read behavior and adds the IMAP FLAGS context, but it does not add syntax details, defaults, or edge-case semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Mark'), a resource ('messages'), and the possible states ('read or unread'), and adds the protocol mechanism 'using IMAP FLAGS.' It is unambiguous against siblings like fetch_email or list_unread, but it does not explicitly call out alternative tools or scope boundaries, so it stops short of the top score.
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 siblings such as list_unread or fetch_email, nor any prerequisites, exclusions, or when-not-to-use conditions. The only inferable usage context is a direct restatement of the action itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_emailMove EmailA
Move an email to a different IMAP folder
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Message UID | |
| to_folder | Yes | Destination folder (creates if needed) | |
| from_folder | No | Source folder, default "INBOX" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It only states the verb 'Move' and does not disclose side effects such as removal from the source folder, irreversibility, permissions, or what happens if the destination folder does not exist. It adds no behavioral context beyond the obvious 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?
The description is a single, front-loaded sentence with no filler or redundant phrases. Every word is meaningful and directly communicates the 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?
The tool is simple and its three parameters are fully documented in the schema, so an agent can determine how to call it. However, since no annotations exist and the move is effectively destructive, a brief note about source-removal behavior or return value would round out the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters: uid, to_folder, and from_folder. The description adds no parameter-level detail beyond what the schema provides, meriting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Move' and identifies the resource 'email' with a destination qualifier 'different IMAP folder'. It clearly distinguishes this operation from sibling tools like delete_email, fetch_email, or create_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?
The description clearly conveys the action and context: moving an email between IMAP folders. It does not explicitly mention when to avoid this tool or suggest alternatives, but the context is unambiguous and sufficient for basic selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_as_draftSave as DraftC
Save an email as a draft
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients | |
| to | No | Recipients | |
| body | Yes | Draft body (plain text) | |
| html | No | Optional HTML body | |
| subject | Yes | Draft subject |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only repeats the basic action without any detail on side effects, permissions, whether existing drafts are overwritten, or what happens upon success. This is a mutation tool and the description offers zero behavioral context beyond the name.
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. It is front-loaded with the core action. However, it is so minimal that it borders on under-specification, though that is captured under completeness rather than conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters, two required, no output schema, and no annotations, this description is severely incomplete. It does not explain what the tool returns, whether it creates a new draft or updates an existing one, or any side effects. An agent cannot anticipate the outcome or prerequisites from this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters. The description adds no additional meaning about parameter relationships, constraints, or expected format. Baseline 3 is appropriate since the schema handles parameter 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?
The description states a specific verb ('save'), resource ('email'), and result ('as a draft'), clearly distinguishing it from siblings like send_email, list_drafts, and delete_draft. An agent can immediately tell what the tool does and what it does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that it should be used instead of send_email when not ready to send, nor does it exclude any contexts. The intended usage is only implicitly understood from the action itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_emailsSearch EmailsB
Search emails by criteria, returning paginated results
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Recipient address filter | |
| from | No | Sender address filter | |
| limit | No | Max results, default 50 | |
| folder | No | IMAP folder, default "INBOX" | |
| offset | No | Pagination offset, default 0 | |
| date_to | No | ISO 8601 date | |
| keyword | No | General body/keyword search | |
| subject | No | Subject substring match | |
| date_from | No | ISO 8601 date, e.g. "2026-08-01" | |
| unread_only | No | Only unread messages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It does disclose that results are paginated, but it does not mention ordering, search semantics (AND vs OR), whether folder defaults apply, or any read-only guarantee. The disclosure is minimal but not absent.
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 filler. It communicates the essential action and result shape efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This tool has 10 parameters, no output schema, and no annotations, yet the description is extremely terse. It does not clarify search behavior, result ordering, return structure, or how filters combine. More detail is needed for an agent to confidently select and invoke this tool in complex scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 10 parameters. The description does not add meaning beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Search'), a resource ('emails'), and a general behavior ('by criteria, returning paginated results'). It is clear enough to separate this from fetch_email or get_email_body, though it does not explicitly name or contrast sibling tools like list_unread.
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 given about when to use this tool versus alternatives such as list_unread, fetch_email, or get_email_body. There are no exclusions, prerequisites, or context cues beyond the generic 'by criteria'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailSend EmailC
Send an email with text or HTML body
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients | |
| to | Yes | Recipient(s) | |
| bcc | No | BCC recipients | |
| body | Yes | Email body (supports HTML) | |
| from | No | Override sender, uses config default | |
| html | No | Optional HTML body (if body is plain text) | |
| subject | Yes | Email subject |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It merely says 'send an email,' implying a side-effecting operation, but does not describe delivery guarantees, required authentication, validation of recipients, or how the body and html fields interact. Nothing beyond the basic action is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single eight-word sentence, front-loading the core action and content type. Every word earns its place; there is no redundant phrasing or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven parameters, three required, no annotations, and no output schema, the description is under-specified. It does not explain optional parameters (cc, bcc, from), disambiguate body vs html, or signal whether attachments are unsupported here. The presence of a sibling with attachment support makes this ambiguity costly.
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, so baseline is 3. The description adds a small semantic cue that the body can contain text or HTML, but it does not clarify the relationship between the distinct body and html parameters, which is a likely source of confusion. It neither enriches schema meaning nor resolves ambiguity, so it stays at 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 action ('Send') and resource ('an email'), and specifies content type ('text or HTML body'). However, it does not differentiate from the sibling tool send_email_with_attachment, which is likely to be confused with this one. The lack of explicit 'without attachment' leaves some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives. There is no mention of the sibling send_email_with_attachment for emails with files, or save_as_draft for drafts. An agent must infer the appropriate context from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_email_with_attachmentSend Email with AttachmentC
Send an email with file attachments
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients | |
| to | Yes | Recipient(s) | |
| body | Yes | Email body | |
| from | No | Override sender, uses config default | |
| subject | Yes | Email subject | |
| attachments | Yes | List of file attachments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden for disclosing behavior. 'Send' implies an outbound side effect, but the description does not mention sender defaults, recipient impact, attachment encoding expectations, failure behavior, or whether the action is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler and the core action is front-loaded. It is efficient but minimal, so it earns a high score for conciseness even though it leaves behavioral guidance to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, nested attachment objects, no annotations, and no output schema, the description is too sparse to fully guide an agent. It omits routing between send_email and send_email_with_attachment, attachment constraints, sender default behavior, and expected results after sending.
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 describes all 6 parameters, including to, cc, from, subject, body, and the attachments nested object with name, content, and content_type. Since schema coverage is 100%, the description does not need to compensate, but it also adds no parameter-level 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?
Description states a specific verb ('Send'), a resource ('email'), and scope ('with file attachments'), which distinguishes it from the sibling send_email tool. However, it is nearly identical to the title and does not explicitly describe what makes this tool different from other email-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus send_email or the draft/save variants. The sibling list suggests an alternative, but the description gives no explicit when-to-use or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct operation—full fetch, body-only, headers-only, flags, folder ops, drafts—but send_email and send_email_with_attachment, plus the three retrieval variants, have close functional boundaries that require careful description reading.
Most names follow snake_case verb_noun, but verbs are inconsistent (fetch vs get vs list), list_unread omits the object, and email_waiting reverses the expected verb-object order.
Sixteen tools is on the high end but each maps to a real email workflow—retrieve, search, send, draft, folder management—so the count is only slightly above the ideal range.
The surface covers retrieval, search, read state, move/delete, folder listing/creation, sending with and without attachments, and draft CRUD. Missing folder deletion/rename and attachment-only retrieval are minor gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables email integration via IMAP and SMTP, allowing model assistants to read, send, search emails, and list folders.7714ISC
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to read, filter, send emails, and check unread counts via the Model Context Protocol using Gmail SMTP/IMAP.
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to send, read, search, and organize Proton Mail email via SMTP and IMAP through the Model Context Protocol.MIT
- AlicenseNot gradedqualityDmaintenanceEnables reading, searching, sending, replying, forwarding emails, and managing labels in Gmail through the Model Context Protocol.873MIT
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/gfam-git/Imap-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server