Search / io.aerosend/mcp
Aerosend
R2· OAuth, onceManage Aerosend cold email domains, mailboxes, tags, warmup, inbox placement and domain burn.
v1.0.0 · active · repository · website · descriptor JSON · versions
Search / io.aerosend/mcp
R2· OAuth, onceManage Aerosend cold email domains, mailboxes, tags, warmup, inbox placement and domain burn.
v1.0.0 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"aerosend": {
"type": "http",
"url": "https://mcp.aerosend.io/mcp",
"headers": {
"X-API-Key": "${X_API_KEY}"
}
}
}
}claude mcp add --transport http aerosend https://mcp.aerosend.io/mcp --header "X-API-Key: ${X_API_KEY}"[mcp_servers.aerosend]
url = "https://mcp.aerosend.io/mcp"
env_http_headers = { "X-API-Key" = "X_API_KEY" }
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"aerosend": {
"type": "remote",
"url": "https://mcp.aerosend.io/mcp",
"enabled": true,
"headers": {
"X-API-Key": "{env:X_API_KEY}"
}
}
}
}{
"mcpServers": {
"aerosend": {
"type": "http",
"url": "https://mcp.aerosend.io/mcp",
"headers": {
"X-API-Key": "${X_API_KEY}"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=aerosend&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLmFlcm9zZW5kLmlvL21jcCIsImhlYWRlcnMiOnsiWC1BUEktS2V5IjoiJHtYX0FQSV9LRVl9In19"
}{
"servers": {
"aerosend": {
"type": "http",
"url": "https://mcp.aerosend.io/mcp",
"headers": {
"X-API-Key": "${X_API_KEY}"
}
}
}
}{
"mcpServers": {
"aerosend": {
"httpUrl": "https://mcp.aerosend.io/mcp",
"headers": {
"X-API-Key": "${X_API_KEY}"
}
}
}
}extensions:
"aerosend":
enabled: true
name: "aerosend"
type: streamable_http
uri: "https://mcp.aerosend.io/mcp"
headers:
"X-API-Key": "${X_API_KEY}"
timeout: 300
Placeholders to fill from your own secret store: ${X_API_KEY}. The registry never accepts secret values.
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prmProtected Resource Metadata (RFC 9728) publishedauth.as_metadataauthorization server metadata reachableauth.cimdonly Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMDauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_lengthdescriptions are concisetools.schemasevery tool has an object input schematools.annotations29 of 29 tools declare readOnlyHint or destructiveHinttools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHinttools.token_costabout 5,406 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changesno tool changes in 30 daysstability.rug_pullno tool changed its meaning under the same namedeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +dns-namespace +website +reachable +uptime-98% +updated-11d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://mcp.aerosend.io/mcp streamable-http | oauth2 AS: https://mcp.aerosend.io | yes | 98% | 576 ms | – | 2026-10-20 |
add_domainsdestructive | Add one or more domains (POST /api/v1/domains). New domains start pending with warmup on. Pass domains as comma-separated names plus one redirectUrl for all, or domainsJson as [{"domain":"example.com","redirect_url":"mysite.com"}]. Inactive existing domains are reactivated. Active duplicates are rejected. Max 100 per request. |
add_mailboxesdestructive | Add one or more mailboxes (POST /api/v1/mailboxes). Domain is taken from the email and must exist, belong to the client, and be active. Max 3 mailboxes per domain and 60 per request. Pass email, firstName, and lastName for one mailbox, or mailboxesJson as [{"email":"[email protected]","first_name":"John","last_name":"Doe"}]. |
create_tagsdestructive | Create one or more tags (POST /api/v1/tags). You send display_name; the API stores a normalized name (e.g. Sales Team ABC -> sales-team-abc). Existing normalized names are returned idempotently. Pass displayNames (comma-separated) plus optional color, or tagsJson as [{"display_name":"Sales Team","color":"#10B981"}]. Color is #RGB or #RRGGBB. |
delete_domainsdestructive | Immediately delete pending domains only (DELETE /api/v1/domains). Active or in-progress domains are skipped. When the user asks to delete a list of domains (especially active ones, or via ChatGPT/Claude), use request_domain_deletion instead. Pass ids and/or domains (comma-separated names). Only pending domains with no active mailboxes are removed. |
delete_mailboxesdestructive | Delete pending mailboxes (DELETE /api/v1/mailboxes). Non-pending mailboxes are skipped. Pass ids and/or emails (comma-separated). |
delete_tagsdestructive | Delete tags and their domain/mailbox mappings (DELETE /api/v1/tags). Pass tagIds as comma-separated ids. The request fails if any id is missing. |
get_domaindestructive | Get one domain by id (GET /api/v1/domains/{id}), including nameservers, DNS provider, tags, and mailboxes. Call list_domains first when you only have a name. |
get_domain_burn_connect_urldestructive | Return the page where the user adds Smartlead or Instantly sequencer keys for domain burn alerts. Never ask for or submit sequencer API keys in chat. Always show this URL when keys are missing or scan.next_step is CONNECT_SEQUENCER. |
get_domain_burn_detaildestructive | Get burn detail for one domain (GET /api/v1/domain-burn/domains/{domain}): domain row, sequencer name, metrics (burn_score, warmup_score, reply_rate, bounce_rate, placement_score, total_sent), issues, monthly score history, and recommended action (replace or slowdown). Call get_domain_burn_report first when you only have a status group. Pass keyId from list_domain_burn_keys to require the domain belongs to that sequencer. |
get_domain_burn_reportdestructive | Get the domain burn report (GET /api/v1/domain-burn). Includes report_available, scan status, summary counts (total_domains, burnt, at_risk, good, excellent, low_volume), status groups, clients (from redirect URLs), and one row per domain (domain, status, burn_score, sent, delta, flags). Domain status values: burnt, at-risk, good, excellent, low-volume. When report_available is false and scan.next_step is CONNECT_SEQUENCER, tell the user to add keys at https://app.aerosend.io/connect-sequencer — do not collect API keys in chat. Pass keyId from list_domain_burn_keys to limit the report to that sequencer. Page size default 100, maximum 100. Call get_domain_burn_detail with a domain name for issues and history. |
get_domain_burn_scan_statusdestructive | Get domain burn report generation status (GET /api/v1/domain-burn/scan-score). Same object as data.scan on get_domain_burn_report. status is NOT_STARTED, IN_PROGRESS, COMPLETED, or FAILED. next_step drives the flow: CONNECT_SEQUENCER, GENERATE_REPORT, WAIT, or VIEW_REPORT. Pass keyId from list_domain_burn_keys for one sequencer; omit it for the whole account. If next_step is CONNECT_SEQUENCER, tell the user to add keys at https://app.aerosend.io/connect-sequencer — do not collect API keys in chat. |
get_domain_burn_sequencersdestructive | Detect which sequencers have an active API key stored (GET /api/v1/domain-burn/sequencer). Returns has_api_key and sequencers [{sequencer, connected, account_count, scan_supported}] for smartlead and instantly. Keys are never returned. If has_api_key is false or a sequencer is not connected, tell the user to add keys at https://app.aerosend.io/connect-sequencer — do not collect API keys in chat. |
get_inbox_placement_analyticsdestructive | Get the latest inbox placement test for the account (GET /api/v1/analytics/inbox-placement). Not paginated — the full domain list is returned. Use this to analyze delivery: total_emails_sent, inbox_count, spam_count, inbox_percentage, spam_percentage, google_total_sent, outlook_total_sent, overall_esp_breakdown, and domain_breakdown (each domain has its own esp_breakdown). Returns 404 if no completed test exists. |
get_mailboxdestructive | Get one mailbox by id (GET /api/v1/mailboxes/{id}). Call list_mailboxes first when you only have a name or email. Set includeCredentials=true to include SMTP and IMAP connection details. |
get_medestructive | Get the current Aerosend account (GET /api/v1/me): id, name, email, domain_slots, domain_slots_used, mailbox_slots, mailbox_slots_used, status |
get_tagdestructive | Get one tag by id (GET /api/v1/tags/{id}), including domain_count and mailbox_count by default. Call list_tags first when you only have a name. |
greetdestructive | Return a greeting for a person by name |
list_domain_burn_keysdestructive | List connected Smartlead and Instantly sequencer keys (GET /api/v1/domain-burn/keys). Each row has id, sequencer, display_name, report_status (NOT_STARTED, IN_PROGRESS, COMPLETED, FAILED), and message. Pass id into get_domain_burn_report, get_domain_burn_scan_status, or get_domain_burn_detail to scope results to that key. Keys themselves are never returned. If the list is empty, tell the user to add keys at https://app.aerosend.io/connect-sequencer — do not collect API keys in chat. |
list_domainsdestructive | List domains in the current Aerosend account (GET /api/v1/domains). Filter with search (domain name substring), status (active, inactive, pending, in_progress), tagIds (comma-separated), and isWarmup. Sort is latest or oldest (default latest). Each item includes id, domain_tld, mail_domain, status, is_warmup, mailbox_count, redirect_url, nameservers, dns_provider. Set includeTags or includeMailboxes to expand those. Use get_domain with an id from this list for full details. Page size default 20, maximum 100. |
list_mailboxesdestructive | List mailboxes in the current Aerosend account (GET /api/v1/mailboxes). Filter with search (email substring), status (active, inactive, pending, in_progress), domainId, and tagIds (comma-separated). Sort is latest or oldest (default latest). Each item includes id, email, first_name, last_name, status, domain_id. Set includeTags to attach tags. Set includeCredentials only when SMTP/IMAP details are needed. Use get_mailbox with an id from this list for full details. Page size default 20, maximum 100. |
list_tagsdestructive | List tags in the current Aerosend account (GET /api/v1/tags). Search matches the normalized name (lowercase, hyphenated) as well as display name. Filter with status. Set includeCounts=true for domain_count and mailbox_count. Each item includes id, name, display_name, color, status. Page size default 20, maximum 100. Use get_tag with an id from this list for one tag. |
list_warmup_scoresdestructive | List warmup score and warmup start date for each mailbox (GET /api/v1/analytics/warmup-scores). Each item includes email, score, warmup_start_date. Page size default 20, maximum 100. Call list_mailboxes first when you only have a name. |
map_tags_to_domainsdestructive | Map tags onto domains (POST /api/v1/tags/domains/mapping). Existing mappings are ignored. Set includeDomainMailboxes=true to also tag mailboxes under those domains. |
map_tags_to_mailboxesdestructive | Map tags onto mailboxes (POST /api/v1/tags/mailboxes/mapping). Existing mappings are ignored. |
remove_tag_from_domainsdestructive | Remove one tag from domains (DELETE /api/v1/tags/{tagId}/domains). The tag itself is kept. Set includeDomainMailboxes=true to also untag mailboxes under those domains. |
remove_tag_from_mailboxesdestructive | Remove one tag from mailboxes (DELETE /api/v1/tags/{tagId}/mailboxes). The tag itself is kept. |
request_domain_deletiondestructive | Ask the Aerosend team to delete domains (POST /api/v1/domains/deletion-request). Use this when the user wants to delete a list of domains, including active ones. Pass comma-separated domain names. Domains are NOT deleted; Slack notifies the team. Tell the user the request was submitted and domains remain until the team acts. Max 100 per request. |
update_domain_redirect_urlsdestructive | Update redirect URLs for one or more domains (PUT /api/v1/domains/redirect-urls). Pass domainId plus redirectUrl for one domain, or domainsJson as [{"domain_id":123,"redirect_url":"mysite.com"}]. Max 100 per request. |
update_tagdestructive | Update a tag display name and/or color (PUT /api/v1/tags/{id}). Changing display_name recalculates the normalized name. Mappings are unchanged. At least one of displayName or color is required. |
Schemas: list_tools.
{
"name": "io.aerosend/mcp",
"title": "Aerosend",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://mcp.aerosend.io/mcp",
"type": "streamable-http",
"headers": [
{
"name": "X-API-Key",
"isSecret": true,
"description": "Aerosend API key (starts with aero_), from app.aerosend.io > Developer. Not needed if your client signs in with OAuth."
}
]
}
],
"version": "1.0.0",
"repository": {
"url": "https://github.com/Aerosend-Public/aerosend-mcp",
"source": "github"
},
"websiteUrl": "https://www.aerosend.io/mcp/",
"description": "Manage Aerosend cold email domains, mailboxes, tags, warmup, inbox placement and domain burn."
}