SpacePost
dev.spacepost/mcpVersion 0.2.2Send email and manage domains, contacts and webhooks on SpacePost, the Resend-compatible email API.
Status
Responds255 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:27 UTC
- Latency
- 255 ms
- Remotes responding
- 1 of 1
- Sign-in
- API key
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 21:12 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://api.spacepost.dev/mcpResponds255 msNo sign-in
Claude Code
claude mcp add --transport http spacepost https://api.spacepost.dev/mcp --header 'Authorization: Bearer <YOUR_TOKEN>'Replace <YOUR_TOKEN> before running.
Claude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: spacepost
Remote MCP server URL: https://api.spacepost.dev/mcp
This server expects the header Authorization.Cursor
{
"mcpServers": {
"spacepost": {
"url": "https://api.spacepost.dev/mcp",
"headers": {
"Authorization": "Bearer <YOUR_TOKEN>"
}
}
}
}Replace <YOUR_TOKEN> before running.
VS Code
code --add-mcp '{"name":"spacepost","type":"http","url":"https://api.spacepost.dev/mcp","headers":{"Authorization":"Bearer <YOUR_TOKEN>"}}'Replace <YOUR_TOKEN> before running.
Streamable HTTP
npm: @spacepost/mcp 0.2.2Package only
npm (npx)
claude mcp add spacepost -e 'SPACEPOST_API_KEY=<YOUR_SPACEPOST_API_KEY>' -- npx -y @spacepost/mcp@0.2.2Replace <YOUR_SPACEPOST_API_KEY> before running.
Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
46 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
cancel_emailCancel a scheduled email.
Requires a `full_access` API key. API: `POST /emails/{id}/cancel` (operationId `cancelEmail`, Emails). | Yes | No | Yes | No |
create_api_keyCreate an API key.
The `token` is returned only in this response.
Requires a `full_access` API key. API: `POST /api-keys` (operationId `createApiKey`, API Keys). | No | No | No | No |
create_audienceCreate an audience.
Requires a `full_access` API key. API: `POST /audiences` (operationId `createAudience`, Audiences). | No | No | No | No |
create_broadcastCreate a broadcast.
Creates a draft. The `from` address must belong to a verified domain of your team and `audience_id` to one of your audiences.
Requires a `full_access` API key. API: `POST /broadcasts` (operationId `createBroadcast`, Broadcasts). | No | No | No | No |
create_contactCreate a contact.
Emails are lower-cased. An address can only appear once per audience.
Requires a `full_access` API key. API: `POST /audiences/{audienceId}/contacts` (operationId `createContact`, Contacts). | No | No | No | No |
create_domainCreate a domain.
Registers a domain and returns the DNS records to add (three DKIM CNAMEs, plus MX and SPF on the MAIL FROM subdomain).
Domain names are globally unique. The number of domains is limited by your plan (Free 3, Pro 10, Scale 1,000).
The response lists the DNS records (DKIM CNAMEs, MAIL FROM MX and SPF TXT) the user must add at their DNS provider; afterwards call verify_domain and then get_domain to see the new status. DNS changes can take minutes to hours.
Requires a `full_access` API key. API: `POST /domains` (operationId `createDomain`, Domains). | No | No | No | No |
create_suppressionAdd a suppression.
Adds the address with reason `manual`. Adding an address that is already suppressed returns the existing entry.
Requires a `full_access` API key. API: `POST /suppressions` (operationId `createSuppression`, Suppressions). | No | No | No | No |
create_tenantCreate a tenant.
Creates one of your customers, with its own SES tenant (isolated reputation). `external_id` must be unique within your account.
Requires a `full_access` API key. API: `POST /tenants` (operationId `createTenant`, Tenants). | No | No | No | No |
create_webhookCreate a webhook.
In production the endpoint must use https and resolve to a public address.
Requires a `full_access` API key. API: `POST /webhooks` (operationId `createWebhook`, Webhooks). | No | No | No | No |
delete_api_keyDelete an API key.
The key stops working immediately. The response body is an empty object.
Requires a `full_access` API key. API: `DELETE /api-keys/{id}` (operationId `deleteApiKey`, API Keys). | Yes | No | Yes | No |
delete_audienceDelete an audience.
Also deletes its contacts.
Requires a `full_access` API key. API: `DELETE /audiences/{id}` (operationId `deleteAudience`, Audiences). | Yes | No | Yes | No |
delete_broadcastDelete a broadcast.
Only drafts and broadcasts that are scheduled for the future can be deleted.
Requires a `full_access` API key. API: `DELETE /broadcasts/{id}` (operationId `deleteBroadcast`, Broadcasts). | Yes | No | Yes | No |
delete_contactDelete a contact.
Requires a `full_access` API key. API: `DELETE /audiences/{audienceId}/contacts/{idOrEmail}` (operationId `deleteContact`, Contacts). | Yes | No | Yes | No |
delete_domainDelete a domain.
Requires a `full_access` API key. API: `DELETE /domains/{id}` (operationId `deleteDomain`, Domains). | Yes | No | Yes | No |
delete_suppressionRemove a suppression.
Requires a `full_access` API key. API: `DELETE /suppressions/{idOrEmail}` (operationId `deleteSuppression`, Suppressions). | Yes | No | Yes | No |
delete_tenantDelete a tenant.
Fails with `422` while the tenant still has domains; delete those first.
Requires a `full_access` API key. API: `DELETE /tenants/{ref}` (operationId `deleteTenant`, Tenants). | Yes | No | Yes | No |
delete_webhookDelete a webhook.
Requires a `full_access` API key. API: `DELETE /webhooks/{id}` (operationId `deleteWebhook`, Webhooks). | Yes | No | Yes | No |
get_audienceRetrieve an audience.
Requires a `full_access` API key. API: `GET /audiences/{id}` (operationId `getAudience`, Audiences). | No | Yes | Yes | No |
get_broadcastRetrieve a broadcast.
Requires a `full_access` API key. API: `GET /broadcasts/{id}` (operationId `getBroadcast`, Broadcasts). | No | Yes | Yes | No |
get_broadcast_readinessCheck a broadcast before sending.
SpacePost extension (not part of Resend). Returns a deliverability checklist: sender domain and DMARC, subject, Gmail
clipping (HTML over 102 KB), image-heavy bodies, link shorteners, spam phrases, unsubscribe link and audience quality.
`ready` is false when any check has level `error`; `POST /broadcasts/{id}/send` is then refused with `validation_error`.
Warnings never block a send.
Requires a `full_access` API key. API: `GET /broadcasts/{id}/readiness` (operationId `getBroadcastReadiness`, Broadcasts). | No | Yes | Yes | No |
get_contactRetrieve a contact.
Requires a `full_access` API key. API: `GET /audiences/{audienceId}/contacts/{idOrEmail}` (operationId `getContact`, Contacts). | No | Yes | Yes | No |
get_domainRetrieve a domain.
Requires a `full_access` API key. API: `GET /domains/{id}` (operationId `getDomain`, Domains). | No | Yes | Yes | No |
get_emailRetrieve an email.
Requires a `full_access` API key. API: `GET /emails/{id}` (operationId `getEmail`, Emails). | No | Yes | Yes | No |
get_tenantRetrieve a tenant.
Requires a `full_access` API key. API: `GET /tenants/{ref}` (operationId `getTenant`, Tenants). | No | Yes | Yes | No |
get_webhookRetrieve a webhook.
Requires a `full_access` API key. API: `GET /webhooks/{id}` (operationId `getWebhook`, Webhooks). | No | Yes | Yes | No |
list_api_keysList API keys.
Requires a `full_access` API key. API: `GET /api-keys` (operationId `listApiKeys`, API Keys). | No | Yes | Yes | No |
list_audiencesList audiences.
Requires a `full_access` API key. API: `GET /audiences` (operationId `listAudiences`, Audiences). | No | Yes | Yes | No |
list_broadcastsList broadcasts.
Requires a `full_access` API key. API: `GET /broadcasts` (operationId `listBroadcasts`, Broadcasts). | No | Yes | Yes | No |
list_contactsList contacts.
Requires a `full_access` API key. API: `GET /audiences/{audienceId}/contacts` (operationId `listContacts`, Contacts). | No | Yes | Yes | No |
list_domainsList domains.
Requires a `full_access` API key. API: `GET /domains` (operationId `listDomains`, Domains). | No | Yes | Yes | No |
list_emailsList emails.
Returns sent and scheduled emails, newest first, without bodies.
Requires a `full_access` API key. API: `GET /emails` (operationId `listEmails`, Emails). | No | Yes | Yes | No |
list_suppressionsList suppressions.
Requires a `full_access` API key. API: `GET /suppressions` (operationId `listSuppressions`, Suppressions). | No | Yes | Yes | No |
list_tenantsList tenants.
Requires a `full_access` API key. API: `GET /tenants` (operationId `listTenants`, Tenants). | No | Yes | Yes | No |
list_webhooksList webhooks.
Requires a `full_access` API key. API: `GET /webhooks` (operationId `listWebhooks`, Webhooks). | No | Yes | Yes | No |
pause_tenantPause a tenant.
Stops all sending for the tenant. Sends return `403 sending_paused`; emails already queued fail. The body is optional.
Requires a `full_access` API key. API: `POST /tenants/{ref}/pause` (operationId `pauseTenant`, Tenants). | Yes | No | Yes | No |
send_batch_emailsSend batch emails.
Sends up to 100 emails in one call. All-or-nothing, if any email is invalid none are sent. Attachments, `scheduled_at` and a per-email `tenant_id` and a per-email `tracking` override are supported; the paused-tenant and tenant-cap errors apply to the whole batch.
Put the emails in `body` as an array. Prefer send_email for a single message.
Works with a `sending_access` or `full_access` API key. API: `POST /emails/batch` (operationId `sendBatchEmails`, Emails). | Yes | No | No | Yes |
send_broadcastSend or schedule a broadcast.
Queues a draft for delivery to every subscribed contact of its audience. The broadcast needs `html` or `text`.
Without `scheduled_at` it starts immediately; the status becomes `queued`, then `sending` and `sent`.
Sends to every subscribed contact in the audience. Run get_broadcast_readiness first and confirm with the user.
Requires a `full_access` API key. API: `POST /broadcasts/{id}/send` (operationId `sendBroadcast`, Broadcasts). | Yes | No | No | Yes |
send_emailSend an email.
Validates and queues one email. Each recipient counts towards your quota. Use `scheduled_at` to send later (up to 30 days ahead). Pass `tenant_id` to send on behalf of a tenant (not needed when the `from` domain belongs to one). Fails with `422` if `tenant_id` conflicts with the domain's tenant, `403 sending_paused` if the tenant is paused and `429 daily_quota_exceeded` if it reached its daily cap. Pass `tracking` (`{ open?, click? }`) to override the domain's open/click tracking for this email only; an omitted key keeps the domain setting.
`from` must be on a verified domain (e.g. "Acme <hi@acme.com>"); call list_domains to find one. Provide `html`, `text` or both. Send to delivered@test.spacepost.dev (or bounced@ / complained@) to test without sending real mail. Delivered email cannot be recalled: confirm recipients and content with the user when unsure. Pass `idempotency_key` when retrying so the email is not sent twice.
Request body: Either `html` or `text` is required. `reply_to` is also accepted as `replyTo` and `scheduled_at` as `scheduledAt`.
Works with a `sending_access` or `full_access` API key. API: `POST /emails` (operationId `sendEmail`, Emails). | Yes | No | No | Yes |
unpause_tenantUnpause a tenant.
Resumes sending. A tenant that was paused by the reputation guard (bounce or complaint rate) can only be unpaused by a
`trusted` or `internal` team; others get `403 invalid_access` and should contact support.
Requires a `full_access` API key. API: `POST /tenants/{ref}/unpause` (operationId `unpauseTenant`, Tenants). | No | No | Yes | No |
update_broadcastUpdate a broadcast.
Only drafts can be updated.
Request body: Any field of the create request; only drafts can be updated.
Requires a `full_access` API key. API: `PATCH /broadcasts/{id}` (operationId `updateBroadcast`, Broadcasts). | No | No | No | No |
update_contactUpdate a contact.
Requires a `full_access` API key. API: `PATCH /audiences/{audienceId}/contacts/{idOrEmail}` (operationId `updateContact`, Contacts). | No | No | No | No |
update_domainUpdate a domain.
Toggles open and click tracking.
Requires a `full_access` API key. API: `PATCH /domains/{id}` (operationId `updateDomain`, Domains). | No | No | No | No |
update_emailReschedule an email.
Changes `scheduled_at` of an email that is still `scheduled`.
Requires a `full_access` API key. API: `PATCH /emails/{id}` (operationId `updateEmail`, Emails). | No | No | No | No |
update_tenantUpdate a tenant.
Changes the name, `external_id` or `daily_limit` (`null` removes the cap).
Requires a `full_access` API key. API: `PATCH /tenants/{ref}` (operationId `updateTenant`, Tenants). | No | No | No | No |
update_webhookUpdate a webhook.
Requires a `full_access` API key. API: `PATCH /webhooks/{id}` (operationId `updateWebhook`, Webhooks). | No | No | No | No |
verify_domainVerify a domain.
Re-checks DNS now. Retrieve the domain afterwards to read the new `status` and per-record statuses.
Requires a `full_access` API key. API: `POST /domains/{id}/verify` (operationId `verifyDomain`, Domains). | No | No | Yes | No |
Details
- Registry status
- Active
- Published
- Nov 4, 2026
- Updated
- Nov 4, 2026
- Categories (suggested)
- Developer toolsCommunicationSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
- GDPR
- Not declared