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"
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.