Initialize the Android SMS MCP server

Before any tool can be called, the MCP client must perform a handshake with the server. The initialize request establishes a shared protocol version and lets both sides declare which optional MCP capabilities they support. This is always the very first message of an MCP session.

Sequence diagram

sequenceDiagram participant A as AI Agent participant S as SMS MCP Server A->>S: POST /mcp
method: "initialize"
protocolVersion: "2025-11-25" S-->>A: 200 OK
protocolVersion: "2025-11-25"
serverInfo + capabilities Note over A,S: Session established – tools may now be called

HTTP request

The agent sends a JSON-RPC 2.0 object to POST /mcp.

POST /mcp HTTP/1.1
host: 192.168.0.11:9531
connection: keep-alive
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: 167

{
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-11-25",
    "capabilities": {},
    "clientInfo": {
      "name": "mcp-discovery-tool",
      "version": "1.0.0"
    }
  },
  "jsonrpc": "2.0",
  "id": 0
}

Request fields

Field Example value Description
jsonrpc "2.0" JSON-RPC protocol version. Must always be "2.0".
id 0 Request identifier. The server echoes this value in the response so the client can correlate async replies.
method "initialize" The MCP method name. Must be "initialize" for the handshake.
params.protocolVersion "2025-11-25" The highest MCP protocol version the client supports. The server responds with the version it will use.
params.capabilities {} Optional map of client capabilities (e.g. sampling, roots). An empty object means no extra capabilities are declared.
params.clientInfo.name "mcp-discovery-tool" Human-readable name of the MCP client application.
params.clientInfo.version "1.0.0" Version string of the MCP client application.

HTTP response

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

{
  "id": 0,
  "result": {
    "protocolVersion": "2025-11-25",
    "capabilities": {
      "tools": {
        "listChanged": false
      }
    },
    "serverInfo": {
      "name": "ozeki_android_mcp",
      "version": "1.0.0",
      "title": "Ozeki Android SMS MCP server"
    }
  },
  "jsonrpc": "2.0"
}

Response fields

Field Example value Description
id 0 Echoes the request id for correlation.
result.protocolVersion "2025-11-25" The protocol version the server will use for this session.
result.capabilities.tools.listChanged false When true, the server would send notifications/tools/list_changed events if the tool catalogue changes at runtime. false means the tool list is static.
result.serverInfo.name "ozeki_android_mcp" Internal identifier of the server implementation.
result.serverInfo.version "1.0.0" Version of the server software.
result.serverInfo.title "Ozeki Android SMS MCP server" Human-readable display name shown in MCP client UIs.

To sum it up

The initialize handshake is a lightweight, one-round-trip negotiation. Once the server returns a 200 OK with its serverInfo, the session is active and the agent can proceed to discover available tools with a tools/list request.


More information