Repository navigation
Forward Mcp-Name header in McpTransportContext - #1326
Open
neerajbhatt wants to merge 1 commit into
Open
neerajbhatt wants to merge 1 commit into
neerajbhatt wants to merge 1 commit into
Conversation
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]>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #1317
Motivation
Server features (e.g. routing-header checks for methods like
tasks/get) need thedecoded
Mcp-Namerequest header, but the modern transport only used it internallyin
validateHeaders()and did not expose it throughMcpTransportContext.Changes
McpNameHeadervalue, stored underMcpNameHeader.TRANSPORT_CONTEXT_KEY,modelled on
McpParamHeaders.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;isPresent(),value()).NOT_MIRROREDsentinel, so features can tell "this transporthas no headers" apart from "the client omitted the header".
McpHeaderDecoderand reads all header names/values via the headeraccessor.
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. ExistingvalidateHeaders()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_MIRROREDsentinel.Focused run: 111 passed, 0 failed.