textbee-mcp
Officialby textbee
README.md
# @textbee/mcp
[](https://www.npmjs.com/package/@textbee/mcp)
[](https://github.com/textbee/textbee-mcp/actions/workflows/ci.yaml)
[](./LICENSE)
MCP server for [textbee.dev](https://textbee.dev), the open source SMS gateway that turns an Android phone into an SMS API. Gives Claude, Cursor, and any MCP client the ability to send and read SMS through your own phone and your own number.
Three tools, no per-message markup, works with self-hosted textbee instances.
## Setup
You need a textbee account with a paired Android device and an API key from the [dashboard](https://app.textbee.dev/dashboard). The key has full account access; treat it like a password.
### claude.ai, Claude Desktop, and the Claude mobile apps (no install)
These use the hosted endpoint at `https://mcp.textbee.dev/mcp`, which runs the same tools from this package.
1. In claude.ai or Claude Desktop, open **Customize**, then **Connectors**, then **+ Add** and **Add custom connector**.
2. Enter the name `textbee` and the URL `https://mcp.textbee.dev/mcp`, then click **Continue** twice.
3. Choose **Sign in now**, leave the OAuth client on the recommended option, and click **Add**.
4. Paste your API key on the textbee sign-in page and click **Connect**.
One connection works on the web, in Claude Desktop, and in the Claude mobile apps (the mobile apps cannot add connectors themselves). On Team and Enterprise plans, an owner adds the connector for the organization first. It lasts 90 days, then Claude asks you to reconnect. textbee checks the key and does not store it, but the key does pass through textbee's server. Revoke the key in the dashboard to disconnect. To keep the key on your machine, use the local setup below.
### Claude Code
Local, with the key in your own config:
```bash
claude mcp add textbee -s user -e TEXTBEE_API_KEY=your-key -- npx -y @textbee/mcp
```
Or hosted, signing in with your key in the browser:
```bash
claude mcp add --transport http -s user textbee https://mcp.textbee.dev/mcp
```
Then run `/mcp` in Claude Code, select `textbee`, and choose **Authenticate**.
### Claude Desktop (local)
Add to `claude_desktop_config.json` (macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`, Windows: `%APPDATA%\Claude\claude_desktop_config.json`), then restart Claude Desktop:
```json
{
"mcpServers": {
"textbee": {
"command": "npx",
"args": ["-y", "@textbee/mcp"],
"env": { "TEXTBEE_API_KEY": "your-key" }
}
}
}
```
### Cursor
The same object in `~/.cursor/mcp.json`. Clients that support remote servers with headers can use `https://mcp.textbee.dev/mcp` instead and send the key as `x-textbee-api-key` or `Authorization: Bearer <key>`.
Full setup guide: [textbee.dev/docs/agents/mcp](https://textbee.dev/docs/agents/mcp).
### Slow first start
`npx` downloads the package on first run. If your client times out waiting, install globally once and point the config at the binary:
```bash
npm install -g @textbee/mcp
```
```json
{ "mcpServers": { "textbee": { "command": "textbee-mcp", "env": { "TEXTBEE_API_KEY": "your-key" } } } }
```
## Tools
### send_sms
Send an SMS to one or more recipients (E.164 format, for example `+15550100123`). The sending phone is chosen automatically: your default device, otherwise the enabled device with the most recent heartbeat. Optional `device_id`, `sim_subscription_id`, and `scheduled_at`. Returns an `sms_batch_id` for delivery checks when the account uses the SMS queue.
### get_messages
Read messages across every device on the account. Defaults to received messages, newest first. Filter by `direction` (`received`, `sent`, `all`), free-text `search`, `sms_batch_id` (per-recipient delivery status of a send), `device_ids`, and a `from`/`to` time window. Supports cursor pagination for polling without duplicates or gaps.
### list_devices
The phones on the account: ids, enabled state, which one sends by default, last check-in, and message counts.
## Self-hosted textbee
Point the server at your own instance:
```json
"env": {
"TEXTBEE_API_KEY": "your-key",
"TEXTBEE_BASE_URL": "https://sms.example.com"
}
```
The `/api/v1` suffix is optional and added automatically. Subpath deployments like `https://example.com/textbee` work too. An invalid URL is an error rather than a silent fallback, so a typo never sends your key to the public API.
## Environment variables
| Variable | Required | Default | Purpose |
|---|---|---|---|
| `TEXTBEE_API_KEY` | yes | none | API key from the textbee dashboard |
| `TEXTBEE_BASE_URL` | no | `https://api.textbee.dev` | Your instance's URL when self-hosting |
| `TEXTBEE_TIMEOUT_MS` | no | `30000` | Per-request timeout in milliseconds |
## Notes
- Your key stays on your machine: this server talks only to the textbee API at the base URL above.
- Sends count against your textbee plan quota, and the plan's rate limits apply server-side.
- All diagnostics go to stderr; stdout is reserved for the MCP protocol.
## Using it as a library
The package also exports its tool definitions for embedding in another MCP host (this is how the hosted remote endpoint reuses them):
```js
import { createTextbeeMcpServer, staticCredentials, loadConfig } from '@textbee/mcp'
const server = createTextbeeMcpServer({
credentials: staticCredentials(loadConfig(process.env)),
})
```
Credentials are resolved per tool call, so a multi-tenant host can inject a different key per request. See `credentialsFromAuthInfoExtra`.
## License
MIT. Part of the [textbee](https://github.com/textbee/textbee) project.
TDQS
A4.7/5.0
Scored across 3 tools
Disambiguation5/5
Each tool has a completely distinct purpose: sending SMS, reading messages, and listing devices. The descriptions clearly delineate when to use each, with no overlap in functionality.
Naming Consistency5/5
All three tools follow a consistent verb_noun pattern with snake_case: send_sms, get_messages, list_devices. This makes the API predictable and easy to navigate.
Tool Count5/5
The server is tightly scoped to core SMS operations, and three tools fully cover that scope. Each tool earns its place—there is no redundancy or unnecessary bloat.
Completeness5/5
The tool set covers the essential SMS workflow: sending, reading (including delivery status), and device management. For a narrow SMS gateway, there are no obvious gaps that would hinder an agent.
Maintenance
ActivityMaintained
ResponsivenessNo issues