Android Texter

io.github.argosautomationPublished by GitHub account argosautomationv1.1.0Updated Nov 6, 2026

Send and read SMS and MMS from your own Android phone and number via Android Texter.

Overview

AI-generated overview

Connects an assistant to an Android Texter account so it can read, search, send and schedule real SMS/MMS from the user's own paired Android phone.

What you can do
  • List paired phones with status, battery, number and SIMs
  • Browse, read and search conversations and message history, including groups
  • Send texts or picture messages now or scheduled, and broadcast to up to 500 numbers
  • Check message status and list or cancel scheduled messages
  • List, search and save contacts and their tags
When to use it
Useful when you want an assistant to draft, send or schedule texts from your own number and carrier plan, catch up on replies, or search message history and contacts without leaving the chat client.
Requirements
Runs locally over stdio via npx (Node.js 18 or newer), or as a downloaded script run with node. Needs an Android Texter account with the app installed and a phone paired, plus an API key supplied in the ATX_API_KEY environment variable. Optional ATX_API_BASE and ATX_CLIENT_NAME variables.
Before you install
Sending tools send real texts to real people from your number and carrier plan, and broadcasts can reach up to 500 recipients; confirm recipients and wording first. The API key is a secret stored in the client config. save_contact writes to your contacts. Free plans have a daily message cap, and messages not sent within 24 hours are marked failed.

Installation

In SourceWeft

  1. Open Android Texter 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

Android Texter MCP Server

Let Claude, Cursor, Windsurf, and any other MCP client send and read text messages through Android Texter.

Android Texter turns your own Android phone into an SMS and MMS gateway. Texts go out from the phone's real number over its carrier plan, and replies come back into your account. This server connects your AI assistant to that account, so you can say "text Sam that the meeting moved to 3pm" or "who replied to yesterday's broadcast?" and it happens on your phone.

  • Sends from your own number, not a shared short code or a rented line
  • Reads conversations, searches message history, and manages contacts
  • Schedules texts for later and cancels them
  • Runs locally over stdio; your API key stays on your computer

Before you start

  1. An Android Texter account with the app installed on an Android phone and paired to it. Sign up at androidtexter.com.
  2. An API key. In the dashboard, open Settings > API Keys (androidtexter.com/dashboard/settings/api-keys) and create one. Keys start with atx_.
  3. Node.js 18 or newer (node --version).

Install

The server runs with npx, so there is nothing to install by hand. Pick your client below and replace atx_YOUR_API_KEY with your key.

Claude Desktop

Open Settings > Developer > Edit Config (or edit claude_desktop_config.json directly: ~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows) and add:

json
{  "mcpServers": {    "android-texter": {      "command": "npx",      "args": ["-y", "android-texter-mcp"],      "env": {        "ATX_API_KEY": "atx_YOUR_API_KEY"      }    }  }}

Restart Claude Desktop. The Android Texter tools appear under the tools menu in a new chat.

Claude Code

bash
claude mcp add android-texter --scope user --env ATX_API_KEY=atx_YOUR_API_KEY -- npx -y android-texter-mcp

Run claude mcp list to check that it connected.

Cursor

Add to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):

json
{  "mcpServers": {    "android-texter": {      "command": "npx",      "args": ["-y", "android-texter-mcp"],      "env": {        "ATX_API_KEY": "atx_YOUR_API_KEY"      }    }  }}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json (or Settings > Cascade > MCP Servers > View raw config):

json
{  "mcpServers": {    "android-texter": {      "command": "npx",      "args": ["-y", "android-texter-mcp"],      "env": {        "ATX_API_KEY": "atx_YOUR_API_KEY"      }    }  }}

VS Code

Add to .vscode/mcp.json. VS Code asks for the key once and stores it securely:

json
{  "inputs": [    { "type": "promptString", "id": "atx-api-key", "description": "Android Texter API key", "password": true }  ],  "servers": {    "android-texter": {      "command": "npx",      "args": ["-y", "android-texter-mcp"],      "env": { "ATX_API_KEY": "${input:atx-api-key}" }    }  }}

Any other MCP client

Run npx -y android-texter-mcp as a stdio server with ATX_API_KEY in its environment.

On Windows, if your client cannot find npx, use "command": "cmd" with "args": ["/c", "npx", "-y", "android-texter-mcp"].

Without npm

The same server is available as a single file from the dashboard (Settings > Integrations > Download Script). Save it anywhere and use "command": "node" with "args": ["/absolute/path/to/android-texter-mcp.js"] in place of the npx lines above.

Environment variables

VariableRequiredDescription
ATX_API_KEYYesYour Android Texter API key, from Settings > API Keys.
ATX_API_BASENoAPI root URL. Default https://androidtexter.com/api. Only change it for a test backend.
ATX_CLIENT_NAMENoName shown for this connection on the API Keys activity log. Detected automatically for most clients.

Tools

ToolWhat it does
list_devicesYour paired phones, with online status, battery, number, and SIMs.
list_conversationsRecent conversations, filtered by folder: all, inbox (replied), outbox (no reply yet), archived, spam.
get_conversationThe messages in one conversation, by phone number or thread (groups too).
search_messagesSearch every sent and received text by words, number, or contact name.
send_messageSend a text or picture message (MMS) now or at a scheduled time, from a chosen phone and SIM. Several numbers make a group text.
send_broadcastSend one text to up to 500 numbers, each as its own message, with {{name}}-style personalization.
get_message_statusWhether a sent message is queued, sent, delivered, or failed.
list_scheduled_messagesMessages waiting to go out later.
cancel_scheduled_messageCall off a scheduled message before it sends.
list_contactsList or search contacts, or everyone with a tag.
list_contact_tagsEvery tag in use on your contacts.
save_contactCreate a contact or update one by phone number. Fields you leave out are kept; tags are added.

