VaEmail — email infrastructure for AI agents
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
MCP server and CLI for VaEmail. Give an agent the ability to
send email, authenticate a sending domain, track delivery and diagnose
deliverability — without a human reading a dashboard in between.
European infrastructure: servers in Germany, sending through Amazon SES Europe.
Install
Or as a config block:
Check everything is wired up:
Tools
| Tool | What it does |
| --- | --- |
| vaemail_envoyer_newsletter | Newsletter to a contact list, in French: resolves the list by name, creates, tests, schedules or sends. No "quand" = draft. |
| vaemail_ou_en_est_ma_campagne | Where a campaign stands, in plain sentences: scheduled, sending, sent, opens, clicks. |
| vaemail_qui_est_abonne | Lists by folder with subscriber counts, or the lists and status of one address. |
| vaemail_importer_contacts | Adds contacts to a list (created if missing). Never re-subscribes an unsubscribed address. |
| vaemail_capabilities | What the service supports. No API key needed. |
| vaemail_send_email | Queue a transactional email, return its id. |
| vaemail_validate_email | Dry run: would this send go out, and what would block it. |
| vaemail_get_message | Delivery status and every event for one message. |
| vaemail_list_messages | Recent messages, filtered by status, tag or recipient. |
| vaemail_list_domains | Sending domains with live SPF, DKIM and DMARC state. |
| vaemail_create_domain | Declare a domain, return the DNS records to publish. |
| vaemail_verify_domain | Re-read the DNS and report what is authenticated. |
| vaemail_dns_requirements | The records a declared domain still needs. |
| vaemail_diagnose_deliverability | Why mail is landing badly, with the actions that fix it. |
| vaemail_list_bounces | Addresses excluded from sending, and why. |
| vaemail_get_usage | Quota, daily cap on the key, what is left. |
| vaemail_get_audit_log | What this key has done, to report it accurately. |
What this is built to prevent
An agent fails differently from a person. It retries, it does not read a
dashboard, and it reports success from a 200. The API is shaped around that:
- **A send is accepted, not delivered.** vaemail_send_email returns 202 and an
id. Only vaemail_get_message says what became of it. The tool descriptions
say so, so an agent does not announce a delivery it cannot know about.
- **Retries do not duplicate.** Pass idempotency_key and a repeat call replays
the first response for 24 hours instead of sending twice.
- **Errors say what to do.** Every failure carries a stable code, whether it is
retryable, and the corrective action with the endpoint that performs it.
- **Keys are bounded.** Scopes, a daily send cap, a cap on recipients per email
and an allow-list of sender domains. An agent cannot spend more than the key
allows.
- **Every call is logged.** Which key, which operation, which parameters, which
result — message bodies excluded. Autonomous, but accountable.
- **Human steps are named as such.** Publishing DNS records is one. A record