Suppress KeyboardInterrupt tracebacks from MCPServer.run#2778
Suppress KeyboardInterrupt tracebacks from MCPServer.run#2778koriyoshi2041 wants to merge 2 commits into
Conversation
|
CI triage note: the failing 3.14 lowest-direct jobs are failing in
The locked 3.14 Ubuntu job and the other Python versions are passing, and this PR only touches |
|
Pushed a small CI follow-up in 2ef65c1: the stdio subprocess test now asserts "stdio-echo: clean exit" as the final stderr line instead of requiring it to be the only stderr output. That keeps the clean-shutdown/stderr-passthrough check, while tolerating the Python 3.14 lowest-direct AnyIO import-time warning that was showing up before the server line. |
Problem
Interrupting an
MCPServer.run(transport="stdio")process with Ctrl-C can surface the full AnyIO/asyncio cancellation traceback even though the server is just shutting down. Issue #2663 is marked ready for work and points to the syncrun()boundary as the narrow fix point.Fix
Wrap the transport dispatch in
MCPServer.run()with aKeyboardInterruptguard so user interrupts return cleanly. Other exceptions still propagate.Tests
uv run pytest tests/server/mcpserver/test_server.pyuv run ruff format --check src/mcp/server/mcpserver/server.py tests/server/mcpserver/test_server.pyuv run ruff check src/mcp/server/mcpserver/server.py tests/server/mcpserver/test_server.pyuv run pyright src/mcp/server/mcpserver/server.py tests/server/mcpserver/test_server.pygit diff --checkRisk
Low. The guard is only at the synchronous
run()entry point and only handlesKeyboardInterrupt; ordinary startup/runtime exceptions are still re-raised.Fixes #2663