textbee SMS

io.github.textbee由 GitHub 账号 textbee 发布v0.1.1更新于 Nov 6, 2026

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

已验证STDIO仅桌面效率与工作流沟通与协作

概览

AI 生成的概览

通过用户自己的 Android 手机和 textbee 收发短信,让助手发送短信、查看回复并列出已配对的设备。

可以做什么
  • 向一个或多个手机号或短码发送短信,可指定设备、SIM 卡或定时发送
  • 读取账号下所有设备的短信,可按方向、关键词、批次 ID、设备或时间范围筛选
  • 列出账号中的 Android 手机,包括 ID、启用状态、默认发送设备、最后在线时间和消息数量
适用场景
适合让助手用你自己的号码发送短信,或查看收到的短信和一次性验证码,而不必依赖按条计费的商业短信接口。也适用于自建 textbee 实例的场景。
运行要求
以 npm 包形式在本地通过 stdio 运行(npx @textbee/mcp),或使用 textbee 的托管端点。需要一个已配对 Android 设备的 textbee 账号,以及通过 TEXTBEE_API_KEY 提供的 API 密钥。自建实例可选设置 TEXTBEE_BASE_URL,另有 TEXTBEE_TIMEOUT_MS。需要能访问 textbee API 的网络。
安装前请注意
该 API 密钥拥有账号的完整权限,应像密码一样保管;托管端点会让密钥经过 textbee 的服务器,本地方式则把密钥留在本机。发送会消耗套餐额度且无法撤回,发送前应确认收件人,也不要重试可能已成功的发送。读取范围覆盖账号下的所有设备。

安装

在 SourceWeft 中

  1. 打开 控制台中的 textbee SMS,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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.

来源:README.md,提交 6440135

工具

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.

输入参数message必填device_idrecipients必填scheduled_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.

输入参数tofromlimitordercursorsearchdirectiondevice_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.

无需输入参数。

版本历史

3
  1. v0.1.1最新Nov 5, 2026
  2. v0.1.0Oct 29, 2026
  3. v0.0.2Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分