After a lot of digging we have found the exact reason for this problem. Python servers send back the following payload on an initialize request:
{
"jsonrpc":"2.0",
"id":1,
"result":{
"protocolVersion":"2024-11-05",
"capabilities":{"experimental":{},"tools":{"listChanged":false}},
"serverInfo":{"name":"mcp-streamable-http-demo","version":"1.9.5.dev14+d0443a1"}}
}
ources":{"listChanged":true}},"serverInfo":{"name":"simple-streamable-http-
server","version":"1.0.0"}},"jsonrpc":"2.0","id":"1"}
As you can see the type of the "id" field is integer in python, and string in node.
An integer id seems to cause the Copilot Studio Client to crash, and the follow up requests after this exchange simply don't come.
The Microsoft MCP client should support integer id's as well, since this is also part of the official spec.