{
  "markdown": "# VaEmail — email infrastructure for AI agents\n\n[![Listed on mcpservers.org](https://mcpservers.org/badge.svg)](https://mcpservers.org/servers/vaemail/vaemail-mcp)\n\nMCP server and CLI for [VaEmail](https://vaemail.fr). Give an agent the ability to\nsend email, authenticate a sending domain, track delivery and diagnose\ndeliverability — without a human reading a dashboard in between.\n\nEuropean infrastructure: servers in Germany, sending through Amazon SES Europe.\n\n## Install\n\n```bash\n# Claude Code\nclaude mcp add vaemail --env VAEMAIL_API_KEY=swm_your_key -- npx -y vaemail mcp\n\n# Any MCP client\nnpx -y vaemail mcp\n```\n\nOr as a config block:\n\n```json\n{\n  \"mcpServers\": {\n    \"vaemail\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vaemail\", \"mcp\"],\n      \"env\": { \"VAEMAIL_API_KEY\": \"swm_your_key\" }\n    }\n  }\n}\n```\n\nCheck everything is wired up:\n\n```bash\nnpx vaemail init\n```\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `vaemail_capabilities` | What the service supports. No API key needed. |\n| `vaemail_send_email` | Queue a transactional email, return its id. |\n| `vaemail_validate_email` | Dry run: would this send go out, and what would block it. |\n| `vaemail_get_message` | Delivery status and every event for one message. |\n| `vaemail_list_messages` | Recent messages, filtered by status, tag or recipient. |\n| `vaemail_list_domains` | Sending domains with live SPF, DKIM and DMARC state. |\n| `vaemail_create_domain` | Declare a domain, return the DNS records to publish. |\n| `vaemail_verify_domain` | Re-read the DNS and report what is authenticated. |\n| `vaemail_dns_requirements` | The records a declared domain still needs. |\n| `vaemail_diagnose_deliverability` | Why mail is landing badly, with the actions that fix it. |\n| `vaemail_list_bounces` | Addresses excluded from sending, and why. |\n| `vaemail_get_usage` | Quota, daily cap on the key, what is left. |\n| `vaemail_get_audit_log` | What this key has done, to report it accurately. |\n\n## What this is built to prevent\n\nAn agent fails differently from a person. It retries, it does not read a\ndashboard, and it reports success from a 200. The API is shaped around that:\n\n- **A send is accepted, not delivered.** `vaemail_send_email` returns 202 and an\n  id. Only `vaemail_get_message` says what became of it. The tool descriptions\n  say so, so an agent does not announce a delivery it cannot know about.\n- **Retries do not duplicate.** Pass `idempotency_key` and a repeat call replays\n  the first response for 24 hours instead of sending twice.\n- **Errors say what to do.** Every failure carries a stable `code`, whether it is\n  `retryable`, and the corrective action with the endpoint that performs it.\n- **Keys are bounded.** Scopes, a daily send cap, a cap on recipients per email\n  and an allow-list of sender domains. An agent cannot spend more than the key\n  allows.\n- **Every call is logged.** Which key, which operation, which parameters, which\n  result — message bodies excluded. Autonomous, but accountable.\n- **Human steps are named as such.** Publishing DNS records is one. A record\n  whose value still contains a placeholder is flagged `publishable: false`,\n  because publishing it would break the domain's authentication.\n\n## CLI\n\n```bash\nvaemail init                          # check config, print the MCP snippet\nvaemail capabilities                  # what the service can do (no key needed)\nvaemail send --to a@b.fr --subject Hi --html '<p>Hello</p>'\nvaemail status 42                     # delivery status of a message\nvaemail domains:add exemple.fr        # declare a domain, print DNS records\nvaemail doctor                        # why is my email not arriving?\nvaemail usage                         # quota and remaining allowance\nvaemail mcp                           # run the MCP server on stdio\n```\n\nAdd `--json` to any command for machine-readable output.\n\n## Use it as a library\n\nThe same client the MCP server and the CLI run on is exported, so an application\ncan call VaEmail directly. No dependencies.\n\n```js\nimport { VaEmail } from 'vaemail';\n\nconst client = new VaEmail({ apiKey: process.env.VAEMAIL_API_KEY });\n\nawait client.send(\n  {\n    to: 'customer@example.com',\n    subject: 'Your order is on its way',\n    html: '<p>Tracking number: 1Z999</p>',\n  },\n  'order-4711', // idempotency key: safe to replay for 24 hours\n);\n```\n\nErrors carry what to do next, not just a status code:\n\n```js\ntry {\n  await client.send({ to: 'customer@example.com' });\n} catch (error) {\n  error.code;        // DOMAIN_NOT_VERIFIED\n  error.retryable;   // false\n  error.pourAgent(); // reason, corrective action, whether to retry\n}\n```\n\nAlso: `capabilities()`, `health()`, `validate()`, `getMessage()`,\n`listMessages()`, `listDomains()`, `addDomain()`, `verifyDomain()`,\n`dnsRecords()`, `diagnoseDeliverability()`, `listSuppressions()`, `usage()`,\n`auditLogs()`.\n\nA Python SDK with the same surface is available: `pip install vaemail`\n(<https://github.com/vaemail/vaemail-python>).\n\n## Environment\n\n| Variable | Meaning |\n| --- | --- |\n| `VAEMAIL_API_KEY` | Account API key. Created from the dashboard, under « Clés API ». |\n| `VAEMAIL_BASE_URL` | API base URL. Defaults to `https://app.vaemail.fr`. |\n\n## Also available\n\n- OpenAPI specification: <https://app.vaemail.fr/openapi.json>\n- Capabilities endpoint: <https://app.vaemail.fr/api/v1/capabilities>\n- Agent documentation: <https://vaemail.fr/agents>\n\n## Skill and examples\n\n- Agent skill (rules an agent should follow before its first call): `npx skills add vaemail/skills`, source https://github.com/vaemail/skills\n- Examples for curl, Node, Python, Claude Code, Codex, OpenAI Agents, LangChain, CrewAI and n8n: https://github.com/vaemail/examples\n- Registry entry: `io.github.vaemail/vaemail` (see `server.json`)\n\n## Dependencies\n\nNone. Node 18+ for the built-in `fetch`, and nothing else — a package an agent\ninstalls on its own should not pull a dependency tree behind it.\n\n## License\n\nMIT\n",
  "bytes": 5943,
  "sha": "f12bfbb65fc35683becda5f8cbf9ab164b935adc769b361edd03e1bad750e935",
  "repo_slug": "vaemail/vaemail-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_vaemail_vaemail_235cd78d/readme"
}