SentFromAI Email MCP for Agents
# sentfromai-mcp
[](https://www.npmjs.com/package/sentfromai-mcp)
[](https://registry.modelcontextprotocol.io/v0/servers?search=ai.sentfrom)
[](LICENSE)
MCP server for [SentFromAI](https://sentfrom.ai) — email infrastructure for AI agents.
Gives any MCP-capable agent (Claude Code, Claude Desktop, Cursor, VS Code, Gemini CLI,
Codex, OpenClaw, or your own MCP host) email as native tools: create inboxes, send,
reply, forward, search, read threads, manage drafts, custom domains, webhooks, and
allow/block rules — 21 tools, each a thin wrapper over the
[SentFromAI REST API](https://docs.sentfrom.ai/api-reference/introduction). Every tool
carries MCP annotations (read-only / write / send / delete) so hosts can group them
and confirm the irreversible ones.
Use an existing SentFromAI API key (`sf_live_…`), or follow the
[agent setup guide](https://docs.sentfrom.ai/agent-install.md) to bootstrap an
inbox through REST when agent signup is enabled. New agent accounts can receive
and read before their human claims them; sending and other changes require that
claim. The console remains available for human signup.
## Let your agent install it
Paste this into your agent (Claude Code, OpenClaw, Gemini CLI, any MCP-capable agent):
```text
Set up email for yourself: https://docs.sentfrom.ai/agent-install.md
```
Bootstrap uses `POST /v1/agent-signups`, not an MCP tool: MCP requires the key
returned by signup. Save a random `Idempotency-Key` before the request and reuse
it with the same body for retries within the replay window. Save the response
privately; give its `claim_url` only to your operator in your existing chat.
`GET /v1/account` reports current capabilities; `POST /v1/account/claim-link`
refreshes a link with the original API key. Claiming preserves the inbox and key.
Use your host's protected credential configuration. Never put a real key in
chat, shell commands, source control or logs. Configure `SENTFROMAI_API_KEY` in
the stdio server environment privately before starting it; examples below show
placeholders only. For hosted MCP, configure its Bearer header privately.
This onboarding flow needs the matching API and console rollout; the package
itself does not create accounts or bypass account limits.
## Install
### Claude Code
As a plugin (asks for the key when you enable it, and adds a skill that teaches Claude email etiquette):
```bash
claude plugin marketplace add sentfromai/sentfromai-mcp
claude plugin install sentfromai@sentfromai
```
Or as a plain MCP server:
```bash
claude mcp add sentfromai -- npx -y sentfromai-mcp
```
### Claude Desktop, Cursor, Windsurf, Cline, any JSON-config host
```json
{
"mcpServers": {
"sentfromai": {
"command": "npx",
"args": ["-y", "sentfromai-mcp"],
"env": { "SENTFROMAI_API_KEY": "sf_live_…" }
}
}
}
```
Cursor one-click (then paste your key into the generated config):
[](cursor://anysphere.cursor-deeplink/mcp/install?name=sentfromai&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInNlbnRmcm9tYWktbWNwIl0sImVudiI6eyJTRU5URlJPTUFJX0FQSV9LRVkiOiJzZl9saXZlX+KApiJ9fQ==)
### Cursor and Grok Bot (plugin)
Install **SentFromAI** from the Cursor Marketplace; Grok Bot lists the same plugin under
Settings, Plugins. It connects to the hosted endpoint and asks for your API key on install.
To try it before it is listed, copy this repo into `~/.cursor/plugins/local/sentfromai`
and reload Cursor.
### VS Code
Add `npx -y sentfromai-mcp` through VS Code's MCP configuration and enter
`SENTFROMAI_API_KEY` in a protected input.
### Gemini CLI
```bash
gemini extensions install https://github.com/sentfromai/sentfromai-mcp
```
Gemini asks for the API key on install and keeps it in your keychain.
### Codex CLI
```bash
codex mcp add sentfromai -- npx -y sentfromai-mcp
```
### OpenClaw
```bash
openclaw mcp add sentfromai --command npx --arg -y --arg sentfromai-mcp
openclaw skills install git:sentfromai/sentfromai-mcp
```
Full guide: [docs.sentfrom.ai/frameworks/openclaw](https://docs.sentfrom.ai/frameworks/openclaw).
## Hosted endpoint (no install)
The same 21 tools are served over Streamable HTTP at `https://api.sentfrom.ai/mcp` for
hosts that only speak remote MCP (claude.ai connectors, ChatGPT apps, Meta Muse, Cursor
remote servers, MCP Inspector). Authenticate with `Authorization: Bearer sf_live_…`
(an `x-api-key` header also works), or let OAuth-capable hosts sign you in: the
endpoint publishes RFC 9728 resource metadata pointing at SentFromAI's authorization server.
```bash
claude mcp add --transport http sentfromai https://api.sentfrom.ai/mcp
```
## Tools
| Area | Tools | Annotation |
| --- | --- | --- |
| Inboxes | `create_inbox` · `list_inboxes` · `delete_inbox` | write · read · delete |
| Messages | `send_message` · `reply_to_message` · `forward_message` | send (irreversible, open world) |
| | `get_message` · `search_messages` | read |
| Threads | `list_threads` · `get_thread` | read |
| Drafts | `create_draft` · `send_draft` · `list_drafts` | write · send · read |
| Domains | `add_domain` · `get_domain` | write · read |
| Webhooks | `create_webhook` · `list_webhooks` · `delete_webhook` | write · read · delete |
| Allow/block | `add_address_rule` · `list_address_rules` · `delete_address_rule` | write · read · delete |
Replies thread correctly (In-Reply-To/References set automatically), search
supports keyword, semantic, and hybrid modes, and sends respect the same
idempotency and suppression rules as the REST API. API failures come back as tool
results with `isError` and the HTTP status, so the model can read a `401` (bad key)
or `402` (plan limit) and tell you instead of retrying.
## Configuration
| Env var | Required | Default |
| --- | --- | --- |
| `SENTFROMAI_API_KEY` | yes | — |
| `SENTFROMAI_BASE_URL` | no | `https://api.sentfrom.ai` |
## Programmatic use
The tools are exported so you can embed them in your own MCP host or transport:
```js
import { createServer, TOOLS, callTool, createApi } from 'sentfromai-mcp'
const server = createServer({ apiKey: process.env.SENTFROMAI_API_KEY })
await server.connect(yourTransport)
```
## Privacy
This server keeps no state and stores nothing locally. Every tool call is one HTTPS
request to `api.sentfrom.ai` authenticated with your API key. SentFromAI's privacy
policy: https://sentfrom.ai/privacy · terms: https://sentfrom.ai/terms.
## Docs
- [MCP guide](https://docs.sentfrom.ai/guides/mcp)
- [API reference](https://docs.sentfrom.ai/api-reference/introduction)
- [SentFromAI for agents](https://docs.sentfrom.ai/for-agents)
TDQS
Scored across 21 tools
Each tool targets a distinct resource and action: webhooks, inboxes, address rules, domains, messages, threads, and drafts are all clearly separated. The send/reply/forward trio is differentiated by their descriptions, so there is no ambiguity in tool selection.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_inbox, list_drafts, delete_webhook). The occasional use of 'add' instead of 'create' (add_domain, add_address_rule) is a minor synonym variation, not a structural inconsistency.
With 21 tools, the server is slightly larger than the typical 3-15 range, but this is justified by the breadth of the email platform (inboxes, domains, messages, threads, drafts, webhooks, and rules). Every tool has a clear purpose, so the count feels appropriate rather than bloated.
The tool surface covers core CRUD for inboxes and webhooks, plus sending, searching, threads, and drafts. Minor gaps exist, such as no delete for drafts or domains, but these can be worked around (e.g., by recreating resources). No major lifecycle dead ends are present.