Send an SMS with the Android SMS MCP Server

The send_sms tool instructs the Android device to dispatch an SMS to a specified phone number. When the device has more than one active SIM card, the caller must also supply a subscription_id obtained from get_sms_subscriptions to select the desired carrier.

Sequence diagram

sequenceDiagram participant A as AI Agent participant S as SMS MCP Server participant P as Mobile Phone Note over A,S: Session initialized, subscription_id known A->>S: POST /mcp
tools/call → send_sms
to: +33785880347, text: "Hello world", subscription_id: 14 S->>P: Send SMS via mobile network
using subscription 14 (Vodafone UK, slot 0) P-->>S: Delivery confirmation S-->>A: 200 OK
"SMS sent to +33785880347"

HTTP request

POST /mcp HTTP/1.1
Host: 192.168.0.11:9531
Accept-Encoding: gzip, deflate
Connection: keep-alive
User-Agent: python-httpx/0.28.1
Content-Type: application/json
Accept: application/json, text/event-stream
mcp-protocol-version: 2025-11-25
Content-Length: 169

{
  "jsonrpc": "2.0",
  "id": 16,
  "method": "tools/call",
  "params": {
    "name": "send_sms",
    "arguments": {
      "to_phone_number": "+33785880347",
      "sms_text": "Hello world",
      "subscription_id": 14
    }
  }
}

Request fields

Field Example value Description
jsonrpc "2.0" JSON-RPC protocol version. Always "2.0".
id 16 Request identifier used to correlate the response.
method "tools/call" The generic MCP method for invoking a tool by name.
params.name "send_sms" The specific tool to invoke.
params.arguments.to_phone_number "+33785880347" Destination phone number in international E.164 format. Must start with + followed by the country code.
params.arguments.sms_text "Hello world" Body of the SMS. Must not exceed 160 characters for a standard single-part message.
params.arguments.subscription_id 14 Android subscription ID of the SIM to use for sending. Required when the device has more than one active SIM. Obtain this value from get_sms_subscriptions.

HTTP response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 98
Connection: keep-alive

{
  "id": 16,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "SMS sent to +33785880347"
      }
    ]
  },
  "jsonrpc": "2.0"
}

Response fields

Field Example value Description
id 16 Echoes the request id for correlation.
result.content[0].type "text" Content block type. The MCP content model supports text, image, and resource; this tool always returns text.
result.content[0].text "SMS sent to +33785880347" Human-readable confirmation message. The phone number in the message confirms which recipient the device targeted.

To sum it up

A successful send_sms call results in the mobile phone dispatching the message over the cellular network using the selected SIM subscription. The server returns a plain-text confirmation containing the destination number. No further polling is needed — the response itself is the delivery acknowledgement.


More information