fix: prefix auth routes with issuer_url base path for gateway deployments#2401
Open
enjoykumawat wants to merge 1 commit intomodelcontextprotocol:mainfrom
Open
fix: prefix auth routes with issuer_url base path for gateway deployments#2401enjoykumawat wants to merge 1 commit intomodelcontextprotocol:mainfrom
enjoykumawat wants to merge 1 commit intomodelcontextprotocol:mainfrom
Conversation
When an MCP server is deployed behind a gateway with a custom base path (e.g., /custom/path), the OAuth auth routes (.well-known, /authorize, /token, /register, /revoke) were hardcoded at root, making them unreachable through the gateway. Extract the path component from issuer_url and prefix it to all auth route registrations. This matches the metadata URLs already built by build_metadata(), which correctly use issuer_url + path. Backward compatible: when issuer_url has no path, routes stay at root. Github-Issue: modelcontextprotocol#1335 Reported-by: whitewg77
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.
Summary
Fixes #1335 — When an MCP server is deployed behind a gateway with a custom base path (e.g.,
https://gateway/custom/path/mcp), the OAuth auth routes (.well-known,/authorize,/token,/register,/revoke) are hardcoded at root, making them unreachable through the gateway.Root cause:
create_auth_routes()registers routes at fixed root paths (/.well-known/oauth-authorization-server,/authorize, etc.) regardless of theissuer_urlpath. Meanwhile,build_metadata()correctly builds metadata URLs usingissuer_url+ path, creating a mismatch.Fix: Extract the path component from
issuer_urland prefix it to all auth route registrations. This aligns the actual route paths with the metadata URLs already built bybuild_metadata().Backward compatible: when
issuer_urlhas no path (or just/),issuer_pathis empty and routes stay at root.Changes
src/mcp/server/auth/routes.py: Extractissuer_pathfromissuer_urland prefix all route pathstests/server/auth/test_routes.py: Add 3 tests for default paths, custom base path, and trailing slash handlingTest plan
test_routes.pytests pass (9 existing + 3 new)test_error_handling.pytests pass (no regression)test_auth_integration.pytests pass (no regression)