localSMTP-mcp
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., "@localSMTP-mcpshow me the latest 5 emails"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
localSMTP
Local dummy SMTP server for development. It accepts messages and writes the
original bytes to .eml files.
SMTP server
uv run localsmtp --host 127.0.0.1 --port 25 --out ./mailThe legacy entry point also works:
uv run python .\main.py --host 127.0.0.1 --port 25 --out ./mailRelated MCP server: mcp-imap
MCP server
The MCP entry point starts both the MCP stdio server and an SMTP listener. This lets coding agents start the mail catcher only when they need it.
uv run localsmtp-mcp --smtp-host 127.0.0.1 --smtp-port 25By default, the MCP server stores received mail in a temporary directory. Pass
--out when you want to keep messages in a specific location.
After publishing the package, use it from an MCP client with uvx:
{
"mcpServers": {
"localsmtp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/fclef819/localSMTP-mcp.git",
"localsmtp-mcp",
"--smtp-host",
"127.0.0.1",
"--smtp-port",
"25"
]
}
}
}MCP tools
list_messages(limit = 50, newest_first = true)get_message(id, include_raw = false)clear_messages()get_server_status()
Available Tools
4 toolsclear_messagesA
Delete all received email messages from the output directory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description states deletion but lacks disclosure of irreversibility, scope, or return value, which is critical for a destructive 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?
Single sentence with precise language; no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with no parameters, but lack of behavioral details for a destructive operation reduces completeness compared to what could be 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?
No parameters exist, so schema coverage is 100%; description could benefit from clarifying the scope but baseline score 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 'Delete' and the resource 'all received email messages from the output directory', distinguishing it from siblings that get, list, or query server status.
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 like get_message or list_messages, nor any prerequisites or consequences of bulk deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messageB
Get a received email message by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| include_raw | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully convey behavioral traits. Only states it gets a message; no info on authentication, whether message is consumed, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no waste. Could be slightly improved by structuring info, but efficient given simplicity.
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?
Minimally adequate for a simple retrieval tool given output schema exists. However, lacks context on parameters and edge cases.
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 has 0% description coverage, and the tool description adds no parameter details beyond the names. 'id' is obvious but include_raw is unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Get', specific resource 'received email message', and method 'by id'. Distinct from siblings: list_messages lists, get_server_status checks server health, clear_messages deletes.
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 like list_messages. Does not describe prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_statusA
Get SMTP listener and message store status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden. It only says 'get status', implying a read-only operation, but does not disclose any other behavioral traits such as what specific information is returned, whether authentication is required, or side effects. This is minimal.
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, front-loaded with the action and resources. Every word is necessary and adds value.
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 status-check tool with an output schema (presumably defining the return structure), the description is adequate. It covers the essence, but could be slightly more descriptive about what 'status' entails. However, the output schema likely fills 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 tool has zero parameters, so schema coverage is trivially 100%. The description does not need to add parameter meaning since there are none. It implicitly communicates that no inputs are required, which is sufficient.
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 'Get SMTP listener and message store status', specifying the exact resources and action. It effectively distinguishes this tool from its siblings, which are all message-focused (clear_messages, get_message, list_messages).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking server status, but does not explicitly state when to use this tool versus alternatives. Given the sibling names, it's clear that this is for server-level status rather than message-level operations, but no explicit guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_messagesC
List received email messages.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| newest_first | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only states basic listing. It does not mention read-only nature, pagination, sorting, or any side effects. Defaults for limit and newest_first are in schema but not explained.
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, which is concise but lacks substance. It is not overly verbose, but it could be more informative without sacrificing brevity.
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 no annotations, low schema coverage, and an existing output schema, the description is too minimal. It does not explain return values, pagination behavior, or how to use defaults effectively.
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 0% and the description does not mention the two parameters (limit, newest_first). No additional meaning is provided beyond the raw 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 states 'List received email messages,' which is a specific verb and resource. It distinguishes itself from sibling tools like clear_messages and get_message, but could be more explicit about its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_message for individual messages or clear_messages for deletion. The description does not mention any prerequisites or context.
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. Dates show when Glama detected each change.
4 tool updates
v0.1.0- First observed
clear_messages - First observed
get_message - First observed
get_server_status - First observed
list_messages
TDQS
Each tool has a distinct purpose: clearing all messages, retrieving a specific message, checking server status, and listing messages. No overlap in functionality.
All tools follow a consistent verb_noun pattern (e.g., clear_messages, get_message), making it predictable for agents.
With only 4 tools, the set is well-scoped for a local SMTP server, covering essential operations without unnecessary bloat.
The set covers core operations (list, get, clear, status) but lacks individual message deletion or filtering, which could be useful but not critical.
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
MCP server for MailTempo's public free temporary email inboxes.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
MCP server for e-mail testing: create disposable inboxes, wait for delivery, and extract e-mail content or links - all from your AI agent or test automation workflow. Get a free API key on https://app.zyntra.app/
Hosted MCP server for inbox health, reporting, and warmup operations.
Related MCP Servers
AlicenseDqualityDmaintenanceAn MCP server implementation that allows sending emails over MailPace's fast transactional email API.11MIT- FlicenseNot gradedqualityBmaintenanceA minimal MCP server for reading and sending emails via IMAP/SMTP, supporting multiple accounts in a single instance with zero external dependencies.1-
- AlicenseAqualityBmaintenanceMCP server for the Guerrilla Mail temporary/disposable email API. Spin up throwaway inboxes, poll for mail, and read messages from any MCP client.6241MIT
- AlicenseNot gradedqualityAmaintenanceExposes any IMAP mailbox and SMTP relay as MCP tools, enabling email management (read, search, send, delete) through MCP-compatible agents.MIT
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/fclef819/localSMTP-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server