Skip to main content
Glama
satishkovuru

yahoo-mail-mcp-server

by satishkovuru

yahoo-mail-mcp-server

An MCP server that gives Claude Desktop or Claude Code access to a Yahoo Mail account over IMAP/SMTP: list, search, read, and send email.

Tools

Tool

Description

list_emails

List recent emails in a folder (default INBOX), newest first.

search_emails

Search by sender, subject substring, or unseen status.

get_email

Fetch the full text/HTML body of one email by UID.

send_email

Send an email from the configured account.

Related MCP server: IMAP MCP Server

1. Generate a Yahoo App Password

Yahoo Mail requires an app password, not your normal account password, for third-party IMAP/SMTP access:

  1. Go to Yahoo Account Security.

  2. Enable two-step verification if it isn't already on.

  3. Under "App passwords", generate a new one (e.g. name it mcp-server).

  4. Copy the 16-character password — you won't be able to see it again.

Never use your real Yahoo login password here, and never commit it anywhere.

2. Install

git clone https://github.com/satishkovuru/yahoo-mail-mcp-server
cd yahoo-mail-mcp-server
npm install

3. Configure credentials

Copy .env.example to .env and fill in your address and app password:

cp .env.example .env
YAHOO_EMAIL=you@yahoo.com
YAHOO_APP_PASSWORD=your16charapppassword

.env is gitignored — never commit real credentials.

4. Wire it into Claude Desktop / Claude Code

Add an entry to your MCP client config (claude_desktop_config.json, found under %APPDATA%\Claude\ on Windows or ~/Library/Application Support/Claude/ on macOS; for Claude Code use its .mcp.json or claude mcp add):

{
  "mcpServers": {
    "yahoo-mail": {
      "command": "node",
      "args": ["/absolute/path/to/yahoo-mail-mcp-server/src/index.js"],
      "env": {
        "YAHOO_EMAIL": "you@yahoo.com",
        "YAHOO_APP_PASSWORD": "your16charapppassword"
      }
    }
  }
}

Credentials belong in the env block of your local config file, which stays on your machine — never in a file you commit to a repository.

Restart Claude Desktop (or restart your Claude Code session) and the yahoo-mail tools will be available.

Notes

  • Uses imapflow for IMAP, nodemailer for SMTP, and the official @modelcontextprotocol/sdk.

  • Default IMAP/SMTP hosts are Yahoo's (imap.mail.yahoo.com, smtp.mail.yahoo.com); override via YAHOO_IMAP_HOST, YAHOO_IMAP_PORT, YAHOO_SMTP_HOST, YAHOO_SMTP_PORT if needed.

  • This project is not affiliated with or endorsed by Yahoo.

Available Tools

4 tools
get_emailC

Fetch the full content of one email by UID.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidYesMessage UID from list_emails/search_emails
folderNoINBOX

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and discloses almost nothing: it does not say whether the fetch marks the message as read, what permissions are required, what happens for an invalid UID or folder, or anything about the shape/size of the returned content. 'Full content' is the only behavioral hint.

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?

A single front-loaded sentence with zero filler. It is efficient, though arguably terse to the point of under-specification rather than genuinely well-proportioned.

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 annotations and no output schema, the description should explain what 'full content' means (headers, body, attachments, HTML vs text) and cover the folder parameter. Neither is addressed, leaving real gaps for an agent to call this correctly.

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

Parameters2/5

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

Schema description coverage is 50%: uid is documented but folder is not, and the description adds no meaning for either parameter. Critically, it never mentions the folder parameter or its INBOX default, which materially affects which message is returned.

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 ('Fetch') and resource ('full content of one email') plus the lookup key ('by UID'), which clearly separates it from list_emails and search_emails that return collections. It stops short of naming those siblings explicitly, so it is clear but not maximally differentiated.

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 tool versus list_emails or search_emails, nor any prerequisite guidance such as needing a UID obtained from those tools. The schema comment hints at the source of the UID, but the description itself offers no usage context.

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

list_emailsA

List recent emails in a Yahoo Mail folder (default INBOX), most recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
folderNoIMAP folder nameINBOX

TDQS

A3.7/5.0
Behavior3/5

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

No annotations, so the description carries the burden. It discloses ordering (most recent first) and default folder behavior, but omits read-only safety confirmation, pagination/offset behavior, and what happens when limit is exceeded.

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

Conciseness5/5

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

One sentence, front-loaded with the verb and resource, everything earns its place. No filler.

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 simple read-only list tool this is adequate, but with no annotations and no output schema the description should confirm read-only nature and pagination/return shape. It leaves those gaps.

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 50%: folder has a description in-schema, but limit has none (only default/min/max). The description adds the default INBOX behavior, matching the schema default, but no meaning for limit beyond the numeric bounds.

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 (List) and resource (emails) with scope (recent, in a folder, most recent first). Distinguishable from siblings: search_emails queries, get_email fetches one, send_email writes.

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?

