面向 AI 智能体
SendHQ MCP 服务器
让 AI 智能体完整、安全地掌控一个 SendHQ 工作区:通过 59 个严格类型化的工具收发邮件、验证域名、发布模板并排查送达率问题。本文首先为智能体而写,也欢迎人类阅读。
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp这个服务器是什么
SendHQ MCP 服务器让 AI 智能体通过 Model Context Protocol 操作一个 SendHQ 工作区:发送邮件(单封、批量、基于模板、回复、附件、幂等重试),读取和搜索已发送及已收到的邮件(主题、正文和附件名称)及其投递事件,使用自动归档规则将邮件整理到标签中,管理草稿和私有附件,编写并发布托管模板,添加并验证域名及其 DNS,配置入站收信和入站地址,查看送达率、退信、投诉和抑制记录,以及读取账户用量、计费状态、分析数据和 API 密钥元数据。
它是一个内置在 sendhq CLI 二进制文件中的本地 stdio 服务器。您的 MCP 客户端会以子进程方式启动 sendhq mcp,并通过 stdin/stdout 使用 JSON-RPC 通信。每一次工具调用都会变成一个对 https://sendhq.cc/api/v1 上 SendHQ REST API 的有文档记录的请求,并使用您的工作区 API 密钥进行身份验证,因此 MCP 服务器拥有的权限与该密钥完全一致,不多也不少。
- 59 个工具,分为 8 组,均由同一份目录生成,该目录也以 tools.json 的形式公开发布。
- 严格的 JSON Schema:未知参数、类型错误和缺少必填字段都会在本地被拒绝,不会有任何请求到达 SendHQ。
- 结构化错误,包含稳定的
code、HTTPstatus、explanation(说明)、具体的remedy(补救措施),以及重试是否有帮助。 - 每个会发送真实邮件或销毁数据的工具,都会在其描述的开头明确说明,并带有 MCP 安全注解。
--read-only模式会隐藏所有发送类和修改类工具。- 不记录任何日志。stdout 只传输协议消息;API 密钥和邮件内容永远不会进入日志。
https://sendhq.cc/api/mcp 托管了一个小型只读文档 MCP 端点(用于查询价格和文档,不能访问账户)。本页介绍的是完整的、限定在账户范围内的服务器;它可以在本地运行,也可以作为下文的托管连接器使用。在 Claude 和 ChatGPT 中使用 SendHQ
无需安装:SendHQ 还在 https://mcp.sendhq.cc/mcp 以托管连接器的形式运行此服务器,工具完全相同。您只需使用 SendHQ 账户登录,无需粘贴密钥。
Claude
- 打开 Settings → Connectors,在目录中找到 SendHQ;或选择 Add custom connector 并粘贴
https://mcp.sendhq.cc/mcp。 - 点击 Connect,登录 SendHQ,查看授权范围后点击 Allow。
- 让 Claude 查看您的收件箱、从您的已验证域名发送邮件,或解释某次退信的原因。
ChatGPT
- Open Settings → Security and login and turn on Developer mode.
- Go to chatgpt.com/plugins, click Create MCP app, name it SendHQ and enter
https://mcp.sendhq.cc/mcp. - Sign in to SendHQ and click Allow, then pick SendHQ from the tools menu in a new chat.
Muse by Meta
In Muse, open Connectors and search for SendHQ. Click Connect, sign in to SendHQ and click Allow.
审批与断开连接
- The
request_featuretool sends a feature request to the SendHQ team with your account details, so we can follow up by email. - 会发送真实邮件或删除数据的工具都有明确标注。助手是否先征求您的同意,需要在助手中按工具分别设置:在 Claude 中,前往 Settings → Connectors → SendHQ,为这些工具选择 Needs approval。
- 连接器会获得一个独立的 API 密钥,并以助手命名(例如“Claude (AI connector)”)。在 API Keys 中删除该密钥即可立即断开连接。
- 它不能创建或吊销 API 密钥,也不能更改计费设置。附件以 base64 形式发送和返回;它无法访问本地文件。
- 未付费的工作区(集成试用)只能投递到账户邮箱或 AWS SES 模拟器地址。
如有疑问:postmaster@sendhq.cc。隐私政策:sendhq.cc/privacy。
安装
安装 sendhq 二进制文件(支持 x86-64 和 arm64 上的 Linux、macOS 和 Windows)。安装程序会校验发布版本的校验和,并默认将二进制文件放到 ~/.local/bin。
curl -fsSL https://downloads.sendhq.cc/install.sh | shirm https://downloads.sendhq.cc/install.ps1 | iexsendhq version
SENDHQ_API_KEY=re_your_key sendhq doctor在控制台的 https://sendhq.cc/app#/keys 创建 API 密钥。MCP 服务器无法创建密钥。运行服务器只需要这一条命令:
SENDHQ_API_KEY=re_your_key sendhq mcp通常您不需要手动运行它:MCP 客户端会负责启动。在终端中运行时,它会等待 stdin 上的 JSON-RPC 输入。
配置您的客户端
Claude Code
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp
# read-only variant
claude mcp add sendhq-readonly --env SENDHQ_API_KEY=re_your_key -- sendhq mcp --read-only添加 --scope user 可使其在所有项目中可用,添加 --scope project 则会将其写入项目的 .mcp.json。对于共享的 .mcp.json,请从环境变量中引用密钥,而不是将其提交到代码库;Claude Code 会展开 .mcp.json 中的 ${VAR}。
{
"mcpServers": {
"sendhq": {
"command": "sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "${SENDHQ_API_KEY}"
}
}
}
}OpenAI Codex
[mcp_servers.sendhq]
command = "sendhq"
args = ["mcp"]
env = { SENDHQ_API_KEY = "re_your_key" }也可以通过命令行添加:codex mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp。
Claude Desktop
编辑 claude_desktop_config.json(macOS:~/Library/Application Support/Claude/,Windows:%APPDATA%\Claude\),然后重启应用。桌面应用不会继承 shell 的 PATH,因此请使用二进制文件的绝对路径(which sendhq)。
{
"mcpServers": {
"sendhq": {
"command": "/Users/you/.local/bin/sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "re_your_key"
}
}
}
}其他任何 MCP 客户端
将 stdio 服务器配置为:命令 sendhq,参数 ["mcp"](可选加上 "--read-only"),并设置下面的环境变量。该服务器支持 MCP 协议版本 2024-11-05、2025-03-26、2025-06-18 和 2025-11-25,并实现了 initialize、ping、tools/list 和 tools/call。工具结果同时包含一个 JSON 文本块和 structuredContent。
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_service_health","arguments":{}}}限定在账户范围内的服务器没有托管的 HTTP 传输方式。一个远程、可写的 MCP 端点需要按用户进行 OAuth 授权,而 SendHQ 并不提供;本地二进制文件则让密钥始终留在本就持有它的机器上。
环境变量与命令行参数
| 变量或参数 | 必填 | 含义 |
|---|---|---|
SENDHQ_API_KEY | 是 | 工作区 API 密钥(re_…)。除 get_service_health 外的每个工具都需要它。没有它,服务器仍会启动,但每次调用都会返回一个结构化的 auth_error,说明如何修复。 |
SENDHQ_API_BASE_URL | 否 | API base URL。默认值为 https://sendhq.cc/api/v1。仅在本地或预发布部署中使用。SENDHQ_BASE_URL 作为旧的别名仍被接受。 |
SENDHQ_MCP_READ_ONLY | 否 | 1、true 或 yes 的效果与 --read-only 相同。 |
--read-only | 否 | 只暴露既不发送邮件也不改变状态的工具。被隐藏的工具即使按名称调用也会被拒绝。 |
SENDHQ_PROFILE / --profile | 否 | 使用 sendhq auth login 存储在操作系统密钥环中的密钥,而不是 SENDHQ_API_KEY。两者同时存在时,以环境变量为准。 |
密钥只会作为 Authorization: Bearer 请求头发送到配置的 base URL。它永远不会被打印、记录到日志、在错误中回显,或包含在工具结果中。
面向智能体的安全模型
- 发送真实邮件。
send_email、send_batch和send_template_test会把邮件投递给真实的人,并消耗投递额度。它们的描述以SENDS REAL EMAIL开头。只有在用户明确要求发送这封特定邮件,并且收件人、发件人和内容都已确认时,才能调用它们。 - 破坏性操作。
delete_email、delete_draft、delete_attachment、delete_domain、delete_inbox和remove_suppression被标记为destructiveHint: true,其描述以DESTRUCTIVE开头。请先与用户确认。remove_suppression会削弱一道安全拦截,只有在人工确认该地址已恢复正常时才适用。 - 改变状态。创建或更新草稿、模板、域名和收件箱,发布模板,以及发起验证,都会改变工作区状态,但不会发送邮件。
- 只读。其余所有工具都是
readOnlyHint: true,可以放心随意调用。 - 此服务器从不修改 DNS。
add_domain返回需要由人工发布的记录;get_domain_connect_link返回一个授权 URL,必须由人打开并在其 DNS 服务商处批准。 - 此服务器从不修改计费设置。
get_account只读取套餐、用量和订阅状态。 - 未付费的工作区(集成试用)只能投递到账户所有者的邮箱(
get_account→user.email)或 AWS SES 模拟器地址(例如success@simulator.amazonses.com),并且不能发送附件。 - 已受理不等于已送达。发送成功会返回一个 ID;投递、退信和投诉的证据会稍后出现在
list_email_events中。切勿声称邮件已进入收件箱或某人已阅读了邮件。 - 不要为了绕过
423暂停而换用其他 From 地址,也绝不要重新添加已退订或已投诉的收件人。
API 密钥不在范围之内
按照设计,没有任何工具可以创建、修改、轮换、吊销或删除 API 密钥。智能体不得生成或销毁凭据。list_api_keys 只返回名称、非机密的前缀和最近使用时间。密钥管理始终留在控制台中,由已登录的人来完成。
工作流
1. 首次发送
get_service_health确认 API 可以访问(无需密钥即可使用)。get_account显示套餐(access.tier)、剩余配额和user.email。在试用期内,该邮箱是唯一允许的真实收件人。list_sending_identities列出您可以使用的 From 地址。如果列表为空,请先完成域名工作流。- 与用户确认发件人、收件人、主题和正文,然后带上
idempotency_key调用send_email。 - 一旦服务商上报结果(通常在几秒到几分钟内),使用返回的
id调用list_email_events,即可看到delivery、bounce、complaint或reject。
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "SendHQ is connected",
"text": "It works.",
"idempotency_key": "first-send-2026-09-26"
}
}2. 端到端的域名验证
- 使用
name: "example.com"调用add_domain。结果中包含 DNS 记录(DKIM CNAME、SES 验证、SPF、推荐的 DMARC)。 - 使用
domain_id调用get_dns_provider,会检测权威 DNS 服务商,并返回在该服务商处每条记录应填写的准确相对主机名。 - 如果
providers.domainConnect.available为 true,get_domain_connect_link会返回一个授权 URL。将它交给人工处理;在对方于服务商处批准之前,什么都不会改变。否则,请把需要发布的记录交给人工。切勿发布第二条 SPF 记录:请将include:amazonses.com合并到现有的v=spf1值中。 verify_domain会重新检查 DNS 和 SES。状态会依次经过pending、checking和propagating,最终变为verified。请每 30–60 秒轮询一次verify_domain或get_domain;DNS 生效可能需要几分钟到几小时。- 当
status为verified时,该域名的地址会出现在list_sending_identities中。
3. 退信、投诉和抑制记录
list_blocked_recipients返回每个被拦截的地址及其原因(bounce、complaint、unsubscribe),以及汇总计数。list_suppressions返回硬退信和投诉类抑制记录;deliverability_stats提供 30 天的投递率、退信率和投诉率;list_sender_reputation显示哪些 From 地址被限流或暂停。- 包含被抑制收件人的发送会以
422 recipient_suppressed失败。请移除该收件人后重新发送。 - 只有在人工确认某个退信邮箱已恢复正常时,才调用
remove_suppression。投诉类抑制是永久性的(409 complaint_suppression_locked)。
4. 接收入站邮件
- 该域名(通常是子域名,例如
inbound.example.com)必须已通过验证。 setup_inbound会开通收信功能,并返回一条 MX 记录,由人工发布。- 反复调用
verify_inbound,直到status变为ready。 - 使用
domain_id和local_part(例如support)调用create_inbox,即可创建support@inbound.example.com。 - 使用
direction: "in"和unread: true(可选加上inbox_id)轮询list_emails。使用get_email读取邮件,使用get_thread读取其会话,使用download_attachment下载附件,并使用mark_email(read: true)将其标记为已处理。 - 使用
send_email并带上reply_to_email_id在会话中回复;SendHQ 会设置 In-Reply-To、References 和会话。
5. Webhook 与事件通知
SendHQ 目前不提供可由客户配置的 Webhook,因此没有 Webhook 工具。服务商通知在 SendHQ 内部处理,并通过读取接口对外提供。请改用轮询:用 list_email_events 查看单封邮件的结果;用带 status(例如 bounced)或 after 的 list_emails 查看最近的变化;用带 direction: "in" 和 unread: true 的 list_emails 查看新的入站邮件;用 list_blocked_recipients 查看新的抑制记录。针对每个问题,轮询频率不要超过大约每分钟一次。
6. 诊断投递失败
- 找到这封邮件:使用
direction: "out"加上to或query调用list_emails;如果您有 ID,则调用get_email。status: failed表示 SendHQ 或服务商在提交时拒绝了它;邮件的错误信息会说明原因。 list_email_events:bounce(永久性或暂时性,附带服务商的诊断信息)、complaint、reject或delivery。如果还没有任何事件,说明服务商尚未上报;请稍后再查。- 如果发送调用本身失败了,请查看错误的
code:sender_domain_unverified→ 完成域名验证;recipient_suppressed→ 该地址之前发生过硬退信或投诉;sender_paused→ 查看list_sender_reputation并修正收件人列表的来源;trial_recipient_restricted→ 试用限制;quota_exhausted→ 查看get_account中的用量。 get_domain检查 DKIM、SPF 和 DMARC 是否仍然已发布;deliverability_stats显示问题只出在单封邮件上,还是一种趋势。- 如实报告证据所显示的内容。
delivery事件表示收件人的服务器接受了邮件,并不表示邮件进入了收件箱或已被阅读。
7. 拥有自己的任务分类(标签)
- 使用
name(例如Agent/Orders)和skip_inbox: true调用create_label。这样该标签就成为一个分类:收到的邮件一旦获得该标签就会被归档,因此只会出现在该标签中,永远不会出现在人类用户的收件箱里。 - 使用
send_email(或send_batch)并带上labels: ["Agent/Orders"]发送任务邮件。该会话的回复会自动继承该标签,并跳过收件箱。 - 对于并非起始于您的会话的邮件,请添加归档规则:使用
inbox_id(一个专用地址,例如orders@…)、from、to或subject调用create_label_rule。传入apply_to_existing: true可同时归档已收到的邮件。 - 处理分类中的邮件:使用
label: "Agent/Orders"、direction: "in"和unread: true调用list_emails;使用get_email或get_thread读取,使用send_email并带上reply_to_email_id回复,处理完毕后调用mark_email并设置read: true。 - 使用
label_email(add/remove)将放错位置的邮件移入或移出。为收到的邮件添加分类标签时,也会将其归档。 - 此外,还可以使用
set_inbox_forwarding将某个收件地址收到的所有邮件抄送一份到另一个邮箱(目标邮箱需要先通过邮件确认)。
{
"name": "send_email",
"arguments": {
"from": "Orders <orders@example.com>",
"to": [
"customer@example.net"
],
"subject": "Order 1042: confirm delivery window",
"text": "Reply with a time that works.",
"labels": [
"Agent/Orders"
],
"idempotency_key": "order-1042-window"
}
}8. 附件与模板
在付费套餐下,可通过 send_email 的 attachments 最多附加 10 个文件(每个文件需要提供 content_base64 或本地 file_path;filename 默认为文件的基本名称)。托管模板的流程为:create_template → update_template_draft → render_template(使用示例数据预览)→ send_template_test(发送一封真实的测试邮件)→ publish_template,然后使用 send_email 或 send_batch,通过 template: {key, data} 并指定恰好一个 to 收件人进行发送。
结果、分页与错误
调用成功时,会将 API 的 JSON 对象同时作为 structuredContent 和 JSON 文本块返回。每个 list_* 工具都接受 limit(1–200,默认 50)和 offset,并附加一个 pagination 对象。只要 has_more 为 true,就继续使用 offset: pagination.next_offset 调用。
{
"data": [
"…"
],
"count": 50,
"pagination": {
"offset": 0,
"limit": 50,
"returned": 50,
"total": 180,
"has_more": true,
"next_offset": 50
}
}调用失败时,会返回 isError: true 以及一个结构化错误。请按照 remedy 处理,不要盲目重试;只有当 retryable 为 true 时才重试。
{
"error": {
"code": "trial_recipient_restricted",
"status": 402,
"message": "The integration trial can deliver only to your account email or an AWS SES simulator address",
"retryable": false,
"explanation": "This workspace is on the unpaid integration trial. Trial sends can be delivered only to the account owner's email address or an AWS SES simulator address.",
"remedy": "Send to the account email (get_account -> user.email) or a simulator address such as success@simulator.amazonses.com to test. To email anyone else, the account owner must activate a paid plan in the dashboard (Profile & Billing). Do not retry the same recipients."
}
}可选的错误字段:request_id(联系支持时请提供)、retry_after_seconds、problems(invalid_arguments 对应的 schema 违规列表)以及 idempotent_replayed(参见“幂等”)。
幂等
send_email 和 send_batch 接受 idempotency_key(最多 200 个字符),并以 Idempotency-Key 请求头发送。请为每封逻辑邮件生成一个稳定的 key,例如 invoice-4812-receipt。
- 重试时必须使用相同的 key,并且请求体完全相同。同一个 key 下出现任何变化(收件人、主题、正文、邮件头、模板数据,甚至参数值)都会返回
409 idempotency_conflict。 - 相同的 key、相同的请求体,且原请求已完成:SendHQ 会返回已存储的结果,而不会再次发送。这就是在超时或
network_error之后安全重试的方法。 - 原请求仍在处理中时使用相同的 key:返回
409 idempotency_in_progress,稍等片刻后可重试。 - 新的逻辑邮件需要新的 key。
- 已存储的失败结果同样会被重放。如果第一次尝试失败,使用相同 key 重试会返回同样的失败,并带有
idempotent_replayed: true和retryable: false。请检查list_emails(direction: out)确认没有邮件发出,修复问题根源,然后使用一个新的 key 发送。 - 服务器从不自行重试 POST 请求。只有只读的 GET 调用会被自动重试(在网络错误、429 和 5xx 时最多尝试 3 次)。
- 带有内联
attachments的send_email不能使用idempotency_key,因为它会执行多个请求。要实现可安全重试的附件发送,请按以下流程:create_draft→upload_attachment→ 使用draft_id和idempotency_key调用send_email。
{
"name": "send_email",
"arguments": {
"from": "Acme <billing@example.com>",
"to": [
"owner@example.com"
],
"subject": "Receipt #4812",
"text": "Thanks for your payment.",
"idempotency_key": "receipt-4812"
}
}速率限制与配额
SendHQ 没有为 API 公布固定的每秒请求数上限。智能体实际会遇到的是用量限制,以 429 返回:
- 每月收件人投递数,按套餐计算。每个 To、Cc 和 Bcc 地址各计为一次投递。请对比
get_account→usage.recipientDeliveries与usage.emailQuotaMonth。 - 每个具体 From 地址的每日收件人数,由该发件人的信誉状态决定(
list_sender_reputation→dailyLimit,付费套餐默认为 2,000)。 - 集成试用:总计 100 个收件人,且只能发送到账户邮箱或 SES 模拟器地址。
- 附件:每封邮件最多 10 个文件、10 MB;付费套餐每月有 10 GB 按收件人加权计算的附件传输量。
- 单次请求:To + Cc + Bcc 最多 100 个地址;
send_batch最多 100 封邮件。 - 信誉熔断器:在滚动的 7 天窗口内,如果退信或投诉超过阈值,某个 From 地址会被限流或暂停(
423 sender_paused)。比率回落后会自动恢复。
quota_exhausted 在周期重置或套餐变更之前不可重试。rate_limited 可在 retry_after_seconds 之后重试;对于发送操作,请使用相同的 idempotency_key 和完全相同的请求体重试。
错误目录
code 是稳定的;请根据它而不是 message 进行分支处理。
| code | HTTP | 可重试? | 含义及处理方式 |
|---|---|---|---|
invalid_arguments | — | 否 | 参数未通过工具在本地的 JSON Schema 校验;没有任何请求到达 SendHQ。请修正 problems 中列出的字段。 |
auth_error | 401 | 否 | API 密钥缺失、已被吊销或不正确。请为服务器进程设置 SENDHQ_API_KEY;密钥需由人在控制台中创建。 |
trial_recipient_restricted | 402 | 否 | 集成试用只能投递到账户邮箱或 SES 模拟器地址。请发送到这些地址,或由所有者开通付费套餐。 |
payment_required | 402 | 否 | 该功能需要付费套餐(例如附件)。请不使用该功能发送,或升级套餐。 |
sender_domain_not_owned | 403 | 否 | From 域名不在此工作区中。请使用 list_sending_identities 或 add_domain。 |
sender_domain_unverified | 403 | 否 | From 域名尚未通过验证。请调用 get_domain,发布缺失的记录,然后调用 verify_domain。 |
domain_limit_reached | 403 | 否 | 已达到套餐的域名数量上限。请移除一个未使用的域名(需经批准)或升级套餐。 |
marketing_not_enabled | 403 | 否 | 此域名或套餐未启用营销类邮件。只有当邮件确实属于事务性邮件时,才可使用 transactional。 |
forbidden | 403 | 否 | 策略不允许执行该操作。请调整请求。 |
not_found | 404 | 否 | 该 ID 不在此工作区中。请列出该资源以找到正确的 ID;对于已归档的模板,请先恢复。 |
idempotency_conflict | 409 | 否 | key 被复用于不同的请求体。请原样重新发送原始请求,或为新邮件使用新的 key。 |
idempotency_in_progress | 409 | 是 | 原请求仍在处理中。请等待,然后使用相同的 key 和请求体重试。 |
revision_conflict | 409 | 否 | 模板草稿在您读取之后已被修改。请调用 get_template,合并后重新保存。 |
complaint_suppression_locked | 409 | 否 | 收件人投诉过。永远不要再给对方发邮件。 |
inbound_not_ready | 409 | 否 | 入站收信尚未就绪。请调用 setup_inbound,发布 MX 记录,然后调用 verify_inbound。 |
conflict | 409 | 否 | 资源已存在或处于错误的状态。请先读取该资源再进行调整。 |
attachments_too_large | 413 | 否 | 超过 10 个文件或 10 MB。请移除或缩小附件。 |
recipient_suppressed | 422 | 否 | 某个收件人之前发生过硬退信或投诉。请将其移除;参见 list_blocked_recipients。 |
recipient_unsubscribed | 422 | 否 | 某个收件人已退订营销邮件。请将其永久移除。 |
validation_failed | 422 | 否 | 内容被拒绝,例如模板数据违反了变量约定。请修正输入。 |
sender_paused | 423 | 否 | 此 From 地址已被 7 天退信/投诉熔断器暂停。请停止发送、修正收件人列表,并等待自动恢复。 |
quota_exhausted | 429 | 否 | 已达到每月、单个发件人每日、附件或试用限制。请检查 get_account;等待重置或升级套餐。 |
rate_limited | 429 | 是 | 请放慢速度;等待 retry_after_seconds。发送操作:使用相同的 key 和相同的请求体。 |
server_error | 5xx | 是 | SendHQ 或服务商暂时故障。请退避后重试;发送操作使用相同的 key 和请求体。如果 idempotent_replayed 为 true,请在确认没有邮件发出后使用新的 key。 |
network_error | — | 是 | 请求或响应丢失。请重试;对于发送操作,使用相同的 idempotency_key 可确保重试安全。 |
invalid_request | 400 | 否 | 请求格式错误。请阅读 message 并加以修正。 |
tool_error | — | 否 | MCP 服务器内部的本地故障(例如 file_path 无法读取)。请阅读 message。 |
工具参考
列出每个工具的安全类别、它调用的 REST 端点、参数、返回结构,以及一个 tools/call 参数对象示例。参数是精确的:服务器会拒绝任何未列出的参数。
邮件与会话:send_email、send_batch、list_emails、get_email、mark_email、delete_email、list_email_events、get_thread
标签与自动归档规则:list_labels、get_label、create_label、update_label、delete_label、create_label_rule、delete_label_rule、label_email
草稿、附件与发信身份:list_sending_identities、create_draft、list_drafts、get_draft、update_draft、delete_draft、upload_attachment、download_attachment、delete_attachment
托管模板:list_templates、create_template、get_template、update_template_draft、create_template_draft、render_template、send_template_test、publish_template、archive_template、restore_template
域名与 DNS:list_domains、get_domain、add_domain、verify_domain、delete_domain、get_dns_provider、get_domain_connect_link
入站邮件:setup_inbound、verify_inbound、list_inboxes、get_inbox、create_inbox、update_inbox、set_inbox_forwarding、delete_inbox
送达率、退信与抑制记录:deliverability_stats、list_sender_reputation、list_suppressions、remove_suppression、list_blocked_recipients
账户、用量、分析与密钥:get_account、get_analytics、list_api_keys、get_service_health
没有与此筛选条件匹配的工具。
邮件与会话
send_email发送一封邮件
SENDS REAL EMAIL(发送真实邮件)。从已验证域名发送一封邮件:原始 html/text、已发布的托管模板、在现有会话中的回复,或带附件的邮件。请传入 idempotency_key,确保重试不会重复发送;重试时必须使用相同的 key 且请求完全相同,否则 SendHQ 会返回 409。attachments 是一种便捷方式,它会创建草稿、上传每个文件,再使用该草稿发送;它不能与 idempotency_key 或 draft_id 同时使用(如需可安全重试的附件发送,请使用 create_draft + upload_attachment + 带 draft_id 的 send_email)。未付费的工作区(集成试用)只能投递到账户邮箱或 AWS SES 模拟器地址,且不能发送附件。
至少提供以下之一:html、text、template。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
from | string | 是 | 发件人,例如 Acme <hello@example.com>。该域名必须已在此工作区中通过验证(参见 list_sending_identities)。(最多 998 个字符) |
to | string[] | 是 | 收件人。每一项是一个地址,可附带显示名称。to+cc+bcc 合计最多 100 个;每个目标地址消耗一个投递额度。(1–100 项) |
cc | string[] | 否 | 抄送收件人。(0–100 项) |
bcc | string[] | 否 | 密送收件人。(0–100 项) |
subject | string | 否 | 主题行。发送模板时请省略。(最多 998 个字符) |
text | string | 否 | 纯文本正文。请提供 text、html 或 template 之一。 |
html | string | 否 | HTML 正文。SendHQ 会对其进行清理,并在省略 text 时自动生成纯文本。 |
reply_to | string | 否 | Reply-To 地址。 |
headers | object | 否 | 额外的安全自定义邮件头(值为字符串),例如 {"X-Entity-Ref-ID": "123"}。From/To/Message-ID 等路由类邮件头由 SendHQ 控制。 |
message_class | string | 否 | transactional(默认)或 marketing。营销邮件需要启用了营销功能的套餐或域名,并会添加退订处理。(取值为 transactional、marketing 之一) |
reply_to_email_id | string | 否 | 在现有会话中回复:被回复邮件的 em_… ID。SendHQ 会设置 In-Reply-To/References 和会话。 |
thread_id | string | 否 | 将邮件归入的显式会话 ID。 |
draft_id | string | 否 | 随此邮件发送某个已存储草稿(dr_…)的附件。发送成功后该草稿会被删除。 |
template | object | 否 | 发送已发布的托管模板,而不是原始 html/text。要求恰好一个 to 收件人,且不能有 cc/bcc;主题由模板提供。至少提供以下之一:id、key。 |
template.id | string | 否 | 模板 ID(tmpl_…)。请提供 id 或 key。 |
template.key | string | 否 | 模板 key,例如 account-welcome。请提供 id 或 key。 |
template.version_id | string | 否 | 可选的已发布版本 ID(tmplv_…)。默认为当前已发布的版本。 |
template.data | object | 否 | 模板类型化变量的取值。 |
labels | string[] | 否 | 用于归档此邮件的标签名称或 lbl_… ID。不存在的名称会被自动创建。会话中的回复会继承这些标签,而分类标签(skip_inbox)会让这些回复不进入收件箱。最多 10 个。(0–10 项) |
idempotency_key | string | 否 | Idempotency-Key 请求头(最多 200 个字符)。仅在重试这一完全相同的请求时复用。(最多 200 个字符) |
attachments | object[] | 否 | 要附加的文件(最多 10 个文件,总计 10 MB)。每个文件需要提供 content_base64(外加 filename)或本地 file_path。(0–10 项)至少提供以下之一:content_base64、file_path。 |
attachments[].filename | string | 否 | 向收件人显示的文件名。使用 content_base64 时必填;默认为 file_path 的基本名称。(最多 255 个字符) |
attachments[].content_type | string | 否 | MIME 类型,例如 application/pdf。默认为 application/octet-stream。 |
attachments[].content_base64 | string | 否 | 标准 base64 编码的文件内容。 |
attachments[].file_path | string | 否 | MCP 服务器进程可读取的本地文件的绝对路径。 |
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "Your export is ready",
"text": "Download it from your dashboard.",
"idempotency_key": "export-ready-42"
}
}send_batch批量发送个性化邮件
SENDS REAL EMAIL(发送真实邮件)。在一个请求中发送 1–100 封相互独立的邮件(按收件人个性化模板时请使用此工具)。每一项的结构与 send_email 相同(不含 attachments/idempotency_key)。各项分别成功或失败:HTTP 207 表示部分成功;请检查每一项的 data[i].ok 和 data[i].error。一个 idempotency_key 覆盖整个批量请求体。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
emails | object[] | 是 | 要发送的邮件。(1–100 项)至少提供以下之一:html、text、template。 |
idempotency_key | string | 否 | 整个批量请求的 Idempotency-Key(最多 200 个字符)。(最多 200 个字符) |
{
"name": "send_batch",
"arguments": {
"emails": [
{
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"template": {
"key": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}
],
"idempotency_key": "welcome-batch-2026-09-26"
}
}list_emails列出和搜索邮件
按从新到旧的顺序列出已发送(direction: out)和已收到(direction: in)的邮件,支持筛选。收到的邮件会被分类:使用 direction: in、archived: false、category: primary 读取人类用户的收件箱;使用 important: true 进行分诊;垃圾邮件默认隐藏,除非指定 category: spam 或 include_spam: true。结果分页:包含 pagination {offset, limit, returned, total?, has_more, next_offset}。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
direction | string | 否 | in 表示收到的邮件,out 表示发出的邮件。(取值为 in、out 之一) |
status | string | 否 | 状态筛选,例如 queued、sent、delivered、bounced、complained、failed。 |
domain | string | 否 | 只返回该域名的邮件,或逗号分隔的域名列表(匹配其中任意一个)。 |
inbox_id | string | 否 | 只返回该收件箱(inb_…)收到的邮件。 |
label | string | 否 | 只返回带有该标签的邮件:标签 ID lbl_… 或准确的名称,也可以是逗号分隔的列表(匹配其中任意一个)。使用 list_labels 查看文件夹。 |
archived | boolean | 否 | false = 收件箱视图(未归档的收到邮件),true = 仅已归档邮件。省略则返回所有邮件。 |
category | string | 否 | primary(真人来信)、updates(新闻通讯、群发、自动邮件)或 spam;也可以是逗号分隔的列表。除非明确请求,否则垃圾邮件会被隐藏。 |
important | boolean | 否 | true = 只返回被标记为重要的邮件(对您发起的会话的回复,以及被标记为重要的发件人的邮件)。 |
include_spam | boolean | 否 | 在结果中包含垃圾邮件(用于跨所有文件夹搜索)。 |
from | string | 否 | 发件人地址包含此值。 |
to | string | 否 | 收件人地址包含此值。 |
unread | boolean | 否 | true = 仅未读,false = 仅已读。 |
after | string | 否 | ISO-8601 时间戳;只返回在此之后创建的邮件。(date-time) |
before | string | 否 | ISO-8601 时间戳;只返回在此之前创建的邮件。(date-time) |
query | string | 否 | 对主题、正文、发件人/收件人地址和附件文件名进行全文搜索。(最多 200 个字符) |
limit | integer | 否 | 每页条数。默认为 50。(默认 50;1–200) |
offset | integer | 否 | 要跳过的记录数。请使用上一页返回的 pagination.next_offset。(默认 0;0–…) |
{
"name": "list_emails",
"arguments": {
"direction": "in",
"unread": true,
"limit": 25
}
}get_email获取一封邮件
获取一封邮件,包括邮件头、html/text 正文、状态、会话元数据和附件元数据(附件内容请用 download_attachment 下载)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
email_id | string | 是 | 邮件 ID(以 em_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "get_email",
"arguments": {
"email_id": "em_123"
}
}mark_email标记为已读、已归档、垃圾邮件或重要
更新一封邮件:read、archived、category(primary、updates、spam;仅限收到的邮件)和 important。举报垃圾邮件或标记为重要会让 SendHQ 记住该发件人,用于今后的邮件;传入 learn: false 则只更改这一封邮件。至少传入一个字段。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
email_id | string | 是 | 邮件 ID(以 em_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
read | boolean | 否 | true = 已读,false = 未读。 |
archived | boolean | 否 | true = 归档(跳过收件箱),false = 移回收件箱。 |
category | string | 否 | 将收到的邮件移至 primary、updates 或 spam。(取值为 primary、updates、spam 之一) |
important | boolean | 否 | 将邮件标记为重要或取消重要标记。 |
learn | boolean | 否 | false = 不为该发件人记住此判定(默认为 true)。 |
{
"name": "mark_email",
"arguments": {
"email_id": "em_123",
"read": true
}
}delete_email删除一封邮件
DESTRUCTIVE(破坏性操作):从 SendHQ 中永久删除一封已保留的邮件及其存储的附件。它不会撤回已经投递的邮件。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
email_id | string | 是 | 邮件 ID(以 em_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "delete_email",
"arguments": {
"email_id": "em_123"
}
}list_email_events列出某封邮件的投递事件
一封已发送邮件的服务商事件:delivery、bounce、complaint、reject、open、click。这是判断邮件是否已送达或失败原因的证据。结果分页:包含 pagination {offset, limit, returned, total?, has_more, next_offset}。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
email_id | string | 是 | 邮件 ID(以 em_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
limit | integer | 否 | 每页条数。默认为 50。(默认 50;1–200) |
offset | integer | 否 | 要跳过的记录数。请使用上一页返回的 pagination.next_offset。(默认 0;0–…) |
{
"name": "list_email_events",
"arguments": {
"email_id": "em_123"
}
}get_thread获取一个会话
按时间顺序获取会话中的每一封邮件(包括发出和收到的),每封邮件都附带附件元数据。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
thread_id | string | 是 | 会话 ID(通常是第一封邮件的 em_… ID;参见任意邮件上的 threadId)。(最多 128 个字符) |
{
"name": "get_thread",
"arguments": {
"thread_id": "em_123"
}
}标签与自动归档规则
list_labels列出标签
列出工作区的标签(文件夹),包括总数、未读数及其自动归档规则。结果分页:包含 pagination {offset, limit, returned, total?, has_more, next_offset}。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit | integer | 否 | 每页条数。默认为 50。(默认 50;1–200) |
offset | integer | 否 | 要跳过的记录数。请使用上一页返回的 pagination.next_offset。(默认 0;0–…) |
{
"name": "list_labels",
"arguments": {}
}get_label获取一个标签
获取一个标签及其计数和自动归档规则。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
label_id | string | 是 | 标签 ID(以 lbl_ 开头)或准确的标签名称。(最多 128 个字符) |
{
"name": "get_label",
"arguments": {
"label_id": "Billing"
}
}create_label创建标签
创建一个文件夹式的标签。设置 skip_inbox: true 可将其变为由智能体拥有的分类:使用 labels: [name] 发送后,回复会被归入该标签,而不会进入收件箱。可选的自动归档规则会归档新发出/收到的邮件(规则上的每个条件都必须匹配)。设置 apply_to_existing 还会归档已保留的邮件。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 标签名称,例如 Billing 或 Clients/Acme。在工作区内唯一(不区分大小写)。(最多 64 个字符) |
color | string | 否 | 十六进制颜色,例如 #1a73e8。可选。 |
skip_inbox | boolean | 否 | 分类模式:收到的邮件如果获得该标签(通过规则、作为带此标签发出的会话的回复,或手动添加),都会被归档,因此只会出现在该标签中,而不会出现在收件箱里。 |
rules | object[] | 否 | 可选的自动归档规则(最多 20 条)。每条规则至少需要 inbox_id、from、to、subject 之一。(0–20 项) |
rules[].direction | string | 否 | 只匹配 in(收到)或 out(发出)的邮件。省略则两者都匹配。(取值为 in、out 之一) |
rules[].inbox_id | string | 否 | 只匹配该收件箱(inb_…)收到的邮件。可将每个收件地址归入各自的文件夹。 |
rules[].from | string | 否 | 发件人包含此文本(不区分大小写),例如 @stripe.com。(最多 200 个字符) |
rules[].to | string | 否 | To/Cc 包含此文本(不区分大小写)。(最多 200 个字符) |
rules[].subject | string | 否 | 主题包含此文本(不区分大小写)。(最多 200 个字符) |
rules[].skip_inbox | boolean | 否 | 将匹配的收到邮件归档,使其只出现在标签文件夹中,而不出现在收件箱里。 |
apply_to_existing | boolean | 否 | 同时归档符合规则的已保留邮件。 |
{
"name": "create_label",
"arguments": {
"name": "Agent/Orders",
"skip_inbox": true,
"rules": [
{
"from": "@stripe.com"
}
]
}
}update_label重命名标签、更改颜色或设为分类
重命名标签、更改其颜色,或切换分类模式(skip_inbox)。开启分类模式时,会将标签中已有的收到邮件归档。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
label_id | string | 是 | 标签 ID(以 lbl_ 开头)或准确的标签名称。(最多 128 个字符) |
name | string | 否 | 新名称。(最多 64 个字符) |
color | string | 否 | 新的十六进制颜色。 |
skip_inbox | boolean | 否 | 分类模式:收到的邮件如果获得该标签(通过规则、作为带此标签发出的会话的回复,或手动添加),都会被归档,因此只会出现在该标签中,而不会出现在收件箱里。 |
{
"name": "update_label",
"arguments": {
"label_id": "lbl_123",
"name": "Finance/Billing"
}
}delete_label删除标签
DESTRUCTIVE(破坏性操作):删除一个标签及其规则。邮件本身会保留,只是不再带有该标签。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
label_id | string | 是 | 标签 ID(以 lbl_ 开头)或准确的标签名称。(最多 128 个字符) |
{
"name": "delete_label",
"arguments": {
"label_id": "lbl_123"
}
}create_label_rule添加自动归档规则
为标签添加一条规则,使匹配的新邮件被自动归档。您设置的每个条件都必须匹配。使用 inbox_id 可为某个收件地址分配独立的文件夹;添加 skip_inbox 可使其不进入收件箱。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
label_id | string | 是 | 标签 ID(以 lbl_ 开头)或准确的标签名称。(最多 128 个字符) |
direction | string | 否 | 只匹配 in(收到)或 out(发出)的邮件。省略则两者都匹配。(取值为 in、out 之一) |
inbox_id | string | 否 | 只匹配该收件箱(inb_…)收到的邮件。可将每个收件地址归入各自的文件夹。 |
from | string | 否 | 发件人包含此文本(不区分大小写),例如 @stripe.com。(最多 200 个字符) |
to | string | 否 | To/Cc 包含此文本(不区分大小写)。(最多 200 个字符) |
subject | string | 否 | 主题包含此文本(不区分大小写)。(最多 200 个字符) |
skip_inbox | boolean | 否 | 将匹配的收到邮件归档,使其只出现在标签文件夹中,而不出现在收件箱里。 |
apply_to_existing | boolean | 否 | 同时归档符合条件的已保留邮件。 |
{
"name": "create_label_rule",
"arguments": {
"label_id": "Billing",
"inbox_id": "inb_123",
"skip_inbox": true
}
}delete_label_rule删除自动归档规则
DESTRUCTIVE(破坏性操作):移除一条自动归档规则。已归档的邮件会保留其标签。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
label_id | string | 是 | 标签 ID(以 lbl_ 开头)或准确的标签名称。(最多 128 个字符) |
rule_id | string | 是 | 规则 ID(以 lrule_ 开头),可从 get_label 获取。(最多 128 个字符) |
{
"name": "delete_label_rule",
"arguments": {
"label_id": "lbl_123",
"rule_id": "lrule_123"
}
}label_email为邮件添加或移除标签
在文件夹之间移动邮件:按名称或 lbl_… ID 添加和/或移除标签。add 中不存在的名称会被自动创建,除非 create 为 false。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
email_id | string | 是 | 邮件 ID(以 em_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
add | string[] | 否 | 要添加的标签。(0–10 项) |
remove | string[] | 否 | 要移除的标签。(0–10 项) |
create | boolean | 否 | 自动创建 add 中不存在的标签(默认为 true)。 |
{
"name": "label_email",
"arguments": {
"email_id": "em_123",
"add": [
"Billing"
],
"remove": [
"Support"
]
}
}草稿、附件与发信身份
list_sending_identities列出已验证的发信身份
此工作区当前可用于发信的地址和域名(已验证域名、其默认 From 地址,以及处于启用状态的收件箱地址)。请在调用 send_email 之前调用它,以选择有效的 from。
无参数。
{
"name": "list_sending_identities",
"arguments": {}
}create_draft创建草稿
创建一份撰写草稿。草稿用于存放附件:先创建草稿,再调用 upload_attachment,然后使用 draft_id 调用 send_email。此操作不会发送任何内容。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
from | string | 否 | 位于已验证域名上的发件地址(起草期间可以为空)。 |
to | string[] | 否 | 收件人。(0–100 项) |
cc | string[] | 否 | 抄送收件人。(0–100 项) |
bcc | string[] | 否 | 密送收件人。(0–100 项) |
subject | string | 否 | 主题行。(最多 998 个字符) |
html | string | 否 | HTML 正文。 |
text | string | 否 | 纯文本正文。 |
reply_to_email_id | string | 否 | 此草稿所回复的邮件 ID。 |
thread_id | string | 否 | 此草稿所属的会话 ID。 |
{
"name": "create_draft",
"arguments": {
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice"
}
}list_drafts列出草稿
列出撰写草稿,按最近更新时间排序。结果分页:包含 pagination {offset, limit, returned, total?, has_more, next_offset}。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit | integer | 否 | 每页条数。默认为 50。(默认 50;1–200) |
offset | integer | 否 | 要跳过的记录数。请使用上一页返回的 pagination.next_offset。(默认 0;0–…) |
{
"name": "list_drafts",
"arguments": {}
}get_draft获取一份草稿
获取一份草稿及其附件元数据。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
draft_id | string | 是 | 草稿 ID(以 dr_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "get_draft",
"arguments": {
"draft_id": "dr_123"
}
}update_draft替换草稿内容
替换草稿的内容和收件人。这是完全替换:省略的字段会被清空,因此请先调用 get_draft 读取,并发送您想保留的每一个字段。附件不受影响。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
draft_id | string | 是 | 草稿 ID(以 dr_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
from | string | 否 | 位于已验证域名上的发件地址(起草期间可以为空)。 |
to | string[] | 否 | 收件人。(0–100 项) |
cc | string[] | 否 | 抄送收件人。(0–100 项) |
bcc | string[] | 否 | 密送收件人。(0–100 项) |
subject | string | 否 | 主题行。(最多 998 个字符) |
html | string | 否 | HTML 正文。 |
text | string | 否 | 纯文本正文。 |
reply_to_email_id | string | 否 | 此草稿所回复的邮件 ID。 |
thread_id | string | 否 | 此草稿所属的会话 ID。 |
{
"name": "update_draft",
"arguments": {
"draft_id": "dr_123",
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice (updated)",
"text": "Attached."
}
}delete_draft丢弃草稿
DESTRUCTIVE(破坏性操作):丢弃一份草稿,并永久删除其存储的附件。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
draft_id | string | 是 | 草稿 ID(以 dr_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "delete_draft",
"arguments": {
"draft_id": "dr_123"
}
}upload_attachment向草稿上传附件
向草稿上传一个文件(每封邮件最多 10 个文件,总计 10 MB)。请提供 content_base64 或本地 file_path。发送带附件的邮件时需要付费套餐。
至少提供以下之一:content_base64、file_path。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
draft_id | string | 是 | 草稿 ID(以 dr_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
filename | string | 否 | 向收件人显示的文件名。默认为 file_path 的基本名称。(最多 255 个字符) |
content_type | string | 否 | MIME 类型,例如 application/pdf。默认为 application/octet-stream。 |
content_base64 | string | 否 | 标准 base64 编码的文件内容。 |
file_path | string | 否 | MCP 服务器进程可读取的本地文件的绝对路径。 |
{
"name": "upload_attachment",
"arguments": {
"draft_id": "dr_123",
"filename": "invoice.pdf",
"content_type": "application/pdf",
"file_path": "/tmp/invoice.pdf"
}
}download_attachment下载附件
下载一个私有附件(已发送、已收到或草稿中的)。返回 base64 内容;如果设置了 save_to_path,则写入文件(除非 overwrite 为 true,否则拒绝覆盖)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
attachment_id | string | 是 | 附件 ID(以 att_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
save_to_path | string | 否 | 可选的本地绝对路径,用于写入文件,而不是返回 base64。 |
overwrite | boolean | 否 | 允许替换 save_to_path 处已存在的文件。默认为 false。 |
{
"name": "download_attachment",
"arguments": {
"attachment_id": "att_123",
"save_to_path": "/tmp/invoice.pdf"
}
}delete_attachment删除附件
DESTRUCTIVE(破坏性操作):永久删除一个已存储的附件(例如在发送前从草稿中移除某个文件)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
attachment_id | string | 是 | 附件 ID(以 att_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "delete_attachment",
"arguments": {
"attachment_id": "att_123"
}
}托管模板
list_templates列出托管模板
列出托管邮件模板及其发布状态和使用情况。结果分页:包含 pagination {offset, limit, returned, total?, has_more, next_offset}。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
lifecycle | string | 否 | active(默认)、archived 或 all。(取值为 active、archived、all 之一) |
query | string | 否 | 按名称或 key 搜索。(最多 120 个字符) |
limit | integer | 否 | 每页条数。默认为 50。(默认 50;1–200) |
offset | integer | 否 | 要跳过的记录数。请使用上一页返回的 pagination.next_offset。(默认 0;0–…) |
{
"name": "list_templates",
"arguments": {
"lifecycle": "active"
}
}create_template创建托管模板
创建一个带可编辑草稿的模板,可选择基于某个起始模板(welcome、reset、receipt 或 blank)。按 key 发送之前需要先发布。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 便于人阅读的名称。(最多 120 个字符) |
key | string | 否 | 稳定的发送 key:由小写字母、数字和连字符组成,以字母开头(2–64 个字符)。省略时根据名称生成。 |
starter | string | 否 | 起始内容。(取值为 blank、welcome、reset、receipt 之一) |
{
"name": "create_template",
"arguments": {
"name": "Account welcome",
"key": "account-welcome",
"starter": "welcome"
}
}get_template获取模板
获取模板的当前草稿(含 revision)、当前生效的已发布版本、版本历史和使用情况。接受 ID 或 key。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
template_id | string | 是 | 模板 ID(tmpl_…)或 key。(最多 128 个字符) |
{
"name": "get_template",
"arguments": {
"template_id": "account-welcome"
}
}update_template_draft保存模板草稿
使用乐观并发保存模板的可编辑草稿:传入从 get_template 获取的当前 revision(409 表示其他人先保存了;请重新读取后重试)。这是对草稿内容的完全替换:省略的字段会被清空,因此请发送您想保留的每一个字段。请使用 {{variable}} 占位符。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
template_id | string | 是 | 模板 ID 或 key。(最多 128 个字符) |
revision | integer | 是 | 从 get_template 获取的当前草稿修订号。(1–…) |
name | string | 否 | 模板名称。(最多 120 个字符) |
subject_template | string | 否 | 带占位符的主题。(最多 998 个字符) |
preheader_template | string | 否 | 预览文本。(最多 240 个字符) |
html_template | string | 否 | 带占位符的 HTML 正文。 |
text_template | string | 否 | 带占位符的纯文本正文。 |
from | string | 否 | 使用此模板发送时的默认发件人。 |
reply_to | string | 否 | 默认的 Reply-To。 |
variables | object[] | 否 | 类型化的变量约定。每一项为:{key(小写字母/下划线), label, type: text|number|url|boolean, required(默认为 true), fallback, description}。 |
variables[].key | string | 是 | |
variables[].label | string | 否 | |
variables[].type | string | 否 | (取值为 text、number、url、boolean 之一) |
variables[].required | boolean | 否 | |
variables[].fallback | any | 否 | |
variables[].description | string | 否 | |
sample_data | object | 否 | 用于预览和测试的示例值。 |
{
"name": "update_template_draft",
"arguments": {
"template_id": "account-welcome",
"revision": 3,
"name": "Account welcome",
"subject_template": "Welcome, {{first_name}}",
"text_template": "Hi {{first_name}}",
"variables": [
{
"key": "first_name",
"type": "text",
"required": true
}
],
"sample_data": {
"first_name": "Asha"
}
}
}create_template_draft基于已发布版本新建草稿
从当前已发布的版本复制出一份新的可编辑草稿(如果草稿已存在或尚未发布任何版本,则返回 409)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
template_id | string | 是 | 模板 ID 或 key。(最多 128 个字符) |
{
"name": "create_template_draft",
"arguments": {
"template_id": "account-welcome"
}
}render_template渲染模板预览
使用给定数据,为草稿、已发布版本或指定版本渲染与服务端完全一致的输出(subject、html、text)。不会发送。当数据违反变量约定时,返回 422 并附带 findings。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
template_id | string | 是 | 模板 ID 或 key。(最多 128 个字符) |
version_id | string | 否 | 可选的版本 ID;默认使用草稿,其次是已发布版本。 |
data | object | 否 | 变量值;默认使用该版本的示例数据。 |
{
"name": "render_template",
"arguments": {
"template_id": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}send_template_test发送模板测试邮件
SENDS REAL EMAIL(发送真实邮件)。将草稿(或指定版本)的快照以 [Test] 为前缀发送给指定收件人。计入用量;试用工作区只能发送到账户邮箱或 SES 模拟器地址。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
template_id | string | 是 | 模板 ID 或 key。(最多 128 个字符) |
to | string[] | 是 | 测试收件人。(1–100 项) |
from | string | 否 | 位于已验证域名上的发件人;默认为模板的 From。 |
version_id | string | 否 | 可选的版本 ID。 |
data | object | 否 | 变量值;默认使用示例数据。 |
{
"name": "send_template_test",
"arguments": {
"template_id": "account-welcome",
"to": [
"owner@example.com"
]
}
}publish_template发布模板版本
将当前草稿发布为不可变的版本,供带 template.key 的 send_email 使用。如果存在校验错误,会以 422 失败并返回检查结果;如果会破坏已在生产环境中使用的模板的现行变量约定,则返回 409。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
template_id | string | 是 | 模板 ID 或 key。(最多 128 个字符) |
{
"name": "publish_template",
"arguments": {
"template_id": "account-welcome"
}
}archive_template归档模板
停止使用此模板的新发送(历史记录会保留;可通过 restore_template 恢复)。任何使用此 key 发送的集成都会开始以 404 失败。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
template_id | string | 是 | 模板 ID 或 key。(最多 128 个字符) |
{
"name": "archive_template",
"arguments": {
"template_id": "account-welcome"
}
}restore_template恢复已归档的模板
让已归档的模板重新变为启用状态。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
template_id | string | 是 | 模板 ID 或 key。(最多 128 个字符) |
{
"name": "restore_template",
"arguments": {
"template_id": "account-welcome"
}
}域名与 DNS
list_domains列出域名
列出发信域名,包括汇总的 setup_status(verified | checking | pending)、每条记录的 DNS 状态以及入站状态。可能较慢:未验证的域名会被实时重新检查。结果分页:包含 pagination {offset, limit, returned, total?, has_more, next_offset}。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit | integer | 否 | 每页条数。默认为 50。(默认 50;1–200) |
offset | integer | 否 | 要跳过的记录数。请使用上一页返回的 pagination.next_offset。(默认 0;0–…) |
{
"name": "list_domains",
"arguments": {}
}get_domain获取域名配置详情
获取一个域名,包括需要发布的准确 DNS 记录(type、name、value)、从两个公共解析器获得的每条记录的实时状态、附带修复方法的 dns_issues,以及入站状态。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
domain_id | string | 是 | 域名 ID(以 dom_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "get_domain",
"arguments": {
"domain_id": "dom_123"
}
}add_domain添加发信域名
注册一个您控制的域名用于发信。返回所有者必须发布的 DNS 记录(SES Easy DKIM CNAME)。它本身不会修改 DNS。计入套餐的域名数量上限。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 裸域名,例如 example.com 或 mail.example.com。(最多 253 个字符) |
default_from | string | 否 | 此域名上可选的默认发件地址。 |
{
"name": "add_domain",
"arguments": {
"name": "example.com"
}
}verify_domain验证域名
立即执行一次实时的 SES/DNS 验证检查。可以安全地重复调用;修改 DNS 后请每 30–60 秒轮询一次(传播可能需要几分钟到几小时)。状态变为 verified 后即可发信。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
domain_id | string | 是 | 域名 ID(以 dom_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "verify_domain",
"arguments": {
"domain_id": "dom_123"
}
}delete_domain删除域名
DESTRUCTIVE(破坏性操作):从工作区中移除该域名,包括其入站收信路由。此后从该域名发信会立即失败。它不会删除您 DNS 服务商处的 DNS 记录。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
domain_id | string | 是 | 域名 ID(以 dom_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "delete_domain",
"arguments": {
"domain_id": "dom_123"
}
}get_dns_provider检测 DNS 服务商和记录主机名
检测该域名的权威 DNS 服务商,并返回在该服务商处每条记录应输入的相对主机名、推荐的 DMARC 记录、入站 MX 指引,以及是否支持一键配置(Domain Connect)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
domain_id | string | 是 | 域名 ID(以 dom_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "get_dns_provider",
"arguments": {
"domain_id": "dom_123"
}
}get_domain_connect_link获取一键 DNS 配置链接
当 get_dns_provider 报告 providers.domainConnect.available 时,创建一个经过签名的授权 URL。将它交给人工:对方打开链接,并在其服务商处批准 DNS 变更。在对方批准之前,什么都不会改变。如不支持,则返回 409。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
domain_id | string | 是 | 域名 ID(以 dom_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "get_domain_connect_link",
"arguments": {
"domain_id": "dom_123"
}
}入站邮件
setup_inbound为域名启用入站收信
为已验证的域名开通 SES 入站收信。如果根域名没有冲突的 MX 记录,则使用根域名,否则使用 inbound.<domain>。返回所有者必须发布的 MX 记录;它不会编辑 DNS。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
domain_id | string | 是 | 域名 ID(以 dom_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "setup_inbound",
"arguments": {
"domain_id": "dom_123"
}
}verify_inbound验证入站 MX
重新检查入站 MX 记录。当两个公共解析器都能看到该记录时,状态会变为 ready。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
domain_id | string | 是 | 域名 ID(以 dom_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "verify_inbound",
"arguments": {
"domain_id": "dom_123"
}
}list_inboxes列出入站地址
列出收件地址,可选择只列出某个域名的地址。结果分页:包含 pagination {offset, limit, returned, total?, has_more, next_offset}。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
domain_id | string | 否 | 可选的域名 ID 筛选条件。 |
limit | integer | 否 | 每页条数。默认为 50。(默认 50;1–200) |
offset | integer | 否 | 要跳过的记录数。请使用上一页返回的 pagination.next_offset。(默认 0;0–…) |
{
"name": "list_inboxes",
"arguments": {
"domain_id": "dom_123"
}
}get_inbox获取收件箱
获取一个入站地址。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
inbox_id | string | 是 | 收件箱 ID(以 inb_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "get_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}create_inbox创建入站地址
在入站状态为 ready 的域名上创建一个地址,例如 support@<receiving domain>(请先运行 setup_inbound 和 verify_inbound)。收到的邮件会出现在 list_emails 中,direction 为 in。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
domain_id | string | 是 | 域名 ID(以 dom_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
local_part | string | 是 | @ 之前的部分,例如 support。(最多 64 个字符) |
name | string | 否 | 可选的显示名称。 |
{
"name": "create_inbox",
"arguments": {
"domain_id": "dom_123",
"local_part": "support",
"name": "Support"
}
}update_inbox重命名、启用或停用收件箱
重命名收件箱,或将其状态设为 active / disabled。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
inbox_id | string | 是 | 收件箱 ID(以 inb_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
name | string | 否 | 新的显示名称。 |
status | string | 否 | 新状态。(取值为 active、disabled 之一) |
{
"name": "update_inbox",
"arguments": {
"inbox_id": "inb_123",
"status": "disabled"
}
}set_inbox_forwarding将收件箱转发到另一个地址
当转发给账户所有者以外的人时,SENDS REAL EMAIL(发送真实邮件):设置收件箱收到的邮件转发到何处。所有者自己的地址会立即生效;其他任何地址都会收到一封确认邮件,在对方确认之前,转发一直处于 pending 状态。传入 forward_to: null 可关闭转发。转发的副本从收件箱地址发出,并将原始发件人设为 Reply-To。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
inbox_id | string | 是 | 收件箱 ID(以 inb_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
forward_to | string,null | 是 | 转发目标邮件地址,或设为 null 以关闭转发。(最多 254 个字符) |
{
"name": "set_inbox_forwarding",
"arguments": {
"inbox_id": "inb_123",
"forward_to": "team@example.net"
}
}delete_inbox删除收件箱
DESTRUCTIVE(破坏性操作):删除一个入站地址。已收到的邮件会保留;发往该地址的新邮件将不再归入其中。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
inbox_id | string | 是 | 收件箱 ID(以 inb_ 开头),由列表或创建类工具返回。(最多 128 个字符) |
{
"name": "delete_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}送达率、退信与抑制记录
deliverability_stats获取 30 天投递统计
整个工作区的 30 天汇总:sent、delivery、bounce、complaint、reject、open、click 以及 deliveryRate(%)。
无参数。
{
"name": "deliverability_stats",
"arguments": {}
}list_sender_reputation列出发件人信誉
每个具体 From 地址的信誉状态:active、throttled(每日上限降低)或 paused(发送返回 423),并附带原因和每日上限。当发送以 423 或 429 失败时请检查此项。结果分页:包含 pagination {offset, limit, returned, total?, has_more, next_offset}。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit | integer | 否 | 每页条数。默认为 50。(默认 50;1–200) |
offset | integer | 否 | 要跳过的记录数。请使用上一页返回的 pagination.next_offset。(默认 0;0–…) |
{
"name": "list_sender_reputation",
"arguments": {}
}list_suppressions列出抑制记录
工作区抑制列表:在永久性退信或垃圾邮件投诉之后被拦截的收件人。向他们发送会以 422 失败。结果分页:包含 pagination {offset, limit, returned, total?, has_more, next_offset}。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit | integer | 否 | 每页条数。默认为 50。(默认 50;1–200) |
offset | integer | 否 | 要跳过的记录数。请使用上一页返回的 pagination.next_offset。(默认 0;0–…) |
{
"name": "list_suppressions",
"arguments": {}
}remove_suppression移除退信抑制记录
DESTRUCTIVE(破坏性操作,会削弱一道安全拦截):移除一条退信抑制记录,使该地址可以再次接收邮件。只有在人工确认该地址现已有效时才执行此操作。投诉类抑制记录无法移除(409)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
email | string | 是 | 被抑制的收件人地址。(最多 320 个字符) |
{
"name": "remove_suppression",
"arguments": {
"email": "fixed-mailbox@example.net"
}
}list_blocked_recipients列出被拦截的收件人
SendHQ 会拒绝发送的所有收件人:退信、投诉以及按域名范围的营销邮件退订,并按类型给出汇总。最多读取最新的 500 条。结果分页:包含 pagination {offset, limit, returned, total?, has_more, next_offset}。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit | integer | 否 | 每页条数。默认为 50。(默认 50;1–200) |
offset | integer | 否 | 要跳过的记录数。请使用上一页返回的 pagination.next_offset。(默认 0;0–…) |
{
"name": "list_blocked_recipients",
"arguments": {}
}账户、用量、分析与密钥
get_account获取账户、用量与计费信息
账户所有者邮箱、套餐/访问等级、当前周期已用的收件人投递数与配额对比、已用域名数与上限对比、附件传输量、信誉摘要、订阅状态、已公布的套餐以及工作区计数。可用于查看剩余配额,或试用期可以投递给谁(账户邮箱)。
无参数。
{
"name": "get_account",
"arguments": {}
}get_analytics获取发信分析数据
最近 7、30 或 90 天的控制台分析数据:sent/received/delivered/bounced/blocked/opened/clicked/complaint 各项总数、每日时间线、发信量最高的域名以及最常见的主题。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
days | integer | 否 | 时间窗口(天):7、30(默认)或 90。(取值为 7、30、90 之一) |
{
"name": "get_analytics",
"arguments": {
"days": 30
}
}list_api_keys列出 API 密钥元数据
列出 API 密钥的名称、非机密前缀和最近使用时间。只读:此 MCP 服务器不能创建、轮换或吊销密钥;这些操作由人在控制台中完成。结果分页:包含 pagination {offset, limit, returned, total?, has_more, next_offset}。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit | integer | 否 | 每页条数。默认为 50。(默认 50;1–200) |
offset | integer | 否 | 要跳过的记录数。请使用上一页返回的 pagination.next_offset。(默认 0;0–…) |
{
"name": "list_api_keys",
"arguments": {}
}get_service_health检查 SendHQ 服务健康状态
检查 SendHQ API 是否正常运行,以及当前启用的是哪个邮件服务商。不需要有效的 API 密钥。
无参数。
{
"name": "get_service_health",
"arguments": {}
}API 覆盖清单
公开 API 中的每一项操作,以及覆盖它的工具。用户在控制台中能做且有对应 API 的所有操作都已覆盖;下面列出的排除项是有意为之的。
| 端点 | 工具 | 备注 |
|---|---|---|
| POST /emails | send_email | 发送一封邮件 |
| POST /emails/batch | send_batch | 发送最多 100 封个性化邮件 |
| GET /emails | list_emails | 列出已发送和已收到的邮件 |
| GET /emails/:id | get_email | 获取邮件及其附件 |
| PATCH /emails/:id | mark_email | 更新已读、归档、垃圾邮件、分类或重要性状态 |
| POST /emails/:id/labels | label_email | 为邮件添加或移除标签 |
| DELETE /emails/:id | delete_email | 删除已保留的邮件 |
| GET /emails/:id/events | list_email_events | 列出某封邮件的投递事件 |
| GET /threads/:id | get_thread | 按时间顺序获取一个会话 |
| GET /labels | list_labels | 列出标签及其邮件数和归档规则 |
| POST /labels | create_label | 创建标签,可同时设置自动归档规则 |
| GET /labels/:id | get_label | 按 ID 或名称获取标签 |
| PATCH /labels/:id | update_label | 重命名标签、更改颜色或将其变为分类 |
| DELETE /labels/:id | delete_label | 删除标签,但不删除其中的邮件 |
| POST /labels/:id/rules | create_label_rule | 为标签添加自动归档规则 |
| DELETE /labels/:id/rules/:rule_id | delete_label_rule | 删除自动归档规则 |
| POST /drafts | create_draft | 创建撰写草稿 |
| GET /drafts | list_drafts | 列出撰写草稿 |
| GET /drafts/:id | get_draft | 获取草稿及其附件 |
| PUT /drafts/:id | update_draft | 替换草稿内容 |
| DELETE /drafts/:id | delete_draft | 丢弃草稿 |
| POST /drafts/:id/attachments | upload_attachment | 向草稿上传附件 |
| GET /attachments/:id | download_attachment | 下载私有附件 |
| DELETE /attachments/:id | delete_attachment | 删除私有附件 |
| GET /sending-identities | list_sending_identities | 列出已验证的发信身份 |
| GET /templates | list_templates | 列出托管模板 |
| POST /templates | create_template | 创建托管模板 |
| GET /templates/:id | get_template | 获取草稿、版本和使用情况 |
| PUT /templates/:id/draft | update_template_draft | 自动保存模板草稿 |
| POST /templates/:id/draft | create_template_draft | 基于已发布版本创建新草稿 |
| POST /templates/:id/render | render_template | 渲染与服务端完全一致的输出 |
| POST /templates/:id/test | send_template_test | 发送测试快照 |
| POST /templates/:id/publish | publish_template | 发布不可变的模板版本 |
| POST /templates/:id/archive | archive_template | 归档模板 |
| POST /templates/:id/restore | restore_template | 恢复已归档的模板 |
| POST /domains | add_domain | 添加发信域名 |
| GET /domains | list_domains | 列出域名及缓存的 DNS 状态 |
| GET /domains/:id | get_domain | 获取域名配置详情 |
| POST /domains/:id/verify | verify_domain | 刷新 SES 与 DNS 验证状态 |
| POST /domains/:id/inbound/setup | setup_inbound | 开通 SES 入站收信 |
| POST /domains/:id/inbound/verify | verify_inbound | 验证入站 MX 路由 |
| DELETE /domains/:id | delete_domain | 删除域名 |
| GET /dns/provider | get_dns_provider | 检测权威 DNS 服务商及记录的相对主机名 |
| GET /dns/domain-connect/connect | get_domain_connect_link | 创建用于一键配置 DNS 的 Domain Connect 授权链接 |
| POST /inboxes | create_inbox | 创建入站地址 |
| GET /inboxes | list_inboxes | 列出入站地址 |
| GET /inboxes/:id | get_inbox | 获取入站地址 |
| PATCH /inboxes/:id | update_inbox | 重命名、启用或停用收件箱 |
| PUT /inboxes/:id/forwarding | set_inbox_forwarding | 将收件箱收到的邮件转发到另一个地址 |
| DELETE /inboxes/:id | delete_inbox | 删除收件箱,同时保留邮件 |
| GET /deliverability/stats | deliverability_stats | 获取 30 天投递统计 |
| GET /deliverability/reputation | list_sender_reputation | 按具体发信身份列出信誉状态 |
| GET /suppressions | list_suppressions | 列出工作区的抑制记录 |
| DELETE /suppressions/:email | remove_suppression | 移除符合条件的退信抑制记录 |
| GET /blocked-recipients | list_blocked_recipients | 列出退信、投诉和退订 |
| GET /account | get_account | 使用 API 密钥获取账户、用量、计费状态和工作区数量 |
| GET /analytics | get_analytics | 获取 7 天、30 天或 90 天的控制台发信分析数据 |
| GET /profile | get_account | GET /account 的仅限会话版本;MCP 服务器读取的是 API 密钥对应的路由。 |
| POST /billing/checkout | 未开放 | 按照设计,计费变更仅限会话操作,并且需要账户所有者在控制台中完成。计费状态可通过 get_account 读取。 |
| POST /billing/cancel | 未开放 | 按照设计,计费变更仅限会话操作,并且需要账户所有者在控制台中完成。计费状态可通过 get_account 读取。 |
| POST /keys | 未开放 | 有意排除:智能体不得生成或销毁凭据。密钥由人在控制台中管理。 |
| GET /keys | list_api_keys | 列出 API 密钥元数据 |
| DELETE /keys/:id | 未开放 | 有意排除:智能体不得生成或销毁凭据。密钥由人在控制台中管理。 |
有意不提供的功能
| 功能 | 端点 | 原因 |
|---|---|---|
| 创建、轮换、吊销或删除 API 密钥 | POST /keys, DELETE /keys/:id | 有意排除:智能体不得生成或销毁凭据。密钥由人在控制台中管理。 |
| 发起结账或取消订阅 | POST /billing/checkout, POST /billing/cancel | 按照设计,计费变更仅限会话操作,并且需要账户所有者在控制台中完成。计费状态可通过 get_account 读取。 |
| Cloudflare 一键 DNS 配置(OAuth) | GET /api/dns/cloudflare/connect | 需要交互式浏览器会话和 Cloudflare OAuth 授权。请改用 get_domain 返回的记录、get_dns_provider 返回的主机名或 get_domain_connect_link。 |
| 注册、登录、退出登录、关联 Google 账户 | /api/auth/* | 面向人的浏览器身份验证;MCP 服务器使用 API 密钥进行身份验证。 |
| 联系支持表单 | POST /api/contact | 面向人的公开营销网站表单,不属于工作区操作。 |
机器可读的目录:/docs/mcp/tools.json(包含 schema、注解、端点映射和排除项)。本页的 Markdown 版本:/docs/mcp.md。安装 CLI 后,运行 sendhq commands --format json 会输出同一份目录。