SpacePost

Send email and manage domains, contacts and webhooks on SpacePost, the Resend-compatible email API.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
88%
命名质量
100%
投毒风险
100%
权限匹配度
50%
协议合规性
100%

发现(5)

  • LOWTool 'list_webhooks' suggests web access but openWorldHint=false在 list_webhooks 中
  • LOWTool 'create_webhook' suggests web access but openWorldHint=false在 create_webhook 中
  • LOWTool 'get_webhook' suggests web access but openWorldHint=false在 get_webhook 中
  • LOWTool 'update_webhook' suggests web access but openWorldHint=false在 update_webhook 中
  • LOWTool 'delete_webhook' suggests web access but openWorldHint=false在 delete_webhook 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~9,848token 数(工具定义)
~1.3 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 7.69%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "@spacepost/mcp"
      ]
    }
  }
}

可运行的软件包

npm@spacepost/mcp0.2.1stdio

远程端点

https://api.spacepost.dev/mcpstreamable-http

它能做什么

工具清单

工具(46)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢list_emails(limit, after, before)

List emails. Returns sent and scheduled emails, newest first, without bodies. Requires a `full_access` API key. API: `GET /emails` (operationId `listEmails`, Emails).

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Number of items to return."
    },
    "after": {
      "type": "string",
      "format": "uuid",
      "description": "Return items older than this id (next page). Cannot be combined with `before`."
    },
    "before": {
      "type": "string",
      "format": "uuid",
      "description": "Return items newer than this id (previous page). Cannot be combined with `after`."
    }
  }
}
🟡send_email(idempotency_key, from, to, subject, cc, ...)

Send 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. `from` must be on a verified domain (e.g. "Acme <[email protected]>"); call list_domains to find one. Provide `html`, `text` or both. Send to [email protected] (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).

输入模式

{
  "type": "object",
  "properties": {
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 256,
      "description": "A unique key (1 to 256 characters) that makes the request safe to retry for 24 hours.",
      "examples": [
        "welcome-user-4821"
      ]
    },
    "from": {
      "type": "string",
      "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
      "examples": [
        "Acme <[email protected]>"
      ]
    },
    "to": {
      "oneOf": [
        {
          "type": "string",
          "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
          "examples": [
            "Acme <[email protected]>"
          ]
        },
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
            "examples": [
              "Acme <[email protected]>"
            ]
          }
        }
      ]
    },
    "subject": {
      "type": "string",
      "minLength": 1,
      "maxLength": 998
    },
    "cc": {
      "oneOf": [
        {
          "type": "string",
          "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
          "examples": [
            "Acme <[email protected]>"
          ]
        },
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
            "examples": [
              "Acme <[email protected]>"
            ]
          }
        }
      ]
    },
    "bcc": {
      "oneOf": [
        {
          "type": "string",
          "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
          "examples": [
            "Acme <[email protected]>"
          ]
        },
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
            "examples": [
              "Acme <[email protected]>"
            ]
          }
        }
      ]
    },
    "reply_to": {
      "oneOf": [
        {
          "type": "string",
          "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
          "examples": [
            "Acme <[email protected]>"
          ]
        },
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
            "examples": [
              "Acme <[email protected]>"
            ]
          }
        }
      ]
    },
    "html": {
      "type": "string"
    },
    "text": {
      "type": "string"
    },
    "headers": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "attachments": {
      "type": "array",
      "maxItems": 50,
      "items": {
        "type": "object",
        "required": [
          "filename"
        ],
        "description": "Provide exactly one of `content` or `path`.",
        "properties": {
          "filename": {
            "type": "string",
            "maxLength": 255
          },
          "content": {
            "type": "string",
            "description": "Base64-encoded file content."
          },
          "path": {
            "type": "string",
            "format": "uri",
            "description": "A public URL fetched at send time."
          },
          "content_type": {
            "type": "string",
            "examples": [
              "application/pdf"
            ]
          },
          "content_id": {
            "type": "string",
            "description": "Content-ID for inline images (`cid:`)."
          }
        }
      }
    },
    "tags": {
      "type": "array",
      "maxItems": 50,
      "items": {
        "type": "object",
        "required": [
          "name",
          "value"
        ],
        "properties": {
          "name": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]+$",
            "maxLength": 256
          },
          "value": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]+$",
            "maxLength": 256
          }
        }
      }
    },
    "scheduled_at": {
      "type": "string",
      "description": "ISO 8601 date-time or natural language such as \"in 1 hour\" or \"in 2 days\". At most 30 days ahead.",
      "examples": [
        "in 1 hour",
        "2026-10-30T09:00:00Z"
      ]
    },
    "tenant_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Platform mode. Our tenant id or your `external_id`. Optional when the `from` domain belongs to a tenant; a conflict with the domain's tenant is a 422."
    }
  },
  "required": [
    "from",
    "to",
    "subject"
  ]
}
🟡send_batch_emails(idempotency_key, body)

