Emitd MCP Server
Server Details
Connect AI agents to Emitd email sending, message tracking, templates, and automations. Emitd hosts a Model Context Protocol server for integrating supported email operations into AI-agent workflows. Connect a compatible client to the hosted endpoint (https://mcp.emitd.com/mcp) and authenticate with an Emitd API key. Available tools depend on the key's permissions and enabled features. Emitd's capability areas include sending email, message activity, templates, contacts, audiences, segments, domains, analytics, inbound email, broadcasts, automations, webhooks, and suppressions. Use restricted keys, sending guardrails, and approval settings appropriate to each workflow. For more information check https://emitd.com
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- tponnam/emitd-mcp-server
- GitHub Stars
- 0
TDQS
Scored across 3 tools
send_email, send_batch, and validate_email each target a clearly different action, and the descriptions explicitly relate them (batch items use send_email's fields and the same dry_run/duplicate semantics). The only mild overlap is that send_batch fully subsumes send_email, so an agent sending a single message faces a small either/or choice that the docs don't fully resolve.
All three names follow a strict verb_noun snake_case pattern (send_email, send_batch, validate_email) with consistent use of the domain object noun. No mixing of conventions or vague bare verbs.
Three tools is thin but defensible for a narrow send-only surface; however, validate_email is a pre-send helper rather than a core operation, leaving effectively two sending tools. The set feels borderline minimal for an email-sending service.
Core sending and pre-send validation are covered, but the surface references list_domains ('see list_domains') which is not part of this tool set, creating a dead end for verifying sender domains. There is also no way to list templates or check the status of an already-sent message, so an agent cannot fully complete the described workflows.
Available Tools
3 toolssend_batchSend up to 100 emailsADestructiveInspect
Send up to 100 independent emails in one call; each item has send_email's fields. Results come back per email, in input order. Same dry_run and duplicate protection as send_email, applied to the whole batch. If this key's guardrails need a person, the call either asks them in chat once for the whole batch, or returns status pending_approval with an approval_url on each email that waits.
| Name | Required | Description | Default |
|---|---|---|---|
| emails | Yes | ||
| dry_run | No | true validates and simulates the send: nothing leaves emitd and nothing is billed, though it counts toward rate limits. Returns a message_id for the simulated send. | |
| allow_duplicate | No | true sends another copy even though an identical email went out in the last 10 minutes. | |
| idempotency_key | No | Retry-safe key: calling again with the same key returns the first result instead of sending again. Without one, an identical send within 10 minutes is deduplicated automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' destructive/open-world flags, the description adds important behavior: per-email results in input order, batch-wide dry_run and duplicate protection, and pending_approval plus approval_url handling. These are non-obvious operational details that materially help an agent invoke the tool correctly.
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 compact and front-loaded, beginning with the core batch-send purpose before adding result ordering, duplicate protection, and approval behavior. Every clause contributes operational information without redundant restatement.
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 complex batch mutation with no output schema, the description supplies essential context about per-email ordered results and approval behavior. It does not fully describe the success result object, but the schema, annotations, and approval note together make it sufficiently callable.
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?
With 75% schema description coverage, the schema already documents many fields, but the description adds batch-level meaning: the emails array mirrors send_email's fields, and dry_run/duplicate protection apply to the whole batch. It does not explicitly explain idempotency_key, but the schema covers that adequately.
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 and resource: sending up to 100 independent emails in one call, with each item mirroring send_email fields. This clearly distinguishes the batch operation from the single-email sibling send_email.
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 makes the batch-of-up-to-100 use case clear and references send_email for field parity and shared dry_run/duplicate semantics, implying when to use this instead of a single send. However, it never explicitly states the inverse condition or names validate_email as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailSend an emailAInspect
Send one email from an address on a verified domain (see list_domains). Give html_body and/or text_body, or template_alias plus template_model to render a saved template. Use dry_run: true to validate a new or uncertain send without delivering it. An identical send within 10 minutes returns the original message_id instead of sending again; pass idempotency_key to control that, or allow_duplicate: true to send another copy on purpose. Returns message_id and status. If this key's guardrails need a person, the call either asks them in chat or returns status pending_approval with an approval_url to share.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | No | ||
| bcc | No | ||
| tag | No | Legacy single tag; prefer `tags`. | |
| from | Yes | Sender address; its domain must be a verified sending domain for the tenant (and match the key's domain scope, if scoped). | |
| tags | No | ||
| dry_run | No | true validates and simulates the send: nothing leaves emitd and nothing is billed, though it counts toward rate limits. Returns a message_id for the simulated send. | |
| subject | No | Required by validation unless a template supplies it. | |
| reply_to | No | ||
| html_body | No | ||
| test_mode | No | Simulate delivery without sending (same effect as the `X-Relay-Test` header). | |
| text_body | No | ||
| attachments | No | ||
| track_opens | No | Add an open-tracking pixel to the HTML body. Omit it to take the stream default: on for `broadcast`, off for `outbound` (transactional). Opens are approximate either way, because some clients fetch every image and others block them. | |
| scheduled_at | No | Epoch milliseconds. When in the future, the message is persisted as `scheduled` and enqueued by a per-minute cron once due. | |
| track_clicks | No | Route links in the HTML body through the click-tracking redirect. Omit it to take the stream default: on for `broadcast`, off for `outbound` (transactional). | |
| message_stream | No | Postmark-style stream separation. | outbound |
| template_alias | No | Server-side template alias to render (see Templates). Renders subject/html_body/text_body before validation. | |
| template_model | No | Variables for `template_alias` rendering. | |
| allow_duplicate | No | true sends another copy even though an identical email went out in the last 10 minutes. | |
| idempotency_key | No | Retry-safe key: calling again with the same key returns the first result instead of sending again. Without one, an identical send within 10 minutes is deduplicated automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: a 10-minute dedup window, idempotency_key control, dry_run not billing but still counting toward rate limits, and the pending_approval/approval_url outcome. That last point is the kind of non-obvious side effect annotations never express. It stops short of stating auth/permission requirements or delivery failure behavior for the normal path.
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?
Dense but zero-waste: each sentence carries a distinct decision (body source, dry run, dedup behavior, return value, approval fallback). The core action and precondition are front-loaded before the edge-case handling.
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 21-parameter mutation with no output schema, it covers the highest-risk behaviors (dedup, dry run, approvals) and states the return fields (message_id, status). Attachments and scheduling — both with non-trivial mechanics — are only handled by the schema, so the description is strong but not exhaustive.
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?
With 21 parameters at 62% schema coverage, the description usefully explains the body/template tradeoff, the idempotency_key vs allow_duplicate distinction, and that 'from' must be on a verified domain in the key's scope. It says nothing about cc/bcc, attachments, scheduled_at, track_opens/track_clicks, or message_stream, leaving those entirely to the schema descriptions.
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?
Opens with a specific verb and resource plus a hard precondition: 'Send one email from an address on a verified domain (see list_domains).' The word 'one' implicitly separates it from send_batch, and the verified-domain constraint plus cross-reference to list_domains gives an agent enough to pick correctly.
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?
Explicit routing rules throughout: give html_body/text_body OR template_alias+template_model; use dry_run: true 'to validate a new or uncertain send without delivering it'; use allow_duplicate for intentional resends. It also tells the agent what to do when human approval is needed (share approval_url), which is a real operational decision point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_emailValidate an email addressAIdempotentInspect
Check one address before adding it as a contact or sending to a newly collected address. result is deliverable, risky (disposable, random-looking, or no MX record), undeliverable (bad syntax, no such domain, no mail server, or a previous hard bounce — do not send), or unknown (DNS unreadable right now; retry later). did_you_mean carries a corrected address when the domain looks like a typo — offer it to the user rather than sending to the original. 1,000 checks per workspace per day.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | The address to check. Sent as typed — validation reports bad syntax rather than rejecting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: it enumerates all four result states with their causes, explains the did_you_mean field and how to act on it, and discloses a concrete rate limit (1,000 checks per workspace per day) that explains the readOnlyHint=false quota consumption. This is exactly the behavioral detail annotations cannot carry.
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?
Front-loaded with the action and the when-to-use context, then packs result states, remediation guidance, and the rate limit into dense sentences with no filler. Every clause carries operational meaning.
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?
There is no output schema, yet the description effectively documents the return contract by defining result values and the did_you_mean field, so an agent knows exactly how to interpret and act on a response.
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% and the single email parameter is already documented as being sent as typed, so the description adds no parameter-level semantics 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?
States a specific verb and resource ('Check one address') and situates it precisely in the workflow ('before adding it as a contact or sending'), which distinguishes it from the send-oriented siblings send_email and send_batch without naming them explicitly.
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?
Gives clear context for when to call it and what to do with each outcome ('do not send' on undeliverable, 'retry later' on unknown, offer did_you_mean to the user). It does not state explicit exclusions such as skipping checks for already-verified contacts, so it falls short of the 5 bar.
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.
3 tool updates
- First observed
send_batch - First observed
send_email - First observed
validate_email
Publisher details
- Operator
- https://emitd.com · Publisher source
- Operator website
- https://emitd.com · Publisher source
- Vendor relationship
- Not applicable
- Documentation
- https://docs.emitd.com/docs/guides/agents · Publisher source
- Trust center
- Not applicable
- Restrictions
- Unknown
Related MCP Connectors
AgentiSend is a transactional email API: send through verified domains with a message log, budgets, a preflight and refusals that name the fix; built so AI agents can send on your behalf. The hosted MCP server at https://api.agentisend.com/mcp exposes 82 tools (44 on tools/list; the rest via list_more_tools). A send is one message or a batch of up to 500 items with per-item results. preflight_email runs every gate a real send runs, sends nothing, and costs nothing. Every 4xx returns code, message, and fix. There is no tool for unsolicited mail. Auth is a bearer API key or OAuth 2.1 with dynamic client registration. Starter prompts: "Send this receipt to the customer." "Preflight this send and tell me what would stop it." "What can I spend today?"
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Hosted email for AI agents: create inboxes, send, receive, and reply over MCP with scoped API keys
Your agent needs a mailbox of its own — to receive, thread, draft and send, with attachments, without borrowing your personal inbox or your company's SMTP. **What you can ask for** • "Create an inbox for this agent and tell me its address." • "Read the new messages in this thread and draft a reply." • "Send this message with the attachment and wait for the response." • "Search this inbox for everything from that domain." • "Show delivery metrics and the events on this inbox." **How to use it** Point any MCP client at https://mcp.aisa.one/mail/mcp and sign in with OAuth — there is no key to create or paste. 49 tools: create and delete inboxes, list and read messages, raw message bodies, attachments, threads, drafts and draft attachments, send and reply, message search, inbox events, metrics, and list entries — reads and writes. **Why this rather than the source** A real inbox an agent owns, rather than an SMTP credential it borrows from a human. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Find the contact elsewhere in the catalogue, then write to them from here — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/sales/mcp finds the person to write to.
Related MCP Servers
AlicenseBqualityBmaintenanceEnables AI agents to send and manage email, read threaded replies, run campaigns and automations, and handle approvals through the Model Context Protocol from any compatible client.4553 npm1MIT- AlicenseBqualityCmaintenanceThe email API your AI agent can actually use. A Model Context Protocol server for Send16 that gives Claude, Cursor, and any MCP client 79 tools to send transactional & marketing email, manage contacts, audiences, segments, automations, templates, the inbox, suppressions, and webhooks.7932 npmMIT

@sendbyte/mcpofficial
AlicenseAqualityCmaintenanceEnables AI agents to send emails and manage sending domains, templates, analytics, and content checks through the SendByte platform using the Model Context Protocol.1112 npmMIT- AlicenseAqualityBmaintenanceMCP server for SentVia that provides email infrastructure for AI agents, enabling them to create inboxes, send, reply, forward, search messages, manage drafts, domains, webhooks, and allow/block rules through 21 tools.2130 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.