GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Forward Mcp-Name header in McpTransportContext by neerajbhatt · Pull Request #1326 · modelcontextprotocol/java-sdk

Conversation

@neerajbhatt

@neerajbhatt neerajbhatt commented Nov 10, 2026

Copy link
Copy Markdown
Contributor

Fixes #1317

Motivation

Server features (e.g. routing-header checks for methods like tasks/get) need the
decoded Mcp-Name request header, but the modern transport only used it internally
in validateHeaders() and did not expose it through McpTransportContext.

Changes

  • New McpNameHeader value, stored under McpNameHeader.TRANSPORT_CONTEXT_KEY,
    modelled on McpParamHeaders.
  • HTTP: every validated JSON-RPC request carries a value, attached after the
    user's context extractor so it always wins. The value is one of:
    • ABSENT: the header was not sent;
    • MALFORMED: invalid base64, repeated values, or names differing only in case;
    • the decoded value (isPresent(), value()).
  • Stdio: carries the NOT_MIRRORED sentinel, so features can tell "this transport
    has no headers" apart from "the client omitted the header".
  • Decoding reuses McpHeaderDecoder and reads all header names/values via the header
    accessor. toString() never includes the value.

Contract: the transport only decodes and forwards. For methods it doesn't validate
itself, the feature owns the equality check against params and should treat
isMalformed() as a mismatch. Existing validateHeaders() behavior is unchanged.

Tests

  • McpHeaderDecoderTests: plain, base64, malformed, duplicate, mixed-case names.
  • HttpServletMcpTransportIntegrationTests: present / absent / malformed / repeated
    (raw socket for repeated headers), plus regression for existing name/uri validation.
  • StdioMcpTransportTests: NOT_MIRRORED sentinel.

Focused run: 111 passed, 0 failed.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@neerajbhatt @claude
Forward Mcp-Name header in McpTransportContext
1d26903
Expose the decoded Mcp-Name request header to server features through a
new McpNameHeader value stored under McpNameHeader.TRANSPORT_CONTEXT_KEY.

- HTTP: every validated JSON-RPC request carries a value, attached after
  the user's context extractor so it always wins. The value is either
  ABSENT, MALFORMED (bad base64, repeated values, or names differing
  only in case), or the decoded value.
- Stdio: carries the NOT_MIRRORED sentinel, so features can tell
  "no headers on this transport" apart from "client omitted the header".
- Decoding reuses McpHeaderDecoder and reads every header name and value
  through the header accessor. toString() never includes the value.

The transport only decodes and forwards. For methods it does not
validate itself, the feature owns the equality check against params
and should treat a malformed value as a mismatch. Existing
validateHeaders() behavior is unchanged.

Fixes modelcontextprotocol#1317

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Kehrlann Kehrlann self-assigned this Nov 10, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@Kehrlann Kehrlann

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Forward Mcp-Name header in the McpTransportContext for extension validation

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@neerajbhatt @Kehrlann
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.