Skip to content

Derive Mcp-Name from the body in the modern transport test helper - #494

Merged
koic merged 1 commit into
modelcontextprotocol:mainfrom
koic:derive_mcp_name_in_modern_test_requests
Aug 8, 2026
Merged

Derive Mcp-Name from the body in the modern transport test helper#494
koic merged 1 commit into
modelcontextprotocol:mainfrom
koic:derive_mcp_name_in_modern_test_requests

Conversation

@koic

@koic koic commented Aug 8, 2026

Copy link
Copy Markdown
Member

Motivation and Context

#490 and #492 merged independently green but broke each other on main: #492 made the modern path reject a name-bearing POST whose body carries a target name without Mcp-Name (-32020, HTTP 400) and taught the modern_rack_request helper to derive Mcp-Method from the body, while #490, merged in between, added five modern tools/call tests that build their requests through that helper and therefore send no Mcp-Name. Since the #492 merge every CI run on main fails those five tests with 400 where 200 is expected; the library behavior itself is correct.

The helper now derives Mcp-Name the same way it derives Mcp-Method: from params.name or params.uri when the body's method is one of the name-bearing three. That is what a conforming client sends per the 2026-07-28 specification, and what the TypeScript SDK's client, the bundled MCP::Client::HTTP, and the conformance harness's standard headers all do, so tests built through the helper model a compliant client by default. name_header: nil omits the header for tests of the requirement itself, symmetric with method_header: nil, and an explicit headers: entry still overrides the derived value, which keeps the base64 mismatch tests exercising their divergent names.

How Has This Been Tested?

The five failing tests pass again without being touched, and the #492 requirement tests (missing Mcp-Method, missing Mcp-Name, header mismatches, base64 decoding) still pass: the transport test file reports 217 runs with zero failures. bundle exec rake is green, including RuboCop and the --requirements 2025-11-25 conformance baseline.

Breaking Changes

None. The change is confined to a test helper; the shipped gem is untouched.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

## Motivation and Context

modelcontextprotocol#490 and modelcontextprotocol#492 merged independently green but broke each other on main: modelcontextprotocol#492 made the modern path reject
a name-bearing POST whose body carries a target name without `Mcp-Name` (-32020, HTTP 400)
and taught the `modern_rack_request` helper to derive `Mcp-Method` from the body, while modelcontextprotocol#490,
merged in between, added five modern `tools/call` tests that build their requests through that helper
and therefore send no `Mcp-Name`. Since the modelcontextprotocol#492 merge every CI run on main fails those five tests
with 400 where 200 is expected; the library behavior itself is correct.

The helper now derives `Mcp-Name` the same way it derives `Mcp-Method`: from `params.name` or
`params.uri` when the body's method is one of the name-bearing three. That is what a conforming client sends per
the 2026-07-28 specification, and what the TypeScript SDK's client, the bundled `MCP::Client::HTTP`,
and the conformance harness's standard headers all do, so tests built through
the helper model a compliant client by default. `name_header: nil` omits the header for tests of
the requirement itself, symmetric with `method_header: nil`, and an explicit `headers:` entry still overrides
the derived value, which keeps the base64 mismatch tests exercising their divergent names.

## How Has This Been Tested?

The five failing tests pass again without being touched, and the modelcontextprotocol#492 requirement tests
(missing `Mcp-Method`, missing `Mcp-Name`, header mismatches, base64 decoding) still pass:
the transport test file reports 217 runs with zero failures. `bundle exec rake` is green,
including RuboCop and the `--requirements 2025-11-25` conformance baseline.

## Breaking Changes

None. The change is confined to a test helper; the shipped gem is untouched.
@koic

koic commented Aug 8, 2026

Copy link
Copy Markdown
Member Author

Merging via bypass to restore the CI as quickly as possible.

@koic
koic merged commit b2f8070 into modelcontextprotocol:main Aug 8, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant