Yahoo Mail MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Yahoo Mail MCP Servercheck my inbox for unread emails from my boss"
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.
Yahoo Mail MCP Server
An MCP server that gives Claude access to a Yahoo Mail account: read messages, create folders, move messages between folders, and compose/send email. It connects directly to Yahoo's IMAP and SMTP servers using an app password — Yahoo does not offer a general-purpose OAuth Mail API for third-party apps, so this is the supported way to integrate.
There are two ways to install it — pick whichever fits how much you want to inspect before running it:
Quick start (npm) — no clone, no build, one config block.
Build from source (GitHub) — clone and compile it yourself so you know exactly what's running.
1. Generate a Yahoo app password
Yahoo requires an app-specific password for IMAP/SMTP access (your normal account password will not work, especially if 2-step verification is on).
Sign in at https://login.yahoo.com and go to Account Info → Account Security.
Turn on 2-step verification if it isn't already on (required for app passwords).
Under App passwords, click Generate app password, name it (e.g. "Claude MCP"), and copy the generated password. You won't be able to view it again.
Related MCP server: yahoo-mail-mcp
Quick start (npm)
No install step required — npx fetches and runs the package on demand. Add this to
your Claude config (claude_desktop_config.json, reachable from Claude Desktop's
Settings → Local MCP servers → Edit config):
{
"mcpServers": {
"yahoo-mail": {
"command": "npx",
"args": ["-y", "local-mcp-server-yahoo-mail"],
"env": {
"YAHOO_EMAIL": "you@yahoo.com",
"YAHOO_APP_PASSWORD": "your-16-char-app-password"
}
}
}
}Or with the Claude Code CLI:
claude mcp add yahoo-mail --env YAHOO_EMAIL=you@yahoo.com --env YAHOO_APP_PASSWORD=xxxxxxxxxxxxxxxx -- npx -y local-mcp-server-yahoo-mailFully quit and relaunch Claude Desktop afterward — MCP servers are only loaded at startup.
Build from source (GitHub)
Prefer to read and compile the code yourself before it touches your inbox:
git clone https://github.com/prakash-murali/local-mcp-server-yahoo-mail.git
cd local-mcp-server-yahoo-mail
npm install
npm run buildThen point your config at the built file instead of npx:
{
"mcpServers": {
"yahoo-mail": {
"command": "node",
"args": ["/absolute/path/to/local-mcp-server-yahoo-mail/dist/index.js"],
"env": {
"YAHOO_EMAIL": "you@yahoo.com",
"YAHOO_APP_PASSWORD": "your-16-char-app-password"
}
}
}
}Environment variables
Variable | Required | Default | Description |
| yes | — | Your full Yahoo Mail address |
| yes | — | App password generated in step 1 |
| no |
| IMAP host override |
| no |
| IMAP port override |
| no |
| SMTP host override |
| no |
| SMTP port override |
| no |
| Set to |
Credentials are never written to disk by this server — they're read from environment variables at startup and used only to authenticate to Yahoo's IMAP/SMTP servers over TLS.
Try it read-only first
If you'd rather not grant write/send access right away, set YAHOO_MCP_READ_ONLY to
true in the env block. The server won't even register the create_folder,
move_message, or send_email tools — Claude can only list folders and read messages
until you turn it off.
Tools
list_folders — list all folders/mailboxes (Inbox, Sent, Drafts, Trash, custom folders).
create_folder — create a new folder; use
/for nested paths (Projects/Alpha).list_messages — list message summaries in a folder, with optional filters (unread only, sender, subject substring, since date) and a result limit.
get_message — fetch the full text/HTML body of one message by folder + UID.
move_message — move a message from one folder to another by UID.
send_email — compose and send an email (to/cc/bcc, subject, text and/or HTML body, optional reply threading headers).
Security
This server is a thin, auditable bridge between Claude and Yahoo's own mail servers — there's no third-party backend in between.
No network calls other than to Yahoo. The only hosts this code talks to are
imap.mail.yahoo.comandsmtp.mail.yahoo.com(or whatever you override them to), both over TLS. No telemetry, no analytics, no other endpoint.Small, readable codebase. The entire implementation is ~5 files under
src/— read it yourself before trusting it with your inbox.App password, not your real password. It's scoped to IMAP/SMTP and can be revoked independently at any time from Yahoo Account Security, without touching your main login credentials.
Credentials stay local. They're read from environment variables at process start and are never logged or written to disk by this code.
Well-known dependencies.
imapflow,nodemailer,mailparser, and the official@modelcontextprotocol/sdk— all widely used, independently auditable packages.Optional read-only mode. Set
YAHOO_MCP_READ_ONLY=trueto disable all write/send capability while you evaluate it (see above).
If you find a security issue, please open an issue rather than a public PR with exploit details.
Development
npm run dev # tsc --watch
npm start # run the built server directly (for manual stdio testing)Available Tools
6 toolscreate_folderCreate a Yahoo Mail folderA
Create a new folder (mailbox) in Yahoo Mail. Use '/' to specify a nested folder path, e.g. 'Projects/Alpha'.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Folder path to create, e.g. 'Projects' or 'Projects/Alpha'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It reveals that '/' is used for nested paths, which is a useful syntax detail, but it does not disclose other behavioral traits such as error handling (e.g., if the folder already exists), permission requirements, or whether the operation is idempotent. The description implies mutation but omits significant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with zero filler. The primary purpose is stated first, followed by a concise syntax hint. Every sentence earns its place, and it is appropriately front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter creation tool, the description covers the essential usage: what it does and how to specify the path. Given the low complexity and full schema coverage, the description is mostly sufficient. It could mention behavior on existing paths, but that is not critical for a basic create operation. The absence of an output schema reduces the need to explain return values.
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%: the 'path' parameter already has a description with examples ('Projects' or 'Projects/Alpha'). The description repeats the example and the '/' nesting rule, but adds no additional meaning beyond what the schema provides. With full schema coverage, the baseline is 3, and the description contributes no extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('a new folder (mailbox) in Yahoo Mail'). This clearly distinguishes it from sibling tools like list_folders, get_message, or send_email, which all handle different operations. The purpose is immediately obvious and 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 gives a clear context for when to use it (to create a folder) and includes a nested path example. However, it does not explicitly state when not to use it or name alternatives, though the verb 'create' already contrasts with the sibling tools' operations. The context is clear, but explicit exclusion guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messageGet a message's full contentA
Fetch the full content (text and HTML body) of a single message by folder and UID.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UID of the message, as returned by list_messages. | |
| folder | Yes | Folder path containing the message, e.g. 'INBOX'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It does describe the return content and the operation as a fetch, which strongly implies read-only behavior. However, it does not explicitly rule out side effects such as marking the message as read, nor does it describe error behavior or access 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?
The description is one concise sentence with no filler. It front-loads the main behavior and includes the essential parameters needed to invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter retrieval tool with full schema coverage, the description is largely complete. It explains what will be returned (text and HTML body) even though there is no output schema. It would benefit from clarifying whether fetching affects message state, but everything else an agent needs to call it is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters, their types, and the UID's source. The description mentions folder and UID but adds no new parameter semantics beyond restating the identifiers.
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 ('Fetch'), a specific resource ('full content (text and HTML body) of a single message'), and the identifying inputs ('folder and UID'). This distinguishes it from siblings like list_messages, which lists messages rather than retrieving one message's full content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving a single message's full body, but it does not explicitly state when to choose this over list_messages or any other sibling. The schema does note that UID comes from list_messages, but the description itself provides no direct when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foldersList Yahoo Mail foldersA
List all folders/mailboxes in the Yahoo Mail account, including special-use folders like Inbox, Sent, Drafts, and Trash.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full disclosure burden. It adds useful scope detail by mentioning special-use folders, but it does not state whether the operation is read-only, how results are ordered, whether hidden folders are included, or the response shape. For a simple list operation this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. The action and object appear first, and the special-use folder examples add meaningful detail without bloat.
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 zero-parameter list tool with no output schema, the description is complete enough to let an agent invoke it correctly. It clearly defines what is returned (all folders/mailboxes, including special-use ones). It could mention read-only behavior, but nothing essential 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?
There are zero parameters and schema description coverage is 100% vacuously, so the baseline is 4. The description adds no parameter-specific detail, but none is needed because no parameters exist.
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 folders/mailboxes in the Yahoo Mail account.' It also gives concrete examples (Inbox, Sent, Drafts, Trash) that define the scope and distinguish it from siblings like list_messages 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 use case is implied rather than explicit: if an agent needs the folder list, this tool is the obvious choice. However, the description does not name alternatives, when-not-to-use, or any exclusions, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_messagesList messages in a folderA
List message summaries (subject, from, to, date, read status) in a given folder, optionally filtered by unread status, sender, subject text, or date.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Filter by sender address/name substring. | |
| limit | No | Max number of messages to return, newest first. Defaults to 20. | |
| since | No | Only return messages received on/after this ISO 8601 date. | |
| folder | Yes | Folder path to list messages from, e.g. 'INBOX'. | |
| subject | No | Filter by subject substring. | |
| unseenOnly | No | Only return 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 burden. It discloses that it returns summaries rather than full messages, and that results are newest first via the limit parameter. However, it doesn't mention pagination behavior beyond limit, whether the folder must exist, or what happens with invalid folder paths. For a read-only listing tool, this is adequate but not rich.
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, well-structured sentence that front-loads the core purpose and then lists the optional filters. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema, the description explains what fields are returned and the ordering. It doesn't mention pagination beyond limit, error behavior for nonexistent folders, or whether the 'since' filter is inclusive. These are minor gaps for a simple read-only listing tool, but with no annotations and no output schema, a bit more detail would help.
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 six parameters. The description adds the 'newest first' ordering detail and the summary fields, but doesn't add much beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (list), the resource (message summaries in a folder), and the specific fields returned (subject, from, to, date, read status). It also names the filtering dimensions, making it easy to distinguish from siblings like get_message (single message) and list_folders (folders).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you need message summaries in a folder, optionally filtered. It doesn't explicitly exclude alternatives like get_message for full message content or send_email for composing, but the sibling names and the summary scope make the context reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_messageMove a message between foldersC
Move a single message from one folder to another by UID.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UID of the message to move. | |
| destFolder | Yes | Folder path to move the message into. | |
| sourceFolder | Yes | Folder path currently containing the message. |
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 states the action ('move') but does not explicitly disclose the destructive nature (removing from source), potential side effects, permission requirements, or error conditions. The description merely restates the title's action without adding operational 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?
The description is a single, direct sentence with no superfluous words. It is front-loaded with the action and the key identifier (UID). Every word earns its place; this is exemplary 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 mutation tool with no annotations and no output schema, the description is too sparse. It does not explain what happens to the source message, whether the move is atomic, or how failures are reported. Given that it changes state, an agent would benefit from knowing the destructive implication and any constraints (e.g., folder existence). The description leaves too much to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters (sourceFolder, uid, destFolder) with descriptions. The description mentions 'by UID' which reinforces the uid parameter, but adds no extra semantic meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: moving a single message between folders by UID. The verb 'move' and resource 'message' distinguish it from sibling tools like list_messages, get_message, send_email, and folder operations. However, it does not explicitly name any sibling or provide differentiation criteria, 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.
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, no prerequisites, and no exclusions. It is entirely silent on whether to prefer move_message over copy, delete, or other operations. The context of usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailCompose and send an emailB
Compose and send a new email from the configured Yahoo Mail account. Provide plain text and/or HTML body.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC address(es), comma-separated. | |
| to | Yes | Recipient address(es), comma-separated for multiple. | |
| bcc | No | BCC address(es), comma-separated. | |
| html | No | HTML body. | |
| text | No | Plain text body. | |
| subject | Yes | Email subject. | |
| inReplyTo | No | Message-Id being replied to, for threading. | |
| references | No | References header value, for threading. |
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 behavioral disclosure. It states the tool sends an email, which implies a side effect, but it does not disclose whether sending is irreversible, whether it requires authentication beyond the configured account, whether it validates recipients, or what happens on failure. It also does not mention that both text and html can be provided together or how the email client handles that. For a mutating tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the main action and resource, then adds the body-format detail. It is concise and every word earns its place. It could arguably include more behavioral context, but for its length it is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a mutating tool with no annotations and no output schema, the description is incomplete. It does not explain return values, error behavior, sending semantics (e.g., whether it actually sends immediately), or any constraints like attachment support. The schema covers parameters, but the description leaves out important operational context an agent would need to invoke the tool correctly and anticipate consequences.
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 8 parameters. The description adds the context that the body can be plain text and/or HTML, which maps to the text and html parameters, but it does not add meaning beyond the schema for the other parameters. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Compose and send'), a resource ('a new email'), and the source account ('configured Yahoo Mail account'). It also mentions the two body formats (plain text and/or HTML), which distinguishes it from sibling tools like list_messages or get_message. The title reinforces the same action, so an agent can tell what this tool does 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 implies the tool is for sending new emails and mentions the configured account, which gives some context. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or prerequisites (e.g., that it cannot be used to draft, schedule, or send from other accounts). The sibling list shows other email operations, but the description itself does not route the agent to them.
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.
6 tool updates
v1.0.0- First observed
create_folder - First observed
get_message - First observed
list_folders - First observed
list_messages - First observed
move_message - First observed
send_email
TDQS
Scored across 6 tools
Each tool targets a distinct action and resource: folders vs. messages vs. sending. list_messages and get_message are clearly separated as summary vs. full content, so there is no real ambiguity.
All tool names follow a consistent verb_noun pattern: list_folders, create_folder, list_messages, get_message, move_message, send_email. This makes the toolset predictable and easy to navigate.
Six tools is a well-scoped size for an email-focused server. Each tool covers an essential part of the core workflow without unnecessary bloat or redundancy.
The core email flows are covered: listing folders and messages, reading, moving, sending, and creating folders. However, obvious operations like deleting messages, marking read/unread, and renaming or deleting folders are missing, creating notable gaps for full mailbox management.
Related MCP Connectors
Your mailboxes in ChatGPT and Claude: Gmail, iCloud, Fastmail, any IMAP. Passwords stay yours.
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Read and search FranklyMail email and prepare drafts, replies, and forwards for human approval.
Read, send, file and search email in any Gmail, Microsoft 365 or IMAP mailbox, plus its calendar.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables 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-
- AlicenseNot gradedqualityCmaintenanceEnables controlling Yahoo Mail from Claude in plain English — read, search, organize, delete, and send emails, with a two-phase confirmation step to prevent accidental destructive actions.MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to read, search, organize, and clean up Yahoo Mail emails over IMAP without Yahoo API keys.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude Desktop on Windows to search and read Yahoo Mail messages in read-only mode, without sending, deleting, or otherwise modifying them.MIT