Skip to content

fix(auth): ignore query parameters in protected resource matching - #1177

Open
stevenlee-oai wants to merge 1 commit into
modelcontextprotocol:mainfrom
stevenlee-oai:stevenlee-oai/rmcp-ignore-resource-query
Open

fix(auth): ignore query parameters in protected resource matching#1177
stevenlee-oai wants to merge 1 commit into
modelcontextprotocol:mainfrom
stevenlee-oai:stevenlee-oai/rmcp-ignore-resource-query

Conversation

@stevenlee-oai

@stevenlee-oai stevenlee-oai commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Why

The AWS MCP Server exposes both public documentation tools and authenticated AWS API tools. Requiring OAuth during every initialization would block public tools, but some clients only start OAuth after an initialization-time 401. AWS therefore uses ?oauth=initialize to request an early WWW-Authenticate challenge without changing the token audience:

MCP endpoint: https://mcp.example.com/mcp?oauth=initialize
Metadata resource: https://mcp.example.com/mcp

MCP permits authorization-dependent tool visibility and documents 401 discovery and step-up authorization, but does not prescribe first-time OAuth negotiation for endpoints mixing public and protected tools.

Standards and compatibility

RFC 8707 §2 says resource URIs SHOULD NOT contain queries, but explicitly permits them; it prohibits fragments and does not define query equivalence. RFC 9728 §3.3 requires exact metadata matching, which literally rejects this AWS pattern. The TypeScript SDK resolves that interoperability tension by comparing origin and path while ignoring queries.

This PR adopts the same policy: preserve scheme, host, port, path-boundary, and fragment checks; ignore queries for equal or permitted parent paths; and use the metadata's canonical resource in OAuth requests. Consequently, queries no longer distinguish same-origin, path-compatible resources.

Validation

cargo +1.97.1 test -p rmcp --features auth,transport-io
cargo +nightly-2025-09-01 fmt --all -- --check
git diff --check

554 tests pass, including 369 library tests. Coverage includes the AWS-style OAuth flow, absent/differing queries, parent paths, deceptive path prefixes, and cross-origin resources; the new regression fails before the fix.

@stevenlee-oai
stevenlee-oai requested a review from a team as a code owner August 14, 2026 15:50
@github-actions github-actions Bot added T-core Core library changes T-transport Transport layer changes labels Aug 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

T-core Core library changes T-transport Transport layer changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant