email59
Send transactional email from AI agents: sign up by email code, no domain or DNS setup.
我该使用它吗
质量与安全性
发现(2)
- LOW在 get_pricing 中
- LOW在 order_status 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"email59": {
"url": "https://email59.com/v1/mcp"
}
}
}远程端点
https://email59.com/v1/mcpstreamable-http它能做什么
工具清单
工具(20)
🟡auth(email, otp, api_key)
Sign up or sign in to email59. Pass email to have a 6-digit code emailed, then call again with email and otp to get a session key (a new email is signed up with 200 free emails a day). Or pass api_key to swap an API key for a session key. Send the key as the HTTP header 'Authorization: Bearer <session_key>'.
输入模式
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Email address."
},
"otp": {
"type": "string",
"description": "The 6-digit code from the email."
},
"api_key": {
"type": "string",
"description": "An e59_live_ API key, instead of email."
}
}
}🟢get_pricing
Free daily emails (renewed every day), email credits per dollar, and the packs on sale. No sign-in needed.
输入模式
{
"type": "object",
"properties": {}
}🟢get_account
The signed-in account: email, daily_limit, sent_today, remaining_today, credits_remaining, resets_at.
输入模式
{
"type": "object",
"properties": {}
}🔴update_account(name, company, brand)
Set the name, company or brand (the look of every email the account sends) on the account.
输入模式
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"company": {
"type": "string"
},
"brand": {
"type": "object",
"description": "name (header band), color (#rrggbb), logo_url and url (https), address (footer line). An empty name clears it.",
"properties": {
"name": {
"type": "string"
},
"color": {
"type": "string"
},
"logo_url": {
"type": "string"
},
"url": {
"type": "string"
},
"address": {
"type": "string"
}
}
}
}
}🟡send_email(from, to, subject, text, html, ...)
Send one email to one recipient: transactional (receipt, code, alert) or marketing (category). It goes out as HTML in a branded template with a text part; give text, html or both. Uses 1 email of today's allowance. Many recipients at once: send_campaign.
输入模式
{
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Name before the @ (e.g. hello). The domain is always email59.com. Optional."
},
"to": {
"type": "string",
"description": "Recipient address."
},
"subject": {
"type": "string"
},
"text": {
"type": "string",
"description": "Plain-text body. Give text, html or both."
},
"html": {
"type": "string",
"description": "HTML body."
},
"reply_to": {
"type": "string",
"description": "Optional. One address of your own (not at email59.com) where answers should go. Without it the email says replies are not received."
},
"category": {
"type": "string",
"enum": [
"transactional",
"marketing"
],
"description": "Default transactional. marketing: always has the unsubscribe link and skips role addresses and people who unsubscribed."
},
"list_id": {
"type": "string",
"description": "Marketing only: your name for the audience."
},
"template": {
"type": "string",
"enum": [
"basic",
"code",
"notice",
"report",
"letter"
],
"description": "Layout. basic (default), code (one-time code, give code), notice (heading and one button), report (wide tables), letter (personal)."
},
"heading": {
"type": "string"
},
"preheader": {
"type": "string",
"description": "Preview text shown after the subject."
},
"button_text": {
"type": "string"
},
"button_url": {
"type": "string"
},
"code": {
"type": "string",
"description": "The code for template code."
},
"brand": {
"type": "object",
"description": "This email's look; the account's brand otherwise.",
"properties": {
"name": {
"type": "string"
},
"color": {
"type": "string"
},
"logo_url": {
"type": "string"
},
"url": {
"type": "string"
},
"address": {
"type": "string"
}
}
}
},
"required": [
"to",
"subject"
]
}🟡send_campaign(from, subject, html, text, list_id, ...)
Send a marketing email to up to 1,000 recipients; the unsubscribe link is added for you. Invalid, role, blocked or unsubscribed recipients are skipped and cost nothing; each accepted recipient uses 1 email of today's allowance. A campaign that doesn't fit what's left today is refused whole.
输入模式
{
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Name before the @ (e.g. hello). The domain is always email59.com. Optional."
},
"subject": {
"type": "string"
},
"html": {
"type": "string"
},
"text": {
"type": "string"
},
"list_id": {
"type": "string",
"description": "Your name for this audience, used for unsubscribes."
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Recipient addresses (max 1,000)."
}
},
"required": [
"subject",
"recipients"
]
}🟢check_email(email)
Free deep check of an email address, no sign-in needed: format, provider username rules, disposable and role addresses, and the domain's MX, SPF, DMARC, DKIM, MTA-STS, TLS-RPT and BIMI records. Returns a report with a score (0-99, likelihood the address is real) and a verdict (likely_valid, risky, likely_invalid, unknown). Gmail, Outlook and other big providers skip DNS. No email is sent.
输入模式
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Email address."
}
},
"required": [
"email"
]
}🟢check_list(emails, csv)
List check for a mailing list: up to 1,000 different addresses a call, as emails or the text of a CSV (the column headed email). One status each: valid, risky, role, disposable, no_mx or invalid, with a reason, plus counts per status. Format, provider rules and one MX lookup per domain; no email is sent. Daily limit per account; the answer's quota shows what is left today.
输入模式
{
"type": "object",
"properties": {
"emails": {
"type": "array",
"items": {
"type": "string"
},
"description": "Addresses to check."
},
"csv": {
"type": "string",
"description": "Or a CSV file's text with an email column."
}
}
}🟢validate_email(email)
Check an address before sending. Verdicts: ok, invalid, no_mx, disposable, role.
输入模式
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Email address."
}
},
"required": [
"email"
]
}⚪block(kind, value, reason)
Block an email address or a whole domain for this account. Sends to it are refused.
输入模式
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"email",
"domain"
]
},
"value": {
"type": "string",
"description": "The address or domain."
},
"reason": {
"type": "string"
}
},
"required": [
"kind",
"value"
]
}🔴unblock(kind, value)
Remove an email address or domain from the blocklist.
输入模式
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"email",
"domain"
]
},
"value": {
"type": "string"
}
},
"required": [
"kind",
"value"
]
}🟢list_blocklist
The account's blocked addresses and domains.
输入模式
{
"type": "object",
"properties": {}
}🟡add_unsubscribe(email, list_id)
Record an opt-out. Campaigns to that list (or every list, if list_id is empty) skip the address.
输入模式
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Email address."
},
"list_id": {
"type": "string",
"description": "Empty = every list."
}
},
"required": [
"email"
]
}🟢buy_pack(pack_id, agree, policy_version)
Start buying a pack (pack_5 = $5, pack_10 = $10, pack_50 = $50; each $1 adds 3,636 email credits, which don't renew and last until used, plus a purchase fee of 5% or at least $0.50 at checkout; GET /v1/pricing has the totals). Returns a checkout_url for a person to pay; the credits arrive once the payment clears. First show the person the refund policy and terms from GET /v1/policy; pass agree=true and its version only after they agree.
输入模式
{
"type": "object",
"properties": {
"pack_id": {
"type": "string"
},
"agree": {
"type": "boolean",
"description": "The person agreed to the refund policy and terms (GET /v1/policy)"
},
"policy_version": {
"type": "string",
"description": "version from GET /v1/policy"
}
},
"required": [
"pack_id",
"agree",
"policy_version"
]
}🟢order_status(order_id)
Status of an order from buy_pack: pending or paid.
输入模式
{
"type": "object",
"properties": {
"order_id": {
"type": "integer"
}
},
"required": [
"order_id"
]
}🟡create_api_key(label, mode)
Create a long-lived API key (max 10 per account). It is shown only once. mode 'test' makes an e59_test_ key for staging and CI: its sends are accepted and stored, never delivered, and use no allowance.
输入模式
{
"type": "object",
"properties": {
"label": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"live",
"test"
],
"description": "Default live."
}
}
}🟢list_test_messages(id, to, limit)
Emails sent with a test key (e59_test_...), newest first: accepted, stored, never delivered. Pass id for one email with its html and text (a verify_start code is in there), or to to filter by recipient.
输入模式
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A test email id (test_...). Optional."
},
"to": {
"type": "string",
"description": "Only emails to this address. Optional."
},
"limit": {
"type": "integer",
"description": "Default 50, at most 100."
}
}
}🟢list_api_keys
The account's API keys (ids and labels, never the keys themselves).
输入模式
{
"type": "object",
"properties": {}
}🟢verify_start(to, app_name, from, code_length, expires_in)
Email a one-time verification code to an address (sign-up, sign-in, confirming an email). email59 makes the code, sends it, limits resends and expires it; the code is never returned to you. Returns an id. Uses 1 email of today's allowance. A new code to the same address replaces the one waiting there. Then call verify_check with what the person typed.
输入模式
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "The address to verify."
},
"app_name": {
"type": "string",
"description": "Your app's name, shown in the subject and body. Optional."
},
"from": {
"type": "string",
"description": "Name before the @; the domain is always email59.com. Default verify."
},
"code_length": {
"type": "integer",
"description": "Digits in the code, 4 to 10. Default 6."
},
"expires_in": {
"type": "integer",
"description": "Seconds the code works, 60 to 3600. Default 600."
}
},
"required": [
"to"
]
}🟢verify_check(to, id, code)
Check a code from verify_start. Give to (checks the newest code sent there) or id, and code. Returns valid true or false and a status: approved, wrong_code, expired, too_many_attempts (5 wrong codes lock it), already_used, replaced or not_found. A right code works once. Uses no allowance.
输入模式
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "The address the code was sent to."
},
"id": {
"type": "string",
"description": "Or the id from verify_start."
},
"code": {
"type": "string",
"description": "The code the person typed."
}
},
"required": [
"code"
]
}社区
证据