Implies usage for browsing recent mail, but never states when to use this versus search_emails, nor any exclusions (e.g., pagination limits, older mail). Usage is only inferred from the description.

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

search_emailsC

Search emails in a folder by sender, subject substring, or unseen status.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromNoFilter by sender address/name
limitNo
folderNoINBOX
subjectNoFilter by subject substring
unseenOnlyNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. 'Search' implies a read-only operation, but the description says nothing about pagination, result ordering, the default 10-item limit, or what happens with multiple filters combined. For a tool with zero annotation coverage, this leaves significant gaps.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; the filter dimensions are listed immediately after the verb+resource. Nothing is wasted, and the reader gets the core capability in one pass.

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 5 parameters, 40% schema coverage, no annotations, and no output schema, one sentence is not enough. The description omits how results are bounded (limit/default 10/max 50), how filters combine, and what a result contains, all of which an agent needs to invoke and interpret this tool correctly.

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 40% (only 'from' and 'subject' are documented), so the description must compensate. It does name sender, subject, folder, and unseen status, which maps meaning onto the undocumented folder and unseenOnly parameters, but it omits the limit/pagination parameter entirely and adds no syntax hints (e.g. substring matching, case sensitivity).

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 (search) and resource (emails) plus the filter dimensions it supports (sender, subject substring, unseen status). However, it never distinguishes itself from the sibling list_emails, which is the obvious alternative for enumerating a folder's contents, so an agent must infer the search-vs-list boundary.

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 list_emails, get_email, or any other sibling, and no mention of prerequisites or when-not-to-use. The only usage signal is the implied 'use this if you want to filter,' which is weak given the near-identical sibling.

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

send_emailC

Send an email from the configured Yahoo Mail account.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYes
bccNo
bodyYes
subjectYes

TDQS

C2.6/5.0
Behavior2/5

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 indicates that an email is sent from the configured Yahoo account, but it does not disclose side effects, whether the action is reversible, authentication requirements, rate limits, or what happens on failure. The only behavioral context is the configured account scope.

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?

The description is a single, front-loaded sentence with no filler. It is concise and easy to parse, though its extreme brevity contributes to incompleteness rather than being a model of efficient specification.

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?

Given five parameters with zero schema coverage, no annotations, and no output schema, the description is far too thin. It communicates the basic action but omits parameter semantics, usage guidance, and behavioral details needed to invoke the tool correctly. It is not entirely absent, but it is substantially incomplete.

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

Parameters1/5

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

Schema description coverage is 0% and the description mentions no parameter names, formats, or constraints. Five parameters exist (to, subject, body, cc, bcc), yet the description adds no meaning beyond the tool's basic purpose. It does not compensate for the complete lack of schema descriptions.

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 gives a specific verb and resource: 'Send an email'. It also scopes the action to the 'configured Yahoo Mail account', so the agent knows this is a write operation using the existing mail configuration. Sibling tools are all read operations (list_emails, search_emails, get_email), so differentiation is implicit but not explicitly stated.

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?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any preconditions beyond the configured account, nor does it distinguish sending from listing, searching, or getting emails. Usage is left to the agent's inference from the tool name.

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. 4 tool updatesv1.0.0
    • First observedget_email
    • First observedlist_emails
    • First observedsearch_emails
    • First observedsend_email

TDQS

B3.2/5.0

Scored across 4 tools

Disambiguation4/5

list_emails and search_emails both return email lists, but search_emails adds filtering criteria while list_emails is purely chronological. get_email and send_email target distinct resources and actions, making overall selection clear.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (list_emails, search_emails, get_email, send_email). The convention is predictable and easy to scan.

Tool Count4/5

Four tools provide a focused core for basic email interaction without bloat. It is slightly thin for a full email client, but each tool earns its place.

Completeness3/5

Core read and send operations are covered, but common email lifecycle actions like delete, mark read/unread, move, and list folders are missing. Agents can handle simple tasks but will hit dead ends for routine mailbox management.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables Claude to interact with email accounts via IMAP and SMTP, providing tools for searching, reading, sending, and managing emails across multiple providers.
    40
    393 npm
    94
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables Claude to read, search, draft, send, flag, and move email across multiple IMAP/SMTP mailboxes while keeping credentials local.
    -
  • F
    license
    A
    quality
    D
    maintenance
    Enables users to manage their Yahoo Mail account through natural language, including listing, reading, searching, deleting, archiving, flagging, and moving emails via IMAP. Supports both local Claude Desktop integration and remote access with secure OAuth 2.0 authentication.
    11
    -