Skip to main content
Glama
SendAPI-co

SendAPI MCP Server

Official
by SendAPI-co
README.md
# @sendapi/mcp-server

Official [Model Context Protocol](https://modelcontextprotocol.io) server for [SendAPI](https://sendapi.co).

Give any MCP-compatible AI agent (Claude Code, Claude Desktop, ChatGPT/Codex, Cursor, Windsurf, Cline) the ability to **send WhatsApp messages, SMS, OTP codes, and email** through one REST API.

## Quick start

You need a SendAPI API key. Create one in your [dashboard](https://sendapi.co).

The server runs over stdio via `npx`, so there is nothing to install globally.

### Claude Desktop / Claude Code

Add to your MCP config (`claude_desktop_config.json`, or `.mcp.json` in a project):

```json
{
  "mcpServers": {
    "sendapi": {
      "command": "npx",
      "args": ["-y", "@sendapi/mcp-server"],
      "env": {
        "SENDAPI_API_KEY": "sk_live_xxxxxxxxxxxx"
      }
    }
  }
}
```

### Cursor / Windsurf / Cline

Same shape: a stdio server with `command: npx`, `args: ["-y", "@sendapi/mcp-server"]`, and `SENDAPI_API_KEY` in `env`.

## Two ways to run it

| Mode | Transport | Best for |
|---|---|---|
| **Local** (`npx`, above) | stdio | Coding agents on your machine (Claude Code, Cursor, Windsurf, Cline, Codex CLI). |
| **Hosted** (`sendapi.co/mcp`) | streamable HTTP | One-click connectors with no install (Claude/ChatGPT remote connectors, n8n MCP Client node). |

### Hosted (remote) server

No install. Point your client at the remote URL and authenticate with your API key:

- **URL:** `https://sendapi.co/mcp`
- **Auth:** `Authorization: Bearer sk_live_xxxxxxxxxxxx` (or the `X-SendAPI-Key` header)

The hosted server is multi-tenant and stateless: your key is used only for the lifetime
of each request and never stored server-side. Self-host it yourself with the included
[`Dockerfile`](./Dockerfile) (`docker build -t sendapi-mcp . && docker run -p 8080:8080 sendapi-mcp`),
then connect to `http://localhost:8080/mcp`.

## Configuration

| Env var | Required | Default | Used by | Notes |
|---|---|---|---|---|
| `SENDAPI_API_KEY` | stdio only | — | stdio | Your SendAPI API key (Bearer token). |
| `SENDAPI_BASE_URL` | no | `https://sendapi.co/v1` | both | Override for self-hosted or staging. |
| `PORT` | no | `8080` | hosted | Port the HTTP server listens on. |

## Tools

**Messaging**
- `send_whatsapp` — send a WhatsApp message from a connected session
- `send_bulk_whatsapp` — send to many recipients (max 500)
- `send_sms` / `send_bulk_sms`
- `send_email` / `send_bulk_email`

**Verification**
- `send_otp` — send a one-time code (SMS, WhatsApp, or email)
- `check_otp` — verify a code
- `validate_phone` — validate / look up a number

**Status & usage (read-only)**
- `get_email_status`, `get_sms_status`, `get_whatsapp_message`
- `get_usage` — remaining quota across channels

**Setup helpers (read-only)**
- `list_whatsapp_sessions`, `get_whatsapp_session_qr`
- `list_sender_ids`, `list_email_domains`, `list_email_templates`

Auth, billing, API-key, and team-admin endpoints are intentionally **not** exposed to agents.

## Safety

Every send still flows through SendAPI's normal limits and abuse protection. Bulk tools are annotated as high-impact so clients can prompt for confirmation. Errors surface SendAPI's `code`/`message` so the agent can self-correct (for example `sending_limited` or `content_blocked`).

## Development

```bash
npm install
npm run build      # compile TypeScript to dist/
SENDAPI_API_KEY=sk_test_xxx npm start
```

## License

MIT

TDQS

A4/5.0

Scored across 18 tools

Disambiguation5/5

Each tool targets a distinct action on a specific channel (email, SMS, WhatsApp, OTP, phone validation, or usage). There is no ambiguity between single and bulk send tools, and check_otp is clearly separate from send_otp.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, e.g., send_email, get_sms_status, list_whatsapp_sessions, validate_phone. No mixing of styles or vague verbs.

Tool Count5/5

With 18 tools covering email, SMS, WhatsApp, OTP, phone validation, and usage, the count is well-scoped for a messaging API server. Each tool serves a clear purpose without unnecessary duplication.

Completeness5/5

The tool surface covers all core messaging operations: sending (single and bulk), status retrieval, OTP lifecycle, listing of resources (domains, templates, sender IDs, sessions), usage monitoring, and phone validation. No obvious gaps for the intended domain.

Maintenance

ActivityInactive
ResponsivenessNo issues