From 85252e05468304de8fd82d3e34ba83d96c555297 Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Sat, 7 Jun 2025 19:25:15 +0900 Subject: [PATCH] Suppress `Interrupt` exception for stdio server This PR suppresses the following backtrace of `Interrupt` (Ctrl+c) exception for stdio server: ## Before ```console $ ./examples/stdio_server.rb ^C/Users/koic/src/github.com/modelcontextprotocol/ruby-sdk/lib/mcp/server/transports/stdio_transport.rb:20: in 'IO#gets': Interrupt from /Users/koic/src/github.com/modelcontextprotocol/ruby-sdk/lib/mcp/server/transports/stdio_transport.rb:20: in 'MCP::Server::Transports::StdioTransport#open' from ./examples/stdio_server.rb:95:in '
' $ echo $? 130 ``` ## After ```console $ ./examples/stdio_server.rb ^C Exiting... $ echo $? 130 ``` This change should prevent unexpected backtrace from appearing when running the example: https://github.com/modelcontextprotocol/ruby-sdk?tab=readme-ov-file#stdio-transport --- lib/mcp/server/transports/stdio_transport.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/mcp/server/transports/stdio_transport.rb b/lib/mcp/server/transports/stdio_transport.rb index a90ea67d..d4aae270 100644 --- a/lib/mcp/server/transports/stdio_transport.rb +++ b/lib/mcp/server/transports/stdio_transport.rb @@ -7,6 +7,8 @@ module MCP class Server module Transports class StdioTransport < Transport + STATUS_INTERRUPTED = Signal.list["INT"] + 128 + def initialize(server) @server = server @open = false @@ -20,6 +22,10 @@ def open while @open && (line = $stdin.gets) handle_json_request(line.strip) end + rescue Interrupt + warn("\nExiting...") + + exit(STATUS_INTERRUPTED) end def close