Sending tools send real texts to real people from your number. Good clients ask before calling them; you can also set them to always ask in your client's tool settings.

Example prompts

  • "Which of my phones are online?"
  • "Show my last 10 conversations that got a reply."
  • "Read my conversation with +1 555 123 4567 and draft a reply."
  • "Text +15551234567: Running 10 minutes late, see you soon."
  • "Schedule a text to +15559876543 for tomorrow at 9am Eastern: Good morning!"
  • "Find anyone who texted the word interested this week."
  • "Add +15551112222 as Dana Lee from Acme with the tag vip."
  • "Send everyone tagged vip: Hi {{first_name|there}}, early access opens today."

Troubleshooting

  • "ATX_API_KEY is not set" or "Invalid API key": check the key in your client config and that it has not been deleted on the API Keys page.
  • "No devices registered": pair a phone in the Android Texter app first.
  • Messages stay queued: the phone is offline or the app is not running. Open the app on the phone. A message that cannot go out within 24 hours is marked failed.
  • "Daily message limit reached": the free plan has a daily cap. Upgrade in the dashboard under Billing.

Help: [email protected]. API reference: androidtexter.com/docs.

Development

bash
npm installnpm run typechecknpm run build            # build/index.js, the npm binnpm run build:download   # also copies it to the dashboard download in the Android Texter monorepo

License

MIT

Source: mcp/README.md at commit e9196e6

Tools

12

list_devices

List paired phones

List the Android phones paired to your Android Texter account. Each entry has its id, name, phone_number, status (online or offline), battery_level, last_seen, and its SIMs (slot, label, number) on dual-SIM phones. Texts are sent from these phones with their own numbers and carrier plans, so check that one is online before sending.

Takes no parameters.

list_conversations

List conversations

List your text conversations, most recent activity first. Each entry has phone (the other party, or a group's members joined by commas), last_message, last_direction, last_at, message_count, thread_type (direct or group), thread_ref, and the device it is on. Use get_conversation to read one in full.

Parametersviewlimit

get_conversation

Read a conversation

Read the messages in the conversation with one phone number, newest first. Each message has direction (inbound or outbound), body, status, created_at, and media_url for picture messages. For a group conversation, pass the thread_ref from list_conversations.

Parameterspagelimitphonerequiredthread_ref

search_messages

Search messages

Search all of your texts, sent and received, for a word or phrase. Matches the message text, the phone number, and the contact's name. Newest first.

Parametersqrequiredpagelimit

send_message

Send a text

Send a text message from one of your paired Android phones, using that phone's own number and carrier plan, to a real person. Confirm the recipient and wording with the user before sending. The call returns once the message is queued and pushed to the phone, not when it is delivered: use get_message_status with the returned message_id to follow it. Pass scheduled_at to send it later instead of now. Free plans have a daily sending limit.

Parametersphonerequiredmessagerequiredsim_slotdevice_idmedia_urlscheduled_at

send_broadcast

Send one text to many people

Send the same text to a list of phone numbers (up to 500), each as its own one-to-one message from your paired phone's own number. Only use this when the user has asked to text a list of people, and confirm the list and wording first: every recipient gets a real text. The message can be personalized from each recipient's contact record with {{name}}, {{first_name}}, {{last_name}}, {{full_name}}, {{company}}, {{city}} or {{state}}, and {{first_name|there}} gives a fallback when the field is empty. {{name}} is the name set by save_contact; first_name and last_name are only filled for contacts imported with those fields. Broadcasts send now and cannot be scheduled. Returns sent and failed counts and a message_id per recipient.

Parametersphonesrequiredmessagerequireddevice_idmedia_urlround_robin

get_message_status

Check a message's status

Check where an outbound message is: queued (waiting for the phone), sent (the phone handed it to the carrier), delivered, or failed. Pass the message_id returned by send_message or send_broadcast.

Parametersmessage_idrequired

list_scheduled_messages

List scheduled messages

List the messages that are scheduled to go out later and have not been sent or cancelled yet, soonest first. Use this before scheduling more, and to get the id needed by cancel_scheduled_message.

Takes no parameters.

cancel_scheduled_message

Cancel a scheduled message

Cancel a message that is scheduled for a future send, so it never goes out. Only works while it is still pending; a message that has already been released to the phone cannot be recalled.

Parametersmessage_idrequired

list_contacts

List contacts

List or search your Android Texter contacts. Each contact has id, phone, name, email, company, notes, tags, and line type and carrier when a lookup has been run. Filter by tag to build a list for send_broadcast.

Parameterstagpagelimitsearch

list_contact_tags

List contact tags

List every tag used on your contacts, for filtering list_contacts.

Takes no parameters.

save_contact

Create or update a contact

Create a contact, or update the one that already has this phone number. Only the fields you pass are changed; fields you leave out keep their current values. Tags are added to the contact's existing tags, never removed.

Parametersnametagsemailnotesphonerequiredcompany

Version history

1
  1. v1.1.0LatestNov 6, 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