Title: No logging in `_handle_stateful_request` when session ID is unknown/expired · Issue #2204 · modelcontextprotocol/python-sdk · GitHub
Open Graph Title: No logging in `_handle_stateful_request` when session ID is unknown/expired · Issue #2204 · modelcontextprotocol/python-sdk
X Title: No logging in `_handle_stateful_request` when session ID is unknown/expired · Issue #2204 · modelcontextprotocol/python-sdk
Description: Initial Checks I confirm that I'm using the latest version of MCP Python SDK I confirm that I searched for my issue in https://github.com/modelcontextprotocol/python-sdk/issues before opening this issue Description No logging in _handle_...
Open Graph Description: Initial Checks I confirm that I'm using the latest version of MCP Python SDK I confirm that I searched for my issue in https://github.com/modelcontextprotocol/python-sdk/issues before opening this ...
X Description: Initial Checks I confirm that I'm using the latest version of MCP Python SDK I confirm that I searched for my issue in https://github.com/modelcontextprotocol/python-sdk/issues before opening t...
Opengraph URL: https://github.com/modelcontextprotocol/python-sdk/issues/2204
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"No logging in `_handle_stateful_request` when session ID is unknown/expired","articleBody":"### Initial Checks\n\n- [x] I confirm that I'm using the latest version of MCP Python SDK\n- [x] I confirm that I searched for my issue in https://github.com/modelcontextprotocol/python-sdk/issues before opening this issue\n\n### Description\n\n# No logging in `_handle_stateful_request` when session ID is unknown/expired\n\n### Description\n\nThe `else` branch in `StreamableHTTPSessionManager._handle_stateful_request()` has no logging when it rejects a request with an unknown session ID.\n\nThe other two branches both log:\n- `logger.debug(\"Session already exists for session ID ...\")`\n- `logger.info(\"Created new transport for session ...\")`\n\nThe `else` branch just returns 404 (or 400 on previous version) silently.\n\nhttps://github.com/modelcontextprotocol/python-sdk/blob/main/src/mcp/server/streamable_http_manager.py\n\n```python\nelse:\n # Unknown or expired session ID - return 404 per MCP spec\n error_response = JSONRPCError(\n jsonrpc=\"2.0\",\n id=None,\n error=ErrorData(code=INVALID_REQUEST, message=\"Session not found\"),\n )\n response = Response(\n content=error_response.model_dump_json(by_alias=True, exclude_unset=True),\n status_code=HTTPStatus.NOT_FOUND,\n media_type=\"application/json\",\n )\n await response(scope, receive, send)\n```\n\nWe hit this in production after a server restart. A client not to be named was sending a stale `mcp-session-id` on every request and we had no idea why connections were failing. Wrapped the ASGI app in middleware to log rejected requests before we could see it was the same expired session ID every time.\n\nA `logger.warning` here would have saved us a lot of time:\n\n```python\nelse:\n logger.warning(\n \"Rejected request with unknown session ID: %s\",\n session_id,\n )\n ...\n```\n\n### Related issues\n\n- #1727 / #1808 changed this branch from 400 to 404 but didn't add logging\n- #1821 error code clarification for this response\n\n\nThanks for all your hard work!\n\n### Example Code\n\n```Python\n\n```\n\n### Python \u0026 MCP Python SDK\n\n```Text\n- MCP SDK: 1.24.0 (also confirmed on older versions back when this returned 400)\n- Python: 3.13\n```","author":{"url":"https://github.com/JohnathanOneal","@type":"Person","name":"JohnathanOneal"},"datePublished":"2026-03-04T04:27:54.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/2204/python-sdk/issues/2204"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:dd76ab5e-5db6-25bf-1db5-1fe2bf6f86e9 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | AA1C:1D29DB:465757:5EA756:6A56DE47 |
| html-safe-nonce | 959d686cba4e2fbd0cdb8f849fed0c529ecf537df4fb3a76ec58815020a1ece5 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQTFDOjFEMjlEQjo0NjU3NTc6NUVBNzU2OjZBNTZERTQ3IiwidmlzaXRvcl9pZCI6IjEzNjM5MTc3MzUwOTgzNjM1OSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | be0e2cf455b2bf461c43cce53d476bff71903e180ee88a78e97eedc85a4e6a9b |
| hovercard-subject-tag | issue:4019958940 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/modelcontextprotocol/python-sdk/2204/issue_layout |
| twitter:image | https://opengraph.githubassets.com/36d869e50bf9e5805c4f71afab807af30d69c300df593486ce36b6e8af272445/modelcontextprotocol/python-sdk/issues/2204 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/36d869e50bf9e5805c4f71afab807af30d69c300df593486ce36b6e8af272445/modelcontextprotocol/python-sdk/issues/2204 |
| og:image:alt | Initial Checks I confirm that I'm using the latest version of MCP Python SDK I confirm that I searched for my issue in https://github.com/modelcontextprotocol/python-sdk/issues before opening this ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | JohnathanOneal |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5220a278731283038daf0ed00b41f06ef7ff9539020ecc806c5c5a0fb6bda25a |
| turbo-cache-control | no-preview |
| go-import | github.com/modelcontextprotocol/python-sdk git https://github.com/modelcontextprotocol/python-sdk.git |
| octolytics-dimension-user_id | 182288589 |
| octolytics-dimension-user_login | modelcontextprotocol |
| octolytics-dimension-repository_id | 862584018 |
| octolytics-dimension-repository_nwo | modelcontextprotocol/python-sdk |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 862584018 |
| octolytics-dimension-repository_network_root_nwo | modelcontextprotocol/python-sdk |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 8684ae1a81cd3e4ef219b241179982bbda1a5b1f |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width