email59

Send transactional email from AI agents: sign up by email code, no domain or DNS setup.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
94%
Integridad del esquema
79%
Calidad de los nombres
96%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (2)

  • LOWTool 'get_pricing' description lacks action verben get_pricing
  • LOWTool 'order_status' description lacks action verben order_status

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~3,132Tokens (definiciones de herramientas)
~793 BTamaño de respuesta típico
Impacto significativo en la atención (2.45% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "email59": {
      "url": "https://email59.com/v1/mcp"
    }
  }
}

Puntos de conexión remotos

https://email59.com/v1/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (20)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟡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>'.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
🟢get_account

The signed-in account: email, daily_limit, sent_today, remaining_today, credits_remaining, resets_at.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "email",
        "domain"
      ]
    },
    "value": {
      "type": "string"
    }
  },
  "required": [
    "kind",
    "value"
  ]
}
🟢list_blocklist

The account's blocked addresses and domains.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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).

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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"
  ]
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada20 herramientas