Send 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` 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).

输入模式

{
  "type": "object",
  "properties": {
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 256,
      "description": "A unique key (1 to 256 characters) that makes the request safe to retry for 24 hours.",
      "examples": [
        "welcome-user-4821"
      ]
    },
    "body": {
      "type": "array",
      "minItems": 1,
      "maxItems": 100,
      "items": {
        "type": "object",
        "description": "Either `html` or `text` is required. `reply_to` is also accepted as `replyTo` and `scheduled_at` as `scheduledAt`.",
        "required": [
          "from",
          "to",
          "subject"
        ],
        "properties": {
          "from": {
            "type": "string",
            "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
            "examples": [
              "Acme <[email protected]>"
            ]
          },
          "to": {
            "oneOf": [
              {
                "type": "string",
                "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
                "examples": [
                  "Acme <[email protected]>"
                ]
              },
              {
                "type": "array",
                "minItems": 1,
                "maxItems": 50,
                "items": {
                  "type": "string",
                  "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
                  "examples": [
                    "Acme <[email protected]>"
                  ]
                }
              }
            ]
          },
          "subject": {
            "type": "string",
            "minLength": 1,
            "maxLength": 998
          },
          "cc": {
            "oneOf": [
              {
                "type": "string",
                "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
                "examples": [
                  "Acme <[email protected]>"
                ]
              },
              {
                "type": "array",
                "minItems": 1,
                "maxItems": 50,
                "items": {
                  "type": "string",
                  "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
                  "examples": [
                    "Acme <[email protected]>"
                  ]
                }
              }
            ]
          },
          "bcc": {
            "oneOf": [
              {
                "type": "string",
                "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
                "examples": [
                  "Acme <[email protected]>"
                ]
              },
              {
                "type": "array",
                "minItems": 1,
                "maxItems": 50,
                "items": {
                  "type": "string",
                  "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
                  "examples": [
                    "Acme <[email protected]>"
                  ]
                }
              }
            ]
          },
          "reply_to": {
            "oneOf": [
              {
                "type": "string",
                "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
                "examples": [
                  "Acme <[email protected]>"
                ]
              },
              {
                "type": "array",
                "minItems": 1,
                "maxItems": 50,
                "items": {
                  "type": "string",
                  "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
                  "examples": [
                    "Acme <[email protected]>"
                  ]
                }
              }
            ]
          },
          "html": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "attachments": {
            "type": "array",
            "maxItems": 50,
            "items": {
              "type": "object",
              "required": [
                "filename"
              ],
              "description": "Provide exactly one of `content` or `path`.",
              "properties": {
                "filename": {
                  "type": "string",
                  "maxLength": 255
                },
                "content": {
                  "type": "string",
                  "description": "Base64-encoded file content."
                },
                "path": {
                  "type": "string",
                  "format": "uri",
                  "description": "A public URL fetched at send time."
                },
                "content_type": {
                  "type": "string",
                  "examples": [
                    "application/pdf"
                  ]
                },
                "content_id": {
                  "type": "string",
                  "description": "Content-ID for inline images (`cid:`)."
                }
              }
            }
          },
          "tags": {
            "type": "array",
            "maxItems": 50,
            "items": {
              "type": "object",
              "required": [
                "name",
                "value"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "pattern": "^[A-Za-z0-9_-]+$",
                  "maxLength": 256
                },
                "value": {
                  "type": "string",
                  "pattern": "^[A-Za-z0-9_-]+$",
                  "maxLength": 256
                }
              }
            }
          },
          "scheduled_at": {
            "type": "string",
            "description": "ISO 8601 date-time or natural language such as \"in 1 hour\" or \"in 2 days\". At most 30 days ahead.",
            "examples": [
              "in 1 hour",
              "2026-10-30T09:00:00Z"
            ]
          },
          "tenant_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Platform mode. Our tenant id or your `external_id`. Optional when the `from` domain belongs to a tenant; a conflict with the domain's tenant is a 422."
          }
        }
      },
      "description": "The JSON request body."
    }
  },
  "required": [
    "body"
  ]
}
🟢get_email(id)

Retrieve an email. Requires a `full_access` API key. API: `GET /emails/{id}` (operationId `getEmail`, Emails).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "The email id."
    }
  },
  "required": [
    "id"
  ]
}
🟡update_email(id, scheduled_at)

Reschedule 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).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "The email id."
    },
    "scheduled_at": {
      "type": "string",
      "description": "ISO 8601 date-time or natural language such as \"in 1 hour\" or \"in 2 days\". At most 30 days ahead.",
      "examples": [
        "in 1 hour",
        "2026-10-30T09:00:00Z"
      ]
    }
  },
  "required": [
    "id",
    "scheduled_at"
  ]
}
🔴cancel_email(id)

Cancel a scheduled email. Requires a `full_access` API key. API: `POST /emails/{id}/cancel` (operationId `cancelEmail`, Emails).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "The email id."
    }
  },
  "required": [
    "id"
  ]
}
🟢list_domains(limit, after, before)

List domains. Requires a `full_access` API key. API: `GET /domains` (operationId `listDomains`, Domains).

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Number of items to return."
    },
    "after": {
      "type": "string",
      "format": "uuid",
      "description": "Return items older than this id (next page). Cannot be combined with `before`."
    },
    "before": {
      "type": "string",
      "format": "uuid",
      "description": "Return items newer than this id (previous page). Cannot be combined with `after`."
    }
  }
}
🟡create_domain(name, region, custom_return_path, tenant_id)

Create 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).

输入模式

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "examples": [
        "acme.com"
      ],
      "description": "Domain or subdomain you own. Lower-cased."
    },
    "region": {
      "type": "string",
      "description": "Accepted for compatibility. The region is chosen by the platform and returned on the domain."
    },
    "custom_return_path": {
      "type": "string",
      "pattern": "^[a-z0-9-]{1,63}$",
      "default": "send",
      "description": "Subdomain used for the custom MAIL FROM (bounce handling and SPF)."
    },
    "tenant_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Platform mode. Make the domain tenant-owned (our tenant id or your `external_id`). Mail from it is attributed to that tenant."
    }
  },
  "required": [
    "name"
  ]
}
🟢get_domain(id)

Retrieve a domain. Requires a `full_access` API key. API: `GET /domains/{id}` (operationId `getDomain`, Domains).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}
🟡update_domain(id, open_tracking, click_tracking, tls)

Update a domain. Toggles open and click tracking. Requires a `full_access` API key. API: `PATCH /domains/{id}` (operationId `updateDomain`, Domains).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "open_tracking": {
      "type": "boolean"
    },
    "click_tracking": {
      "type": "boolean"
    },
    "tls": {
      "type": "string",
      "enum": [
        "opportunistic",
        "enforced"
      ]
    }
  },
  "required": [
    "id"
  ]
}
🔴delete_domain(id)

Delete a domain. Requires a `full_access` API key. API: `DELETE /domains/{id}` (operationId `deleteDomain`, Domains).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}
🟢verify_domain(id)

Verify 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).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}
🟢list_api_keys(limit, after, before)

List API keys. Requires a `full_access` API key. API: `GET /api-keys` (operationId `listApiKeys`, API Keys).

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Number of items to return."
    },
    "after": {
      "type": "string",
      "format": "uuid",
      "description": "Return items older than this id (next page). Cannot be combined with `before`."
    },
    "before": {
      "type": "string",
      "format": "uuid",
      "description": "Return items newer than this id (previous page). Cannot be combined with `after`."
    }
  }
}
🟡create_api_key(name, permission, domain_id)

Create 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).

输入模式

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 50
    },
    "permission": {
      "type": "string",
      "enum": [
        "full_access",
        "sending_access"
      ],
      "default": "full_access"
    },
    "domain_id": {
      "type": "string",
      "format": "uuid",
      "description": "Restrict a `sending_access` key to one of your domains. Not allowed with `full_access`."
    }
  },
  "required": [
    "name"
  ]
}
🔴delete_api_key(id)

Delete 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).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}
🟢list_webhooks(limit, after, before)

List webhooks. Requires a `full_access` API key. API: `GET /webhooks` (operationId `listWebhooks`, Webhooks).

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Number of items to return."
    },
    "after": {
      "type": "string",
      "format": "uuid",
      "description": "Return items older than this id (next page). Cannot be combined with `before`."
    },
    "before": {
      "type": "string",
      "format": "uuid",
      "description": "Return items newer than this id (previous page). Cannot be combined with `after`."
    }
  }
}
🟡create_webhook(endpoint, events)

Create 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).

输入模式

{
  "type": "object",
  "properties": {
    "endpoint": {
      "type": "string",
      "format": "uri",
      "description": "Public URL that receives POST requests. https is required in production."
    },
    "events": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string",
        "description": "Event names you can subscribe a webhook to.",
        "enum": [
          "email.sent",
          "email.delivered",
          "email.delivery_delayed",
          "email.bounced",
          "email.complained",
          "email.opened",
          "email.clicked",
          "email.failed",
          "email.scheduled",
          "email.suppressed"
        ]
      }
    }
  },
  "required": [
    "endpoint",
    "events"
  ]
}
🟢get_webhook(id)

Retrieve a webhook. Requires a `full_access` API key. API: `GET /webhooks/{id}` (operationId `getWebhook`, Webhooks).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}
🟡update_webhook(id, endpoint, events, status)

Update a webhook. Requires a `full_access` API key. API: `PATCH /webhooks/{id}` (operationId `updateWebhook`, Webhooks).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "endpoint": {
      "type": "string",
      "format": "uri"
    },
    "events": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string",
        "description": "Event names you can subscribe a webhook to.",
        "enum": [
          "email.sent",
          "email.delivered",
          "email.delivery_delayed",
          "email.bounced",
          "email.complained",
          "email.opened",
          "email.clicked",
          "email.failed",
          "email.scheduled",
          "email.suppressed"
        ]
      }
    },
    "status": {
      "type": "string",
      "enum": [
        "enabled",
        "disabled"
      ]
    }
  },
  "required": [
    "id"
  ]
}
🔴delete_webhook(id)

Delete a webhook. Requires a `full_access` API key. API: `DELETE /webhooks/{id}` (operationId `deleteWebhook`, Webhooks).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}
🟢list_audiences(limit, after, before)

List audiences. Requires a `full_access` API key. API: `GET /audiences` (operationId `listAudiences`, Audiences).

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Number of items to return."
    },
    "after": {
      "type": "string",
      "format": "uuid",
      "description": "Return items older than this id (next page). Cannot be combined with `before`."
    },
    "before": {
      "type": "string",
      "format": "uuid",
      "description": "Return items newer than this id (previous page). Cannot be combined with `after`."
    }
  }
}
🟡create_audience(name)

Create an audience. Requires a `full_access` API key. API: `POST /audiences` (operationId `createAudience`, Audiences).

输入模式

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "required": [
    "name"
  ]
}
🟢get_audience(id)

Retrieve an audience. Requires a `full_access` API key. API: `GET /audiences/{id}` (operationId `getAudience`, Audiences).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}
🔴delete_audience(id)

Delete an audience. Also deletes its contacts. Requires a `full_access` API key. API: `DELETE /audiences/{id}` (operationId `deleteAudience`, Audiences).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}
🟢list_contacts(audience_id, limit, after, before)

List contacts. Requires a `full_access` API key. API: `GET /audiences/{audienceId}/contacts` (operationId `listContacts`, Contacts).

输入模式

{
  "type": "object",
  "properties": {
    "audience_id": {
      "type": "string",
      "format": "uuid"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Number of items to return."
    },
    "after": {
      "type": "string",
      "format": "uuid",
      "description": "Return items older than this id (next page). Cannot be combined with `before`."
    },
    "before": {
      "type": "string",
      "format": "uuid",
      "description": "Return items newer than this id (previous page). Cannot be combined with `after`."
    }
  },
  "required": [
    "audience_id"
  ]
}
🟡create_contact(audience_id, email, first_name, last_name, unsubscribed)

Create 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).

输入模式

{
  "type": "object",
  "properties": {
    "audience_id": {
      "type": "string",
      "format": "uuid"
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "first_name": {
      "type": "string",
      "maxLength": 100
    },
    "last_name": {
      "type": "string",
      "maxLength": 100
    },
    "unsubscribed": {
      "type": "boolean",
      "default": false
    }
  },
  "required": [
    "audience_id",
    "email"
  ]
}
🟢get_contact(audience_id, id_or_email)

Retrieve a contact. Requires a `full_access` API key. API: `GET /audiences/{audienceId}/contacts/{idOrEmail}` (operationId `getContact`, Contacts).

输入模式

{
  "type": "object",
  "properties": {
    "audience_id": {
      "type": "string",
      "format": "uuid"
    },
    "id_or_email": {
      "type": "string",
      "description": "The contact id or its (URL-encoded) email address.",
      "examples": [
        "[email protected]"
      ]
    }
  },
  "required": [
    "audience_id",
    "id_or_email"
  ]
}
🟡update_contact(audience_id, id_or_email, first_name, last_name, unsubscribed)

Update a contact. Requires a `full_access` API key. API: `PATCH /audiences/{audienceId}/contacts/{idOrEmail}` (operationId `updateContact`, Contacts).

输入模式

{
  "type": "object",
  "properties": {
    "audience_id": {
      "type": "string",
      "format": "uuid"
    },
    "id_or_email": {
      "type": "string",
      "description": "The contact id or its (URL-encoded) email address.",
      "examples": [
        "[email protected]"
      ]
    },
    "first_name": {
      "type": "string",
      "maxLength": 100
    },
    "last_name": {
      "type": "string",
      "maxLength": 100
    },
    "unsubscribed": {
      "type": "boolean"
    }
  },
  "required": [
    "audience_id",
    "id_or_email"
  ]
}
🔴delete_contact(audience_id, id_or_email)

Delete a contact. Requires a `full_access` API key. API: `DELETE /audiences/{audienceId}/contacts/{idOrEmail}` (operationId `deleteContact`, Contacts).

输入模式

{
  "type": "object",
  "properties": {
    "audience_id": {
      "type": "string",
      "format": "uuid"
    },
    "id_or_email": {
      "type": "string",
      "description": "The contact id or its (URL-encoded) email address.",
      "examples": [
        "[email protected]"
      ]
    }
  },
  "required": [
    "audience_id",
    "id_or_email"
  ]
}
🟢list_broadcasts(limit, after, before)

List broadcasts. Requires a `full_access` API key. API: `GET /broadcasts` (operationId `listBroadcasts`, Broadcasts).

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Number of items to return."
    },
    "after": {
      "type": "string",
      "format": "uuid",
      "description": "Return items older than this id (next page). Cannot be combined with `before`."
    },
    "before": {
      "type": "string",
      "format": "uuid",
      "description": "Return items newer than this id (previous page). Cannot be combined with `after`."
    }
  }
}
🟡create_broadcast(audience_id, from, subject, reply_to, preview_text, ...)

Create 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).

输入模式

{
  "type": "object",
  "properties": {
    "audience_id": {
      "type": "string",
      "format": "uuid"
    },
    "from": {
      "type": "string",
      "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
      "examples": [
        "Acme <[email protected]>"
      ]
    },
    "subject": {
      "type": "string",
      "minLength": 1,
      "maxLength": 998
    },
    "reply_to": {
      "oneOf": [
        {
          "type": "string",
          "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
          "examples": [
            "Acme <[email protected]>"
          ]
        },
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
            "examples": [
              "Acme <[email protected]>"
            ]
          }
        }
      ]
    },
    "preview_text": {
      "type": "string",
      "maxLength": 200
    },
    "html": {
      "type": "string"
    },
    "text": {
      "type": "string"
    },
    "name": {
      "type": "string",
      "maxLength": 100,
      "description": "Internal name",
      "not shown to recipients.": null
    }
  },
  "required": [
    "audience_id",
    "from",
    "subject"
  ]
}
🟢get_broadcast(id)

Retrieve a broadcast. Requires a `full_access` API key. API: `GET /broadcasts/{id}` (operationId `getBroadcast`, Broadcasts).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}
🟡update_broadcast(id, audience_id, from, subject, reply_to, ...)

Update 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).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "audience_id": {
      "type": "string",
      "format": "uuid"
    },
    "from": {
      "type": "string",
      "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
      "examples": [
        "Acme <[email protected]>"
      ]
    },
    "subject": {
      "type": "string",
      "minLength": 1,
      "maxLength": 998
    },
    "reply_to": {
      "oneOf": [
        {
          "type": "string",
          "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
          "examples": [
            "Acme <[email protected]>"
          ]
        },
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "description": "An email address, optionally with a display name: `Acme <[email protected]>`.",
            "examples": [
              "Acme <[email protected]>"
            ]
          }
        }
      ]
    },
    "preview_text": {
      "type": "string",
      "maxLength": 200
    },
    "html": {
      "type": "string"
    },
    "text": {
      "type": "string"
    },
    "name": {
      "type": "string",
      "maxLength": 100
    }
  },
  "required": [
    "id"
  ]
}
🔴delete_broadcast(id)

Delete 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).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}
🟢get_broadcast_readiness(id)

Check 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).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}
🟡send_broadcast(id, scheduled_at)

Send 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).

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "scheduled_at": {
      "type": "string",
      "description": "ISO 8601 date-time or natural language such as \"in 1 hour\" or \"in 2 days\". At most 30 days ahead.",
      "examples": [
        "in 1 hour",
        "2026-10-30T09:00:00Z"
      ]
    }
  },
  "required": [
    "id"
  ]
}
🟢list_suppressions(limit, after, before)

List suppressions. Requires a `full_access` API key. API: `GET /suppressions` (operationId `listSuppressions`, Suppressions).

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Number of items to return."
    },
    "after": {
      "type": "string",
      "format": "uuid",
      "description": "Return items older than this id (next page). Cannot be combined with `before`."
    },
    "before": {
      "type": "string",
      "format": "uuid",
      "description": "Return items newer than this id (previous page). Cannot be combined with `after`."
    }
  }
}
🟡create_suppression(email)

Add 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).

输入模式

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "format": "email"
    }
  },
  "required": [
    "email"
  ]
}
🔴delete_suppression(id_or_email)

Remove a suppression. Requires a `full_access` API key. API: `DELETE /suppressions/{idOrEmail}` (operationId `deleteSuppression`, Suppressions).

输入模式

{
  "type": "object",
  "properties": {
    "id_or_email": {
      "type": "string",
      "description": "The suppression id or the (URL-encoded) email address.",
      "examples": [
        "[email protected]"
      ]
    }
  },
  "required": [
    "id_or_email"
  ]
}
🟢list_tenants(limit, after, before)

List tenants. Requires a `full_access` API key. API: `GET /tenants` (operationId `listTenants`, Tenants).

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Number of items to return."
    },
    "after": {
      "type": "string",
      "format": "uuid",
      "description": "Return items older than this id (next page). Cannot be combined with `before`."
    },
    "before": {
      "type": "string",
      "format": "uuid",
      "description": "Return items newer than this id (previous page). Cannot be combined with `after`."
    }
  }
}
🟡create_tenant(name, external_id, daily_limit)

Create 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).

输入模式

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "external_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Your own id for the customer. Unique per account; accepted wherever a tenant id is."
    },
    "daily_limit": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 1,
      "description": "Max recipients per day for this tenant. Omit or null for no cap."
    }
  },
  "required": [
    "name"
  ]
}
🟢get_tenant(ref)

Retrieve a tenant. Requires a `full_access` API key. API: `GET /tenants/{ref}` (operationId `getTenant`, Tenants).

输入模式

{
  "type": "object",
  "properties": {
    "ref": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The tenant id or your own `external_id`.",
      "examples": [
        "cust_123"
      ]
    }
  },
  "required": [
    "ref"
  ]
}
🟡update_tenant(ref, name, external_id, daily_limit)

Update 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).

输入模式

{
  "type": "object",
  "properties": {
    "ref": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The tenant id or your own `external_id`.",
      "examples": [
        "cust_123"
      ]
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "external_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "daily_limit": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 1,
      "description": "Null removes the cap."
    }
  },
  "required": [
    "ref"
  ]
}
🔴delete_tenant(ref)

Delete 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).

输入模式

{
  "type": "object",
  "properties": {
    "ref": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The tenant id or your own `external_id`.",
      "examples": [
        "cust_123"
      ]
    }
  },
  "required": [
    "ref"
  ]
}
🔴pause_tenant(ref, reason)

Pause 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).

输入模式

{
  "type": "object",
  "properties": {
    "ref": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The tenant id or your own `external_id`.",
      "examples": [
        "cust_123"
      ]
    },
    "reason": {
      "type": "string",
      "maxLength": 300,
      "description": "Stored as `paused_reason`. Defaults to a generic reason."
    }
  },
  "required": [
    "ref"
  ]
}
🟢unpause_tenant(ref)

Unpause 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).

输入模式

{
  "type": "object",
  "properties": {
    "ref": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The tenant id or your own `external_id`.",
      "examples": [
        "cust_123"
      ]
    }
  },
  "required": [
    "ref"
  ]
}

社区

评价此服务器

证据

最近观测

已验证未记录版本46 个工具