Add client-level connect handshake to stdio transport

## Motivation and Context

Follow-up to https://github.com/modelcontextprotocol/ruby-sdk/pull/336

mcp gem 0.15.0 introduced an explicit `MCP::Client#connect` method for the stdio transport,
aligning with the Python and TypeScript SDKs which require explicit handshake calls regardless
of transport type:

- Python SDK: `ClientSession.initialize()`
  https://github.com/modelcontextprotocol/python-sdk
- TypeScript SDK: `Client.connect(transport)`
  https://github.com/modelcontextprotocol/typescript-sdk

This sample is updated to call `@mcp_client.connect` explicitly after creating the client,
demonstrating the recommended initialization pattern. The Gemfile constraint is bumped to `>= 0.15.0`
to require the new API.

## How Has This Been Tested?

Ran the sample against `weather-server-ruby` and confirmed the connection, tool listing,
and chat loop continue to work as expected.

## Breaking Changes

None. The change updates the sample to use the new explicit `connect` API,
which was added as a non-breaking addition in mcp gem 0.15.0.
This commit is contained in:
Koichi ITO 2026-05-06 09:25:30 +09:00
commit a1838e965a
2 changed files with 2 additions and 1 deletions

View file

@ -5,4 +5,4 @@ source "https://rubygems.org"
gem "anthropic"
gem "base64"
gem "dotenv"
gem "mcp", '>= 0.9.1'
gem "mcp", '>= 0.15.0'

View file

@ -28,6 +28,7 @@ class MCPClient
@transport = MCP::Client::Stdio.new(command: command, args: [server_script_path])
@mcp_client = MCP::Client.new(transport: @transport)
@mcp_client.connect
tool_names = @mcp_client.tools.map(&:name)
puts "\nConnected to server with tools: #{tool_names}"