Skip to main content
Glama
gaddobenedetti

MCP Email

MCP Email

MCP Email is a simple Model Context Protocol (MCP) server that adds email functionality to an AI agent - both POP3 and SMTP.

Configuration allows the registration of the POP3 and SMTP details for an email account that can be used for the purpose of email.

Tools

The following tools are accessible by the attached LLM:

  • pollEmails() Returns the message ID and headers of all the emails presently stored in the slected mailbox. Function has no inputs and returns a list of dict objects.

  • getEmailsById(ids: list) Returns the message ID and message body of all the emails called. Only input is an ID list of all the required messages. Function returns a list of dict objects.

  • deleteEmailsById(ids: list) Deletes a list of emails currenly in the inbox based on ID. Note that deleting any emails invalidates the current order of IDs - as such it is best to prompt the model to carry this action at the end. Function returns nothing.

  • sendTextEmail(fromAddress: str, toAddresses: list, subject: str, body: str) Sends a plain text formatted email via SMTP. Inputs are (in order); outgoing email address, destination addresses, subject text, body text of the email content. Function returns nothing.

  • sendHtmlEmail(fromAddress: str, toAddresses: list, subject: str, body: str) Sends a HTML formatted email via SMTP. Inputs are (in order); outgoing email address, destination addresses, subject text, HTML formatted text of the email content. Function returns nothing.

Installation

Installation to Claude Desktop requires the addition of the following to the developer config file:

{
    "mcpServers": {
        "mcp_email": {
            "command": "uv",
            "args": [
                "--directory",
                "/Absolute/path/to/server/directory/mcp_email",
                "run",
                "main.py"
            ],
            "env": {
                "EMAIL_USER": "Email account username",
                "EMAIL_PASS": "Email account password",
                "POP3_SERVER": "POP3 Server Address",
                "POP3_PORT": "POP3 Server Port Number",
                "SMTP_SERVER": "SMTP Server Address",
                "SMTP_PORT": "SMTP Server Port Number"
            }
        }
    }
}

Please Note: The second argument should be the absolute path to the MCP_EMAIL folder. For windows users it is also assumed that Python is already set up in your Path variable. For Windows installations, the backslashes should be escaped.

Finally the environment variables are should be included so as to be used to receive and send emails via POP3 and SMTP.

Available Tools

5 tools
deleteEmailsByIdB

Deletes a list of emails currenly in the inbox based on ID. Note that deleting any emails invalidates the current order of IDs.

Args: ids: A list of integer based message IDs

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose one meaningful side effect: deleting emails invalidates the current order of IDs. However, it omits whether deletion is permanent/recoverable, whether it requires specific permissions, batch size limits, or failure behavior for invalid IDs.

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

Conciseness4/5

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

Two short sentences plus a brief Args block, with the core action front-loaded and the caveat immediately after. Slightly verbose in restating the parameter, but no wasted text.

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

Completeness3/5

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

For a destructive one-parameter tool with no annotations and no output schema, the description covers the action, the parameter type, and one important side effect, but leaves out permanence, error handling, and where valid IDs originate.

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

Parameters3/5

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

Schema description coverage is 0% and the single parameter is an untyped array (items: {}), so the schema provides almost nothing. The description partially compensates by stating ids is 'a list of integer based message IDs', but gives no format, source, or constraints on those IDs.

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

Purpose4/5

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

States a specific verb+resource (deletes emails) and constrains scope to emails 'currently in the inbox' by ID. It is distinguishable from siblings like getEmailsById and pollEmails, though it never names them explicitly.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus getEmailsById or the send tools, and no prerequisites, authorization notes, or preconditions (e.g. that IDs should come from a prior get/poll call) are given.

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

getEmailsByIdC

Returms a list of emails currenly in the inbox based on ID. Result is a list of dict objects representing the selected emails.

Args: ids: A list of integer based message IDs

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. It notes the return is a list of dict objects, but never says whether fetching marks messages as read, what happens to invalid/unknown IDs, ordering, limits, or permission requirements — significant gaps for an inbox-read tool.

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

Conciseness3/5

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

Front-loaded and short, but it restates the same idea twice ("returns a list of emails" and "Result is a list of dict objects representing the selected emails") and contains typos ("Returms", "currenly") that reduce clarity.

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

Completeness2/5

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

With no output schema, no annotations, and 0% parameter coverage, the description should carry everything; instead it omits error behavior for missing IDs, read-status side effects, and any bound on the ID list. The little it does provide is insufficient for a 1-param tool's full context.

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

Parameters3/5

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

Schema coverage is 0% and the array items are untyped, so the description does real work by specifying that ids are a list of integer message IDs. However it gives no constraints (max batch size, empty-list behavior, duplicate handling), so it only partially compensates for the coverage gap.

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

Purpose4/5

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

The description uses a clear verb+resource ("returns a list of emails ... in the inbox based on ID") so an agent knows it is a batch fetch-by-identifier. It does not explicitly distinguish itself from siblings like pollEmails or deleteEmailsById, so it falls short of a 5.

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

Usage Guidelines2/5

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

There is no statement of when to use this over pollEmails (fetch latest) or deleteEmailsById, and no prerequisites or exclusions. Usage must be inferred entirely from the name, which is weak given four plausible sibling alternatives.

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

pollEmailsB

Returms a list of all emails currenly in the inbox. Result is a list of dict objects representing the email in the current inbox, returning only a subset of the email data (e.g. subject, to address, from adresses) and without returning the message body.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the return shape (subset of fields, no message body), but omits whether this is a read-only operation, pagination/ordering behavior, rate limits, and auth requirements.

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

Conciseness3/5

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

