The client will send this
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {
"elicitation": {}
},
"clientInfo": {
"name": "example-client",
"version": "1.0.0"
}
}
}
The server will respond like this
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2025-06-18",
"capabilities": {
"tools": {
"listChanged": true
},
"resources": {}
},
"serverInfo": {
"name": "example-server",
"version": "1.0.0"
}
}
}
Notes
- If protocol versions are different, advised to terminate the connection to avoid any incompatible requests being made.
- The capabilities object lists the primitives support, although I need to get more definitive on the full array of potential options
- The server, in this example, has a tools object within capabilities, and rather than at first glance being limited to just the listChanged notification… it means the entire tool primitive methods are available AS WELL AS the listChanged.
- The resources object means the entire primitive is available for resources, so /list /read
Once the client checks the response from the server, it sends out a one way notification, expecting no immediate response:
{
"jsonrpc": "2.0",
"method": "notifications/initialized"
}






