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

sequenceDiagram participant A as AI Agent participant S as SMS MCP Server Note over A,S: Session already initialized A->>S: POST /mcp
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.


More information