Wraps Email for Amazon SES
Provides tools for interacting with Amazon SES, enabling AI agents to send email, check domain verification status, manage suppression lists, estimate sending costs, and inspect recent send history and event logs through a Wraps deployment.
AI agents: start with AGENTS.md — which package to reach for, auth, the minimal correct call for each, and the sharp edges. For the full docs in one file, fetch wraps.dev/llms-full.txt, or wraps.dev/llms.txt for an agent-oriented index.
Packages
@wraps.dev/email — AWS SES
pnpm add @wraps.dev/emailimport { WrapsEmail } from '@wraps.dev/email';
const email = new WrapsEmail();
const { messageId } = await email.send({
from: 'hello@yourapp.com',
to: 'user@example.com',
subject: 'Welcome!',
html: '<h1>Hello from Wraps!</h1>',
});React.email support, template management, bulk sending, inbox reading, event history, and suppression lists. SDK docs →
@wraps.dev/sms — AWS End User Messaging
pnpm add @wraps.dev/smsimport { WrapsSMS } from '@wraps.dev/sms';
const sms = new WrapsSMS();
await sms.send({
to: '+14155551234',
message: 'Your verification code is 123456',
});Batch sending, opt-out management, and E.164 validation. SMS docs →
@wraps.dev/client — Wraps Platform API
pnpm add @wraps.dev/clientimport { createPlatformClient } from '@wraps.dev/client';
const client = createPlatformClient({ apiKey: 'your-api-key' });
const { data } = await client.GET('/v1/contacts/', {
params: { query: { page: '1', pageSize: '10' } },
});Auto-generated types from OpenAPI, workflow definitions, and brand kit configuration.
@wraps.dev/mcp — MCP server for Amazon SES
A Model Context Protocol server that lets AI agents send email from your own AWS account and inspect it. It runs locally over stdio, built on the official MCP TypeScript SDK, and reads AWS credentials from your environment.
{
"mcpServers": {
"wraps": {
"command": "npx",
"args": ["-y", "@wraps.dev/mcp"],
"env": { "AWS_REGION": "us-east-1", "AWS_PROFILE": "your-aws-profile" }
}
}
}Tools: send_email (off unless WRAPS_WRITE_ENABLED=true), verify_domain_status, list_suppressions, get_setup_status, and estimate_cost work on any SES account. list_recent_sends and get_email_event_log read send history from a Wraps deploy. Also runs from the Dockerfile at the repo root: docker build -t wraps-mcp . && docker run -i --rm -e AWS_REGION wraps-mcp. MCP docs →
Related MCP server: sendook-mcp
Documentation
Resource | Link |
Quickstart | |
SDK Reference | |
SMS Docs | |
MCP Server | |
CLI (deploy infra) |
Community
GitHub Issues — Bug reports and feature requests
GitHub Discussions — Questions and ideas
Contributing — Development setup and guidelines
License
MIT — see LICENSE for details.
Available Tools
7 toolsestimate_costARead-only
Estimate the monthly cost of sending email with Wraps + AWS: the flat Wraps plan fee and an itemized AWS bill (SES, EventBridge, SQS, Lambda, DynamoDB, dedicated IP, WAF). Use this instead of calculating by hand — the cost model has several interacting variables, including which SES pricing plan the AWS account is on. Requires no AWS credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | Wraps plan. The fee is flat per plan and does not change with volume. | |
| emails | Yes | Emails sent per month | |
| billing | No | Wraps billing interval | |
| sesPlan | No | AWS SES pricing plan for this account and Region. AWS defaults new accounts to 'essentials' ($0.16/1K); 'alacarte' is $0.10/1K. Defaults to alacarte. | |
| tracking | No | Whether the event tracking pipeline is deployed (default true) | |
| retention | No | Email event history retention | |
| dedicatedIp | No | Include a dedicated sending IP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description is not burdened with safety disclosure. It adds behavioral context beyond annotations: the tool requires no AWS credentials, produces an itemized bill, and depends on the account's SES pricing plan. These details help the agent understand what the estimate covers and what inputs matter.
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 sentences, with the purpose front-loaded in the first sentence and practical guidance in the second. Every clause adds value—the list of AWS services is concrete, and the note about credentials prevents wasted calls. There is no filler or redundancy.
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 tool with 7 parameters and no output schema, the description does a decent job by stating it returns the flat Wraps plan fee and an itemized AWS bill. However, it does not specify the output format, currency, or whether the estimate is provided as a detailed breakdown or a single number. Given the tool's complexity, a bit more detail about return value would improve completeness.
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 input schema fully documents each of the 7 parameters. The description mentions that the cost model has interacting variables and specifically calls out the SES pricing plan, but it does not add meaning beyond the schema's parameter descriptions. It earns the baseline 3 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 opens with a specific verb and resource: 'Estimate the monthly cost of sending email with Wraps + AWS.' It clearly distinguishes this from the sibling tools (send_email, get_email_event_log, etc.) by focusing on cost estimation rather than sending or logging. The scope is explicit, so an agent immediately knows what the tool does.
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 clear guidance: 'Use this instead of calculating by hand' and notes 'Requires no AWS credentials,' which sets expectations. It explains that the cost model has interacting variables, signaling when this tool is valuable. It does not explicitly list when not to use it or name alternative tools, but the purpose is distinct enough that no exclusion is necessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_email_event_logARead-onlyIdempotent
Get the full delivery event log for a specific email by its messageId. Returns all SES events: Send, Delivery, Bounce, Complaint, Open, Click.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | SES message id, as returned by send_email or list_recent_sends. |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | |
| from | No | |
| found | Yes | False when no events are recorded yet for this messageId. |
| events | No | SES events in recorded order: Send, Delivery, Bounce, Complaint, Open, Click. |
| sentAt | No | ISO 8601. |
| status | No | |
| subject | No | |
| messageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safe read-only nature is covered. The description adds value by specifying that the tool returns ALL SES event types, which signals the full delivery timeline rather than a summary or recent send metadata.
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?
Two sentences with no fluff. The first sentence states the action and target; the second lists the return contents. The key scoping detail ('for a specific email by its messageId') is 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 single-parameter, read-only tool with full schema coverage and an output schema, the description is complete enough. It covers the core purpose and return contents. Minor omissions like ordering/pagination are not critical given the annotations and output schema handle the behavioral context.
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 messageId parameter is fully documented as an SES message id returned by send_email or list_recent_sends. The description just restates 'by messageId' without adding semantic detail, so the baseline of 3 applies.
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 uses a specific verb ('Get'), a clear resource ('full delivery event log for a specific email'), and a precise identifier ('messageId'). It also enumerates the returned event types (Send, Delivery, Bounce, Complaint, Open, Click), which makes its function unmistakable and differentiates it from siblings like list_recent_sends or 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 use case clear: retrieving the complete event history for one email when a messageId is available. It does not explicitly name alternatives or state when not to use it, but the scope is concrete enough that an agent can correctly select it over the sibling list/reply/setup tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_setup_statusARead-onlyIdempotent
Check this AWS SES account's sandbox status and get a recommended next action for getting a first send out. Read-only — makes no changes to your AWS account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| region | Yes | |
| sandbox | Yes | True while the account can only send to verified recipients. |
| nextAction | Yes | The single next step that unblocks sending. |
| writeEnabled | Yes | Whether WRAPS_WRITE_ENABLED permits sending. |
| maxSend24Hour | Yes | SES daily send quota. |
| sentLast24Hours | Yes | |
| enforcementStatus | Yes | SES account enforcement state, e.g. HEALTHY. |
| fromEmailConfigured | Yes | Whether WRAPS_FROM_EMAIL is set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Read-only — makes no changes to your AWS account,' reinforcing the readOnlyHint and idempotentHint annotations. It also adds that the tool returns both sandbox status and a recommended action, which is behavioral context beyond what the annotations provide.
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?
Two sentences, front-loaded with the purpose and immediately followed by the safety guarantee. Every sentence earns its place with no redundancy.
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?
The tool is simple, takes no parameters, is read-only, and has an output schema. The description fully conveys what the agent should expect: sandbox status plus a recommended next action. No critical information 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?
This tool has zero parameters, so parameter semantics are trivially satisfied. The schema coverage is 100% and there is nothing additional the description needs to clarify about inputs.
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 uses a specific verb ('Check') with a clear resource ('this AWS SES account's sandbox status') and an additional purpose ('get a recommended next action for getting a first send out'). It is unmistakably distinct from the sibling tools, especially verify_domain_status and 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 phrase 'for getting a first send out' implies this tool is for initial sandbox setup and orientation, which provides clear usage context. It does not explicitly name alternatives or exclusions, but the context is strong enough to guide an agent toward correct selection among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_sendsARead-onlyIdempotent
List recently sent emails from your Wraps email history, newest first, at most limit messages. The timestamp shown is the send time and is stable across calls. Returns send status, subject, recipient, timestamp, and messageId for each send. Use the messageId with get_email_event_log for full delivery details. The since parameter accepts a full ISO 8601 datetime string (e.g., 2024-01-01T00:00:00Z).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of messages to return, newest first (default 20). | |
| since | No | Only messages with activity at or after this ISO 8601 datetime. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sends | Yes | |
| hasMore | Yes | True when more sends exist beyond this page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it states the timestamp is the send time and is stable across calls, which is important for pagination/consistency expectations. It also discloses the returned fields (send status, subject, recipient, timestamp, messageId) and the limit cap behavior. This is meaningful added context, though it doesn't discuss rate limits or error cases.
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: the core purpose and ordering are in the first sentence, followed by the stable timestamp note, return fields, sibling pointer, and parameter clarification. Every sentence earns its place and there is no fluff or repetition of schema details.
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 read-only list tool with an output schema present, the description is quite complete. It covers what is returned, the ordering, the stability of the timestamp, and how to follow up for full delivery details. It doesn't mention pagination beyond the limit parameter, but the stable timestamp and limit cap give enough for an agent to call it correctly. The output schema likely covers return structure, so the description need not explain it further.
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 both parameters (limit and since) with descriptions. The description adds a bit of extra meaning by explaining the `since` parameter accepts a full ISO 8601 datetime string with an example, and by noting the default limit of 20 is in the schema. However, the schema already covers the semantics well, so the description's added value is marginal. 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 states a specific verb ('List'), a specific resource ('recently sent emails from your Wraps email history'), and a clear ordering ('newest first'). It also names the sibling tool get_email_event_log for follow-up delivery details, which helps distinguish it from related tools. The scope is precise and an agent can tell it apart from send_email and get_email_event_log without opening schemas.
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 clear context for when to use this tool: to list recent sends and to obtain messageId for full delivery details via get_email_event_log. It does not explicitly state when not to use it or name alternatives for filtering/searching, but the sibling context and the explicit pointer to get_email_event_log provide adequate usage guidance. A small gap is that it doesn't mention that send_email is for creating sends, but that is fairly obvious from the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_suppressionsARead-onlyIdempotent
List addresses on your AWS SES account-level suppression list, or check a single address with email. SES silently drops mail to suppressed addresses, and sending to them damages your sending reputation, so check before sending to an address you have not sent to recently. To determine whether one specific address is suppressed, always pass email — that is an exact lookup. The listing is paginated and states explicitly when it is truncated; a truncated listing is never proof that an address is unsuppressed. Optionally filter the listing by reason (BOUNCE or COMPLAINT).
| Name | Required | Description | Default |
|---|---|---|---|
| No | Check this ONE address against SES and report whether it is suppressed. Use this for any "is <address> suppressed?" question: it is an exact lookup. Do NOT answer that question from the listing instead — the listing is paginated, so an address missing from it is not evidence the address is unsuppressed. `reason` and `limit` are ignored when this is set. | ||
| limit | No | Maximum number of addresses to list (default 20, max 100). The response always states whether the listing was truncated. | |
| reason | No | Only list addresses suppressed for this reason. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | lookup = exact single-address check; list = paged enumeration. |
| entries | Yes | |
| complete | Yes | False when SES reported more pages than were read; absence proves nothing. |
| suppressed | No | Only present for mode=lookup. Authoritative for that address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint=false, and idempotentHint, so the bar for added value is high. The description still adds meaningful behavior: SES silently drops mail to suppressed addresses, listing is paginated and states truncation explicitly, and `reason`/`limit` are ignored when `email` is set. This is context an agent needs beyond the annotations.
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 front-loaded with the action, then gives usage guidance, then the pagination caveat, then the optional filter. Every sentence earns its place, and the important warning about reputation damage is placed where it is most likely to influence an agent's decision.
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?
With a rich output schema, full parameter coverage, and strong annotations, the description provides everything an agent needs to select and invoke the tool correctly. It explains when to use the exact-lookup mode, how to interpret truncation, and why checking is important.
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 schema's own parameter descriptions already carry the important semantics: `email` is an exact lookup, `reason` and `limit` are ignored when `email` is set, and `limit` has a default and max. The tool description reinforces the email-vs-listing distinction but does not need to add parameter-level detail, so the baseline of 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 opens with a specific verb and resource: 'List addresses on your AWS SES account-level suppression list' and immediately adds the alternate exact-lookup mode with `email`. This clearly distinguishes the two behaviors the tool supports and leaves no ambiguity about what it operates on.
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 explicit operational guidance: check before sending to unfamiliar addresses, always pass `email` for single-address questions, and never treat a truncated listing as proof of unsuppressed status. The input schema reinforces this with 'Do NOT answer that question from the listing instead,' making the decision path unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailADestructive
Send a transactional email via your AWS SES account. Requires WRAPS_WRITE_ENABLED=true. The from address must be a verified SES identity (an address or domain) in this account and region. The to field accepts a single address or an array of addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient address, or an array of up to 1000 addresses. | |
| from | No | Sender address. Must be a verified SES identity in this account. Defaults to WRAPS_FROM_EMAIL. | |
| html | No | HTML body. Provide `html`, `text`, or both; at least one is required. | |
| text | No | Plain-text body. Provide `html`, `text`, or both; at least one is required. | |
| subject | Yes | Subject line. |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | Yes | Recipients the message was accepted for. |
| from | Yes | |
| messageId | Yes | SES message id; pass to get_email_event_log for delivery events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false and destructiveHint=true; the description adds actionable behavioral constraints: the WRAPS_WRITE_ENABLED prerequisite and the verified SES identity/region requirement. This enriches the safety and operational picture without contradicting the annotations.
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?
Three short sentences front-load the core action, then state requirements and recipient flexibility. Every sentence earns its place, no repetition or filler.
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?
The tool has an output schema, so return values are covered elsewhere. The description covers the essential prerequisites (env var, verified identity) and the key constraining rule (to accepts array). It could mention body requirements but those are in the schema. Overall complete for an agent to invoke correctly.
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 each parameter is already documented. The description restates the to field's array capability and the from identity requirement, but adds no new meaning beyond the schema—meeting the baseline for high coverage without additional 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 opens with 'Send a transactional email via your AWS SES account,' naming a specific verb, resource, and channel type. It immediately distinguishes this from sibling tools, which are all inspection or setup operations (get_setup_status, list_recent_sends, etc.), so an agent can tell exactly what this tool does.
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 clear usage context: it is for sending transactional email, requires WRAPS_WRITE_ENABLED=true, and the from address must be verified. While it doesn't explicitly contrast with alternatives, none of the sibling tools are send operations, so the context is sufficient without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_domain_statusARead-onlyIdempotent
Check the verification and DKIM status of a sending domain in your AWS SES account. Returns whether the domain is verified for sending and its DKIM configuration status.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check, e.g. example.com. SES identities are per-region. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| region | Yes | SES identities are per-region; this is the region checked. |
| verified | Yes | True when SES will accept sends from this domain. |
| dkimStatus | Yes | SES DKIM status, e.g. SUCCESS, PENDING, FAILED. |
| dkimTokens | Yes | CNAME tokens to publish in DNS. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds specific return semantics (verification and DKIM status), which is useful and not redundant. It doesn't mention rate limits or auth, but for a read-only status check this is acceptable.
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 sentences with zero filler. It front-loads the primary action and result, and every clause adds value. No redundant phrasing or restatement of the tool name.
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 read-only tool with one parameter, a detailed schema, and an output schema present, the description fully covers what an agent needs to know: what it does and what it returns. No critical operational details are 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?
The schema description for the single parameter 'domain' is comprehensive (includes format, example, and per-region note), and schema coverage is 100%. The tool description adds no additional meaning beyond what the schema already provides, so the baseline of 3 applies.
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 uses a clear verb ('Check') and identifies the exact resource ('verification and DKIM status of a sending domain in your AWS SES account'). It also specifies what is returned (verification and DKIM configuration status), making it distinct from all sibling tools, none of which target domain verification.
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 purpose is clear enough that an agent would know when to call it, but the description provides no explicit guidance on when to prefer this over get_setup_status, which could plausibly overlap. It neither states when not to use it nor names any alternatives, so the usage context is only implied.
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.
1 tool update
v0.8.2- Changed
estimate_cost3 fields changed- removed
Input schema / properties / eventsRemoved value: -{ - "description": "Wraps tracked events per month (sends, opens, clicks, bounces, custom events)", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" -} - changed
Input schema / properties / tier / descriptionPrevious value: -"Wraps plan"New value: +"Wraps plan. The fee is flat per plan and does not change with volume." - changed
Input schema / properties / tier / enumPrevious value: -[ - "free", - "starter", - "growth", - "scale" -]New value: +[ + "free", + "pro", + "business" +]
7 tool updates
v0.8.1- First observed
estimate_cost - First observed
get_email_event_log - First observed
get_setup_status - First observed
list_recent_sends - First observed
list_suppressions - First observed
send_email - First observed
verify_domain_status
TDQS
Scored across 7 tools
Each tool targets a distinct concern—account setup status, sending, cost estimation, delivery events, send history, suppressions, and domain verification—with clear boundaries. The closest pair, get_setup_status and verify_domain_status, operate at different levels (account vs. domain) and their descriptions make that explicit.
All tool names follow a consistent snake_case verb_noun pattern: get_, send_, estimate_, list_, and verify_. The verbs are appropriate to each action, and there is no mixing of styles or vague generic terms.
Seven tools is well-scoped for an email-sending service. Each tool covers a necessary capability—setup, sending, cost, logging, history, suppression checking, and domain verification—without redundancy or bloat.
The tool surface covers the core email workflow: understand sandbox status, verify domains, send, check recent sends, inspect event logs, and avoid suppressed addresses. Minor gaps exist such as no tool to manage suppressions or perform domain verification actions, but agents can work around these using the existing status and listing tools.
Maintenance
Related MCP Connectors
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
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Email safety MCP server. Detects phishing, prompt injection, CEO fraud for AI agents.
Related MCP Servers
- AlicenseBqualityCmaintenanceDisposable email MCP server for autonomous AI agents. Create labeled temporary inboxes, wait for verification emails, extract OTP codes and confirmation links — zero human intervention required.620 PyPIMIT
- AlicenseAqualityDmaintenanceMCP server for Sendook - an AI email communication platform. Enables AI agents to send and receive emails, manage inboxes, threads, and webhooks programmatically.16MIT
- AlicenseNot gradedqualityDmaintenanceA production-ready MCP server that empowers AI agents to securely send emails via SMTP, supporting plain text, HTML, and attachments.MIT

fagents-mcpofficial
AlicenseNot gradedqualityDmaintenanceMCP server that enables Claude Code agents to send and read emails via SMTP/IMAP with per-agent credential isolation and audit logging.MIT