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 '<main>'
$ 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
This commit is contained in:
parent
fda5640394
commit
85252e0546
1 changed files with 6 additions and 0 deletions
|
|
@ -7,6 +7,8 @@ module MCP
|
||||||
class Server
|
class Server
|
||||||
module Transports
|
module Transports
|
||||||
class StdioTransport < Transport
|
class StdioTransport < Transport
|
||||||
|
STATUS_INTERRUPTED = Signal.list["INT"] + 128
|
||||||
|
|
||||||
def initialize(server)
|
def initialize(server)
|
||||||
@server = server
|
@server = server
|
||||||
@open = false
|
@open = false
|
||||||
|
|
@ -20,6 +22,10 @@ module MCP
|
||||||
while @open && (line = $stdin.gets)
|
while @open && (line = $stdin.gets)
|
||||||
handle_json_request(line.strip)
|
handle_json_request(line.strip)
|
||||||
end
|
end
|
||||||
|
rescue Interrupt
|
||||||
|
warn("\nExiting...")
|
||||||
|
|
||||||
|
exit(STATUS_INTERRUPTED)
|
||||||
end
|
end
|
||||||
|
|
||||||
def close
|
def close
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue