MCP Server

Agent Email List — Free SMTP Relay for AI Agents

com.agentemaillist.ai/free-transactional-email-smtp-relay
Business & Operations Communication Public & reachable MCP 2026-07-28

What this MCP does

Provides account, domain verification, sending, delivery tracking, message listing, and limits management for transactional email.

add_domain
Register a domain to send from, and get the DNS records that must be published before it will work. Publishing DNS usually needs a human with registrar access, so start this early. The domain cannot send until verify_domain succeeds.
Input schema
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'A bare domain such as mail.yourcompany.com. A subdomain is better than the root.'}}}
create_account
Create an account on this email service and get an API key back. Needs no existing credentials, so an agent with nothing can call this first. The key is returned once and never again. Free, with no card and no trial clock.
Input schema
{'type': 'object', 'required': ['email', 'password'], 'properties': {'name': {'type': 'string', 'description': 'Optional display name.'}, 'email': {'type': 'string', 'description': 'A contact address for the account.'}, 'password': {'type': 'string', 'description': 'At least 12 characters. Needed only to sign in to the web console.'}}}
get_delivery_events
What happened to messages on this domain: accepted, delivered, failed, and so on. A send returning success means queued, not delivered; this is where the delivery outcome actually appears.
Input schema
{'type': 'object', 'required': ['domain'], 'properties': {'event': {'type': 'string', 'description': 'Filter to one type, such as delivered or failed.'}, 'limit': {'type': 'integer'}, 'domain': {'type': 'string'}, 'recipient': {'type': 'string'}}}
get_sending_limits
How much this domain may send today and what graduates it to the next rung, plus this account's standing: how many domains it may hold and whether sending is paused. New domains start at a low daily cap and climb as they prove themselves, so check this before planning a bulk send rather than discovering it part-way. Call it with no domain for the account-level answer alone.
Input schema
{'type': 'object', 'properties': {'domain': {'type': 'string', 'description': "Optional. Omit for account limits without a domain's allowance."}}}
list_domains
List the sending domains on this account, with their verification state and how much of today's sending allowance each has left.
Input schema
{'type': 'object', 'properties': {}}
list_messages
Recent messages for a domain, sent and received. Use direction to filter, and folder to separate inbox from spam on received mail.
Input schema
{'type': 'object', 'required': ['domain'], 'properties': {'limit': {'type': 'integer', 'description': 'Up to 100. Defaults to 25.'}, 'domain': {'type': 'string'}, 'folder': {'enum': ['inbox', 'spam'], 'type': 'string'}, 'direction': {'enum': ['outbound', 'inbound'], 'type': 'string'}}}
send_email
Send a message. The domain must be verified and the from address must belong to it. Counts one against the daily allowance per recipient. Set test_mode true to run the whole pipeline, including content screening, without sending anything and without spending allowance — do that first when building.
Input schema
{'type': 'object', 'required': ['domain', 'from', 'to'], 'properties': {'to': {'type': 'string', 'description': 'One address, or several separated by commas.'}, 'from': {'type': 'string', 'description': 'An address at that domain.'}, 'html': {'type': 'string', 'description': 'Optional HTML body.'}, 'text': {'type': 'string', 'description': 'Plain text body.'}, 'domain': {'type': 'string', 'description': 'The verified domain to send from.'}, 'subject': {'type': 'string'}, 'test_mode': {'type': 'boolean', 'description': 'Accept and screen the message but send nothing. Defaults to false.'}}}
verify_domain
Re-read DNS now and mark the domain active if its SPF and DKIM records are visible. DNS takes minutes to hours to propagate; poll this every few minutes, not every few seconds.
Input schema
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}}}
Added
get_delivery_events
Sept. 17, 2026, 12:33 p.m.
Added
list_messages
Sept. 17, 2026, 12:33 p.m.
Added
get_sending_limits
Sept. 17, 2026, 12:33 p.m.
Added
send_email
Sept. 17, 2026, 12:33 p.m.
Added
verify_domain
Sept. 17, 2026, 12:33 p.m.
Added
add_domain
Sept. 17, 2026, 12:33 p.m.
Added
list_domains
Sept. 17, 2026, 12:33 p.m.
Added
create_account
Sept. 17, 2026, 12:33 p.m.