Reference
MCP tools
@send0/mcp: the tools, their arguments, and configuration.
Two ways to run it, with the same tools. See the MCP quickstart for client setup. The same tools are also available for the Vercel AI SDK and LangChain.
Remote
https://api.send0.dev/mcp, Streamable HTTP, stateless.
Authorization: Bearer s0_… | Required. The tools act as this key, with its scopes and inbox limits. |
?inbox_id=ibx_… or x-send0-inbox header | Default inbox, so tools don't need inbox_id |
A self-hosted send0 serves the same endpoint at https://<your domain>/mcp.
Requests without a valid key get 401 with a WWW-Authenticate: Bearer header. Browser-based clients are allowed (CORS).
Local
Run with npx -y @send0/mcp over stdio.
| Variable | |
|---|---|
SEND0_API_KEY | Required. Prefer a read+send key limited to the agent's inbox. |
SEND0_INBOX_ID | Default inbox, so tools don't need inbox_id |
SEND0_BASE_URL | Your self-hosted send0, like https://mail.example.com |
Tools
| Tool | Arguments | Notes |
|---|---|---|
create_inbox | name?, display_name? | Returns the address and id |
list_inboxes | none | Inboxes this key can use |
wait_for_email | inbox_id?, from?, subject?, timeout? (s, default 60, max 600) | Returns the code and action link first. Read-only. |
search_messages | inbox_id?, query?, from?, direction?, limit? | One line per message. Read-only. |
get_message | message_id, full_text? | New text only unless full_text. Read-only. |
list_threads | inbox_id?, limit? | Read-only |
get_thread | inbox_id?, thread_id, full_text? | Oldest first. Read-only. |
send_email | inbox_id?, to, subject, text, cc? | New thread. Marked as acting on the outside world. |
reply | message_id, text, reply_all? | Same thread. Marked as acting on the outside world. |
Read-only tools carry readOnlyHint. send_email and reply carry openWorldHint, so clients can ask before sending. API errors come back as tool errors the model can act on, for example send0 error recipient_not_allowed: ….
In your own server
import { createSend0Server } from "@send0/mcp";
import { Send0 } from "@send0/sdk";
const server = createSend0Server({ client: new Send0(apiKey), defaultInboxId: "ibx_…" });
await server.connect(transport); // any MCP transport