List the tools of the Android SMS MCP server
After the session is initialized, the AI agent calls tools/list to discover every tool the server exposes. The response contains each tool's name, description, and a JSON Schema that defines the accepted input parameters. The agent uses this information to decide which tool to invoke and how to construct valid arguments.
Sequence diagram
method: "tools/list" S-->>A: 200 OK
tools: [send_sms, get_sms_subscriptions] Note over A: Agent now knows which tools
are available and their schemas
HTTP request
The mcp-protocol-version header is added from this message
onwards; it confirms the negotiated version on every subsequent request.
POST /mcp HTTP/1.1
host: 192.168.0.11:9531
connection: keep-alive
mcp-protocol-version: 2025-11-25
content-type: application/json
accept: application/json, text/event-stream
accept-language: *
sec-fetch-mode: cors
user-agent: node
accept-encoding: gzip, deflate
content-length: 46
{
"method": "tools/list",
"jsonrpc": "2.0",
"id": 1
}
Request fields
| Field | Example value | Description |
|---|---|---|
jsonrpc |
"2.0" |
JSON-RPC protocol version. Always "2.0". |
id |
1 |
Request identifier incremented from the previous call. |
method |
"tools/list" |
Requests the full list of tools available on this MCP server. |
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 888
Connection: keep-alive
{
"id": 1,
"result": {
"tools": [
{
"name": "send_sms",
"description": "Sends an SMS message to a specified phone number.",
"inputSchema": {
"type": "object",
"required": ["to_phone_number", "sms_text"],
"properties": {
"to_phone_number": {
"type": "string",
"description": "The phone number the SMS should be sent to in international format starting with a plus sign followed by the country code. For example +36201234567"
},
"sms_text": {
"type": "string",
"description": "The text of the sms messages to be sent. The maximum length is 160 characters"
},
"subscription_id": {
"type": "integer",
"description": "SMS subscription ID to use for sending. Required when sending is allowed on more than one active subscription."
}
}
}
},
{
"name": "get_sms_subscriptions",
"description": "Returns the list of active SMS subscriptions available on the device.",
"inputSchema": {
"type": "object",
"required": [],
"properties": {}
}
}
]
},
"jsonrpc": "2.0"
}
Available tools
| Tool name | Description | Required parameters |
|---|---|---|
send_sms |
Sends an SMS message to a specified phone number. | to_phone_number, sms_text |
get_sms_subscriptions |
Returns the list of active SMS subscriptions (SIM cards) available on the device. | none |
send_sms – input parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
to_phone_number |
string | Yes | Destination phone number in international E.164 format, starting with + and the country code. Example: +36201234567. |
sms_text |
string | Yes | The body of the SMS. Maximum 160 characters for a standard single SMS. |
subscription_id |
integer | Conditional | The SIM subscription to use for sending. Required when the device has more than one active SIM. Obtain the value from get_sms_subscriptions. |
To sum it up
The tools/list response tells the agent exactly what the server
can do and what inputs each tool expects. With two SIM cards in the device,
the agent should call
get_sms_subscriptions
first to determine the correct subscription_id before dispatching
a message with send_sms.