textbee SMS

io.github.textbeePublished by GitHub account textbeev0.1.1Updated Nov 6, 2026

Send and read SMS through your own Android phone via textbee.dev, the open-source SMS gateway.

Overview

AI-generated overview

Sends and reads SMS through the user's own Android phone via textbee, letting an assistant text contacts, check replies and list paired devices.

What you can do
  • Send SMS to one or more phone numbers or short codes, optionally from a chosen device, SIM or scheduled time
  • Read messages across all devices on the account, filtered by direction, search text, batch id, device or time window
  • List the Android phones on the account with ids, enabled state, default sender, last check-in and message counts
When to use it
Useful when you want an assistant to send texts or check incoming SMS and one-time codes from your own number, without per-message fees from a commercial SMS API. Also fits self-hosted textbee setups.
Requirements
Runs locally as an npm package (npx @textbee/mcp) over stdio, or via textbee's hosted endpoint. Needs a textbee account with a paired Android device and an API key supplied as TEXTBEE_API_KEY. Optional TEXTBEE_BASE_URL for self-hosted instances and TEXTBEE_TIMEOUT_MS. Network access to the textbee API.
Before you install
The API key has full account access and should be treated like a password; the hosted endpoint passes it through textbee's server, while the local setup keeps it on your machine. Sends cost real messages against the plan quota and cannot be undone, so confirm recipients and avoid retrying a send that may have succeeded. Reads cover every device on the account.

Installation

In SourceWeft

  1. Open textbee SMS in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

@textbee/mcp

[npm version] [CI] [license]

MCP server for 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. 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.

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 phone numbers or short codes. International format with the country code (for example +15550100123) works everywhere. Local numbers and short codes only reach recipients in the sending phone's country. 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

VariableRequiredDefaultPurpose
TEXTBEE_API_KEYyesnoneAPI key from the textbee dashboard
TEXTBEE_BASE_URLnohttps://api.textbee.devYour instance's URL when self-hosting
TEXTBEE_TIMEOUT_MSno30000Per-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 project.

Source: README.md at commit 6440135

Tools

3

send_sms

Send SMS

Send an SMS through the user's own textbee account and Android phone. Recipients are phone numbers or short codes. Prefer international format with the country code, such as +15550100123. Local numbers and short codes are sent as given and only reach recipients in the sending phone's country. Sender names such as MYBANK cannot receive SMS. The sending phone is chosen automatically: the account default device, otherwise the enabled device with the most recent heartbeat. Only pass device_id when the user explicitly names a phone; ids come from list_devices. Sending costs the user a real message against their textbee plan quota, so do not send speculatively and do not retry a send that may already have gone out. When the account has SMS queueing enabled the result includes an sms_batch_id; pass it to get_messages as sms_batch_id to check per-recipient delivery status.

Parametersmessagerequireddevice_idrecipientsrequiredscheduled_atsim_subscription_id

get_messages

Read messages

Read the SMS messages on the user's textbee account, covering every device, no device id needed. direction defaults to "received": checking for a reply or a one-time code is the usual case. Pass direction "sent" to review what went out (each row carries its delivery status), or "all" for a conversation in order. Pass the sms_batch_id from a send to see that send's per-recipient delivery status. To poll for new messages without missing or repeating any: use order "asc" with a from bound, then keep calling with the next_cursor each result prints. from is inclusive and to is exclusive, so consecutive windows tile exactly. Reading does not consume the plan send quota. Messages reach textbee within a few seconds of arriving on the phone, so when waiting for a code, wait briefly and call again rather than tight-polling.

Parameterstofromlimitordercursorsearchdirectiondevice_idssms_batch_id

list_devices

List devices

List the Android phones registered to this textbee account: id, name, enabled state, which one is the default sender, when each last checked in, and message counts. Call this when a send fails with a device error, when the user asks which phone will be used, or when you need a device_id. Takes no arguments and sends no SMS.

Takes no parameters.

Version history

3
  1. v0.1.1LatestNov 5, 2026
  2. v0.1.0Oct 29, 2026
  3. v0.0.2Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts