Skip to main content
Glama

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 ./mail

The legacy entry point also works:

uv run python .\main.py --host 127.0.0.1 --port 25 --out ./mail

Related 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 25

By 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 tools
clear_messagesA

Delete all received email messages from the output directory.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
include_rawNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
newest_firstNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

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 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 4 tool updatesv0.1.0
    • First observedclear_messages
    • First observedget_message
    • First observedget_server_status
    • First observedlist_messages

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a distinct purpose: clearing all messages, retrieving a specific message, checking server status, and listing messages. No overlap in functionality.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (e.g., clear_messages, get_message), making it predictable for agents.

Tool Count5/5

With only 4 tools, the set is well-scoped for a local SMTP server, covering essential operations without unnecessary bloat.

Completeness4/5

The set covers core operations (list, get, clear, status) but lacks individual message deletion or filtering, which could be useful but not critical.

Maintenance

ActivitySlowing
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    D
    quality
    D
    maintenance
    An MCP server implementation that allows sending emails over MailPace's fast transactional email API.
    1
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    A minimal MCP server for reading and sending emails via IMAP/SMTP, supporting multiple accounts in a single instance with zero external dependencies.
    1
    -
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for the Guerrilla Mail temporary/disposable email API. Spin up throwaway inboxes, poll for mail, and read messages from any MCP client.
    6
    24
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Exposes any IMAP mailbox and SMTP relay as MCP tools, enabling email management (read, search, send, delete) through MCP-compatible agents.
    MIT

Latest Blog Posts

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