# `TMCP003` Initialize the MCP server Once the server is running, the client needs to initialize it, specifying a protocol version and negotiating capabilities. :::{dropdown} Is a test for :open: :icon: check-circle-fill :color: primary [`MCP002` Multiple queries per session](/requirements/MCP002) ::: :::{dropdown} Automated in :open: :icon: check-circle-fill :color: success - {fab}`python` [`test_initialize`](https://github.com/agagniere/speky/blob/master/tests/test_mcp_server.py#L37) - {fab}`python` [`test_reject_before_initialization`](https://github.com/agagniere/speky/blob/master/tests/test_mcp_server.py#L59) ::: :::{dropdown} Source :icon: file-code :color: info __Source file__: [`specs/mcp/test_02.yaml`](https://github.com/agagniere/speky/blob/master/specs/mcp/test_02.yaml) __Loaded from__: [`speky_mcp`](https://github.com/agagniere/speky/blob/master/specs/mcp/mcp.toml) ::: ## Initial state The expected state is the final state of [`TMCP001` Start the MCP server](/tests/TMCP001) ## Procedure ### Step 1 The client sends an `initialize` request ```json { "id": 1, "jsonrpc": "2.0", "method": "initialize", "params": { "protocolVersion": "2025-11-25", "capabilities": {}, "clientInfo": {} } } ``` ### Step 2 The server answers with an appropriate response ```json { "id": 1, "jsonrpc": "2.0", "result": { "protocolVersion": "2025-11-25", "capabilities": {}, "serverInfo": {} } } ``` ### Step 3 The client notifies the initialization is complete ```json { "jsonrpc": "2.0", "method": "notifications/initialized" } ```