Repository navigation
Skip 500 after completed POST response on closed writer - #3653
dharaneesh-sys wants to merge 1 commit into
Conversation
Notification POSTs send 202 Accepted before forwarding to the session writer. If the writer is closed, the resulting ClosedResourceError was answered with a second response (500), which Uvicorn rejects. Track whether the POST response was already sent and log-and-drop instead. Fixes modelcontextprotocol#3651.
|
This PR has been closed automatically. This repo only keeps pull requests open when they come from a maintainer, or from a contributor a maintainer has assigned to the linked issue, and you aren't currently assigned to #3651. If a maintainer assigns you to #3651, this PR reopens on its own and there's nothing more you need to do here. Assignment is a maintainer call based on capacity; comments that only ask to be assigned don't factor in. What does help is engaging on the issue itself by confirming the repro, explaining why it matters for your use case, or describing the approach you'd take. You're welcome to keep pushing commits here (just avoid force-pushing, since GitHub can't reopen a rewritten branch), but that on its own won't get the PR reviewed or the issue assigned, and realistically most auto-closed PRs stay closed. There's no need to open a new PR either way. CONTRIBUTING.md has the full reasoning, but in short:
Maintainers: reopen, remove |
Fixes #3651
Notification POSTs send 202 Accepted before forwarding to the session writer. If the writer is closed, the resulting ClosedResourceError was answered with a second response (500), which Uvicorn rejects with
RuntimeError: Unexpected ASGI message after completed. Track whether the POST response was already sent and, if so, log and drop instead of sending another response; also tolerate a closed writer when forwarding the error.Assisted by AI (Muse Spark) with human review and verification — repro reviewed and run locally.
Test plan:
test_closed_writer_notification_post_sends_single_202passes; fails without the fix with RuntimeError