diff --git a/tests/README.md b/tests/README.md index 2f0fa39..3d7b602 100644 --- a/tests/README.md +++ b/tests/README.md @@ -6,13 +6,11 @@ This directory contains smoke tests for the MCP quickstart examples. These tests The smoke tests verify: -- **Servers**: Each weather server (Python, TypeScript, Rust, Go) can start, respond to MCP protocol requests, and honour the output schemas it advertises +- **Servers**: Each weather server (Python, TypeScript, Rust, Go, Ruby) can start, respond to MCP protocol requests, and honour the output schemas it advertises - **Clients**: The Python, TypeScript and Ruby MCP clients can connect to a mock server and list tools The Go and Rust clients are not covered here: on `main` both abort when no `.env` file is present, so they cannot be driven without credentials. Making them start credential-free is a change in their own directories, so their coverage lands with those changes rather than here. -The Ruby **weather server** is not covered, for an upstream reason rather than a local one. The `mcp` gem negotiates `2026-07-28`, but its server never emits the `resultType` field that revision makes mandatory, so the test client rejects its responses — including `tools/list`. That is a fix for the gem, not something an example can work around. The Ruby **client** is covered: there it is the gem's client code that runs, and the server it is pointed at is the mock. - ## Structured content Listing tools is not enough to catch a broken structured result, so each server test also **calls** every tool that declares an `outputSchema` and checks the answer: diff --git a/tests/smoke-test.sh b/tests/smoke-test.sh index 494c5d2..b81d022 100755 --- a/tests/smoke-test.sh +++ b/tests/smoke-test.sh @@ -84,10 +84,6 @@ test_weather_server_go() { node "${TEST_CLIENT}" "${server_bin}" } -# The client tests drive the no-API-key path, where each client prints a notice -# and exits. Empty rather than unset: dotenv skips a name already present in -# ENV, so a key in the environment or a local .env would start the chat loop. - # Test: Ruby weather server test_weather_server_ruby() { check_dependency ruby || return 1 @@ -97,6 +93,10 @@ test_weather_server_ruby() { (cd "${server_dir}" && node "${TEST_CLIENT}" bundle exec ruby weather.rb) } +# The client tests drive the no-API-key path, where each client prints a notice +# and exits. Empty rather than unset: dotenv skips a name already present in +# ENV, so a key in the environment or a local .env would start the chat loop. + # Test: Python MCP client test_mcp_client_python() { check_dependency uv || return 1