Assistant Mail MCP
Agent email with allowlist and consent via AssistantMail.
Open source Open in the app JSON README (API)
About
Agent email with allowlist and consent via AssistantMail.
Details
- Kind
- MCP servers
- Topic
- Communication
- Publisher
- assistantmail
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 1.3.1
- Last push
- 2026-09-04T13:38:05Z
- Repository state
- ativo
- Language
- JavaScript
- License
- MIT
- Added
- 2026-09-03 01:00:19
- Updated
- 2026-09-03 01:00:19
- Origin id
io.github.AssistantMail/assistantmail-mcp
README
# assistantmail-mcp
MCP server for [AssistantMail](https://assistant-mail.ai) — give AI agents a managed mailbox to send and receive email.
Built for personal and small-team OpenClaw / Hermes operators who want agent email with allowlist, consent, retention, and spend caps you control. Listed on ClawHub for easy install — not an official OpenClaw endorsement.
[Get Free](https://app.assistant-mail.ai/?utm_source=github&utm_medium=readme&utm_campaign=clawhub_readme_amplify) · [Docs](https://assistant-mail.ai/docs) · [Website](https://assistant-mail.ai) · [Privacy](https://assistant-mail.ai/privacy.html) · [Terms](https://assistant-mail.ai/terms.html) · [Contributing](./CONTRIBUTING.md)
## OpenClaw / ClawHub
```bash
openclaw skills install @assistantmail/assistant-mail
```
Then configure your MCP client to run this server and set `ASSISTANT_MAIL_API_KEY` (Claude Desktop and Cursor examples below). Skill: [assistant-mail on ClawHub](https://clawhub.ai/assistantmail/skills/assistant-mail). Same MCP works with Hermes.
## Installation
```bash
npx -y @assistantmail/assistantmail-mcp
```
Node 24+.
### Claude Desktop
```json
{
"mcpServers": {
"assistantmail": {
"command": "npx",
"args": ["-y", "@assistantmail/assistantmail-mcp"],
"env": {
"ASSISTANT_MAIL_API_KEY": "amk_..."
}
}
}
}
```
### Cursor / VS Code (`.cursor/mcp.json` or `.vscode/mcp.json`)
```json
{
"servers": {
"assistantmail": {
"command": "npx",
"args": ["-y", "@assistantmail/assistantmail-mcp"],
"env": {
"ASSISTANT_MAIL_API_KEY": "amk_..."
}
}
}
}
```
## Prerequisites
1. Create a free account via the [Get Free](https://app.assistant-mail.ai/?utm_source=github&utm_medium=readme&utm_campaign=clawhub_readme_amplify) link above (1 agent, 25/day; current limits: [Docs](https://assistant-mail.ai/docs)).
2. Go to **API Keys** and create a key (`amk_...`). Copy it immediately — it is only shown once.
3. Set `ASSISTANT_MAIL_API_KEY`; call `assistantmail_list_mailboxes` to get your `mailboxId` UUID. Mail API routes use that UUID, not an email address.
Paid plans: upgrade in-app only (not Payment Links). Use **Upgrade** in the AssistantMail app — checkout is not sold via Stripe Payment Links. Docs: [assistant-mail.ai/docs](https://assistant-mail.ai/docs)
## Official MCP Registry
The listing is **live** as [`io.github.AssistantMail/assistantmail-mcp`](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.AssistantMail/assistantmail-mcp) on the Official MCP Registry. Product docs: [assistant-mail.ai/docs](https://assistant-mail.ai/docs).
Packaging lives in [`server.json`](./server.json). After a version bump, republish with `mcp-publisher` — see [docs/MCP_REGISTRY.md](./docs/MCP_REGISTRY.md).
## Environment variables
| Variable | Default | Description |
|---|---|---|
| `ASSISTANT_MAIL_API_KEY` | _(none)_ | API key (`amk_...`). Can be omitted if passed per-tool. |
| `ASSISTANT_MAIL_API_BASE_URL` | `https://api.assistant-mail.ai` | The public API for the AssistantMail service |
## Tools
### Diagnostics
| Tool | Description |
|---|---|
| `assistantmail_health` | Check that the MCP server is running and confirm the API base URL. No API key required. |
### Account
| Tool | Description |
|---|---|
| `assistantmail_get_me` | Get account profile and plan tier. |
| `assistantmail_get_inbound_policy` | Get the current inbound email policy (who can send to this account's mailboxes). |
| `assistantmail_update_inbound_policy` | Update the inbound policy (if allowed by selected account tier). Accepted values: `owner`, `list`, `sent`. Use `allowedSenders` with `list`. |
### Mailboxes
| Tool | Description |
|---|---|
| `assistantmail_list_mailboxes` | List all mailboxes on the account. Returns `mailboxId` needed for message operations. |
| `assistantmail_create_mailbox` | Create a new mailbox (if allowed by selected account tier), optionally specifying `displayName` and `address`. |
| `assistantmail_get_mailbox` | Get metadata for a single mailbox by `mailboxId`. |
| `assistantmail_update_mailbox` | Update a mailbox's display name. |
| `assistantmail_delete_mailbox` | Permanently delete a mailbox and all its messages. THIS ACTION HAS NO CONFIRMATION. USE CAREFULLY. |
### Messages
| Tool | Description |
|---|---|
| `assistantmail_list_messages` | List inbound and outbound messages for a mailbox. Supports `since` (ISO timestamp) and `limit` (max 100). |
| `assistantmail_get_message` | Fetch a single message including `textBody` and `htmlBody`. Bodies are only returned within the plan's retention window; `bodyExpired: true` is set if the window has elapsed. |
| `assistantmail_send_email` | Queue an outbound email. Requires `to`, `subject`, and at least one of `text` or `html`. |
| `assistantmail_reply_message` | Reply to an existing message. Requires `messageId` and at least one of `text` or `html`; recipients and subject are derived automatically. |
| `assistantmail_delete_messages` | Delete messages by `messageIds` array, or pass `deleteAll: true` to clear the mailbox. |
| `assistantmail_get_usage` | Get daily and monthly send quota usage for a mailbox. A `null` limit means unlimited. |
### Recipients
| Tool | Description |
|---|---|
| `assistantmail_list_recipients` | List approved and pending recipients for the account. |
| `assistantmail_add_recipient` | Add a recipient. Sends a consent invitation email when required by the account's plan. |
| `assistantmail_remove_recipient` | Remove a recipient from the allowed list. |
### Reference tools
These return raw REST endpoint details rather than calling the API. Use them when you need to construct a request manually or inspect the exact URL and response schema.
| Tool | Description |
|---|---|
| `assistantmail_send_email_reference` | Endpoint, headers, and body fields for `POST /v1/mailboxes/{mailboxId}/messages`. |
| `assistantmail_list_messages_reference` | Endpoint and query params for `GET /v1/mailboxes/{mailboxId}/messages`. |
| `assistantmail_get_message_reference` | Endpoint and response schema for `GET /v1/mailboxes/{mailboxId}/messages/{messageId}`. |
| `assistantmail_get_usage_reference` | Endpoint and response schema for `GET /v1/mailboxes/{mailboxId}/usage`. |
## Quick start
```bash
API_KEY="amk_..."
BASE="https://api.assistant-mail.ai"
# 1) Discover your mailboxId
curl "$BASE/v1/mailboxes" -H "x-api-key: $API_KEY"
# 2) Send an email
curl -X POST "$BASE/v1/mailboxes/<mailboxId>/messages" \
-H "x-api-key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"to":"recipient@example.com","subject":"Hello","text":"Hi there"}'
# 3) Read inbox
curl "$BASE/v1/mailboxes/<mailboxId>/messages" -H "x-api-key: $API_KEY"
```
## Tool call examples
```json
{ "tool": "assistantmail_list_mailboxes", "input": { "apiKey": "amk_..." } }
```
```json
{
"tool": "assistantmail_list_messages",
"input": { "mailboxId": "<uuid>", "limit": 20, "since": "2026-01-01T00:00:00.000Z" }
}
```
```json
{
"tool": "assistantmail_get_message",
"input": { "mailboxId": "<uuid>", "messageId": "<uuid>" }
}
```
```json
{
"tool": "assistantmail_send_email",
"input": {
"mailboxId": "<uuid>",
"to": "recipient@example.com",
"subject": "Hello",
"text": "Hi there"
}
}
```
```json
{
"tool": "assistantmail_reply_message",
"input": {
"mailboxId": "<uuid>",
"messageId": "<uuid>",
"text": "Thanks for the update."
}
}
```
If `ASSISTANT_MAIL_API_KEY` is set in the server environment, `apiKey` can be omitted from all tool inputs.
---
[AssistantMail](https://assistant-mail.ai) · [Privacy Policy](https://assistant-mail.ai/privacy.html) · [Terms of Use](https://assistant-mail.ai/terms.html)