The description is short but repeats the 'current inbox' framing across both sentences ('all emails currently in the inbox' / 'email in the current inbox'), and contains typos ('Returms', 'currenly', 'adresses') that reduce polish. It is front-loaded but mildly redundant.

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

Completeness3/5

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

With no output schema, the description correctly does part of the job by describing the returned subset of fields and the absence of message bodies. However, missing pagination, ordering, and safety/read-only context leaves gaps for a listing tool.

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

Parameters4/5

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

The tool takes zero parameters, so there are no parameter semantics to document. The baseline for a parameterless tool is 4.

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

Purpose4/5

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

The description states a specific verb and resource ('Returns a list of all emails currently in the inbox'), which is clearly distinguishable from siblings like getEmailsById (single email) and the send/delete tools. It doesn't explicitly name a sibling, but the list-all scope is unambiguous.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance, and no mention of the alternative getEmailsById for retrieving a single email. Usage is only weakly implied by 'all emails in the inbox'.

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

sendHtmlEmailB

Sends an email in HTML format. No result is returned.

Args: fromAddress: String. The Originating address. toAddresses: List of strings. The destination addresses. subject: String. The subject line. body: String. The message body.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
subjectYes
fromAddressYes
toAddressesYes

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It usefully states 'No result is returned', which saves the agent from expecting a response object, but says nothing about authentication requirements, deliverability behavior, recipient limits, or failure modes.

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

Conciseness4/5

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

Front-loaded one-line summary of the action and outcome, followed by a compact Args block. Every sentence serves a purpose, with only minor redundancy between the prose summary and the argument list.

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

Completeness3/5

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

Given four required parameters, no annotations and no output schema, the description covers the parameter contract and the absence of a return value. It omits behavioral context such as bulk-recipient handling, encoding/escaping of the HTML body, or error conditions for a mutation-style operation.

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

Parameters4/5

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

Schema description coverage is 0% (properties carry only bare titles like 'Fromaddress'), so the description must compensate and largely does: it documents all four required parameters with types and meaning. It also clarifies that toAddresses is a list of strings, which the schema leaves unresolved (items: {}).

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

Purpose4/5

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

States a specific verb and resource ('Sends an email in HTML format'), which is clearly distinguishable from pollEmails, getEmailsById and deleteEmailsById. It does not explicitly contrast with its closest sibling sendTextEmail, so the HTML-vs-text choice is left for the agent to infer from the name.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool instead of sendTextEmail, nor any prerequisites, conditions, or exclusions. The only implicit signal is 'HTML format' in the opening sentence.

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

sendTextEmailA

Sends an email in text format. No result is returned.

Args: fromAddress: String. The Originating address. toAddresses: List of strings. The destination addresses. subject: String. The subject line. body: String. The message body. All line breaks in the string should be encoded.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
subjectYes
fromAddressYes
toAddressesYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses 'No result is returned' and the line-break encoding requirement, but says nothing about authentication, rate limits, or delivery behavior. Partial coverage of a zero-annotation mutation tool.

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

Conciseness4/5

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

Front-loaded with the action and the return behavior in two short sentences, then a compact arg list. Every line earns its place given the 0% schema coverage, though 'Args:' boilerplate is slightly mechanical.

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

Completeness4/5

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

All four required parameters are described, and the 'no result is returned' statement removes the need for an output schema. Missing behavioral details (auth, failure modes) are the only notable gap for a send-only tool.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does: all four parameters are documented with types and intent, plus a non-obvious formatting requirement for body ('line breaks should be encoded'). Only minor gaps (no address format or multi-recipient semantics) keep it from a 5.

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

Purpose5/5

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

States a specific verb (Sends) and resource (email) with a differentiating qualifier ('in text format') that cleanly separates it from the sibling sendHtmlEmail. An agent can pick between the two variants without reading either schema.

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

Usage Guidelines3/5

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

The 'text format' qualifier implies when to use this versus sendHtmlEmail, but the choice is never stated explicitly and no other context (e.g., recipient limits, when not to use) is given. Usage is inferred rather than directed.

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.

  1. 5 tool updatesv0.1.0
    • First observeddeleteEmailsById
    • First observedgetEmailsById
    • First observedpollEmails
    • First observedsendHtmlEmail
    • First observedsendTextEmail

TDQS

B3.4/5.0

Scored across 5 tools

Disambiguation4/5

pollEmails lists all inbox emails (subset, no body), while getEmailsById retrieves specific emails by ID. The distinction is mostly clear, though both return lists of email objects and the full-body retrieval behavior of getEmailsById is not explicit. Delete and send tools are clearly separate.

Naming Consistency4/5

All tools use camelCase with a verb-first pattern (pollEmails, getEmailsById, deleteEmailsById, sendTextEmail, sendHtmlEmail). The retrieval verbs 'poll' and 'get' differ slightly, but overall naming is predictable and consistent.

Tool Count5/5

Five tools provide a well-scoped minimal email client covering listing, ID-based retrieval, deletion, and two sending formats. Each tool has a clear purpose and the count is appropriate for the stated scope.

Completeness3/5

Core create/read/delete operations are present, but update operations (e.g., mark read/unread, flag, move) and search are missing. It is also unclear whether getEmailsById returns full email bodies, leaving a potential gap for reading message content.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI to send, read, search, delete and reply to emails through SMTP or Gmail API, supporting common email services like QQ, 163, Gmail and Outlook with HTML/text formats and attachments.
    20 npm
    1
    ISC
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables LLMs to read, send, and manage emails via POP3 and SMTP with TLS support.
    5
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with email accounts via IMAP and SMTP, supporting mailbox listing, email search, retrieval, sending, and management.
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to send, read, and manage emails via SMTP and IMAP, with support for attachments, threads, and mailbox organization.
    16
    17 npm
    1
    MIT