INFO: incoming POST /mcp/http
2026-01-03 16:28:00,158 DEBUG pymcp.transports.mcp_http_streamable:mcp_http_streamable_post:321 [TRANSPORT][MCP_HTTP_STREAMABLE][CLIENT->SERVER] request_received session_id=<new> client_host=10.163.2.82 method=initialize id=0 phase=receive
2026-01-03 16:28:00,159 DEBUG pymcp.core.state.session:create_session:221 [DATA][SESSION][STATE] created session_id=a8b4f9ff-6072-4e52-8e47-54ae48bf18c7
2026-01-03 16:28:00,159 DEBUG pymcp.core.protocol.capabilities:negotiate_capabilities:157 [DATA][CAPABILITIES][NEGOTIATE] client_declared={'tools': True, 'prompts': True, 'resources': True, 'logging': False, 'elicitation': {}, 'roots': {'listChanged': False}} server_offered={'tools': {'listChanged': True}, 'prompts': {'listChanged': True}, 'resources': {'listChanged': True, 'subscribe': True}, 'roots': {'listChanged': True}, 'elicitation': {'form': {}, 'url': {}}, 'tasks': {'list': {}, 'cancel': {}, 'requests': {'tools': {'call': {}}}}} negotiated_for_client={'tools': {'listChanged': True}, 'prompts': {'listChanged': True}, 'resources': {'listChanged': True, 'subscribe': True}, 'roots': {'listChanged': False}, 'elicitation': {'form': {}, 'url': {}}} phase=receive
2026-01-03 16:28:00,159 DEBUG pymcp.core.protocol.payload:build_initialize:115 [DATA][CAPABILITIES][RESPOND] sending_negotiated_capabilities_to_client={'tools': {'listChanged': True}, 'prompts': {'listChanged': True}, 'resources': {'listChanged': True, 'subscribe': True}, 'roots': {'listChanged': False}, 'elicitation': {'form': {}, 'url': {}}} phase=respond
2026-01-03 16:28:00,159 DEBUG pymcp.transports.mcp_http_streamable:mcp_http_streamable_post:401 [TRANSPORT][MCP_HTTP_STREAMABLE][SERVER->CLIENT] response_json session_id=a8b4f9ff-6072-4e52-8e47-54ae48bf18c7 method=initialize id=0 status=200 phase=respond
INFO: handled POST /mcp/http status=200 duration_ms=1.9
2026-01-03 16:28:00,160 DEBUG pymcp.core.state.session:mark_initialize_started:328 [DATA][SESSION][STATE] handshake_started state_transition=new->initialized event=initialize session_id=a8b4f9ff-6072-4e52-8e47-54ae48bf18c7 version=1
From the log(client_declared={'tools': True, 'prompts': True, 'resources': True, 'logging': False, 'elicitation': {}, 'roots': {'listChanged': False}}), you can see that we are not marking the listChanged false for tools, prompts and resources, then should the server assume that client is supporting the listChanged notification for tools, resources and prompts? According to the spec( Lifecycle - Model Context Protocol ), itâs optional, is supporting these sub-capabilities hard. If yes, what are the challenges the cursor is facing in implementing it?
If we support these sub-capabilities cursor doesnât need to pool