modelcontextprotocol / modelcontextprotocol/example-remote-server
Confusion with `WWW-Authenticate` and EXTERNAL server mode
Personne n'a encore pris cette issue.
- Langage dominant
- TypeScript
- Étoiles
- 80
- Forks
- 39
- Merge moyen
- 43 min
- PR mergées (30 j)
- 1
Description
Describe the bug
It seems there is some confusion in this example project regarding the EXTERNAL mode.
In this mode, there should be two distinct servers:
- one for authentication (OAuth2),
- one for the MCP server.
However, even in EXTERNAL mode, the example project still exposes the resource /.well-known/oauth-authorization-server on the MCP server.
This should not be the case. This resource is exposed by the OAuth2 authorization server, not by the MCP server, no ?
According to the MCP specification, the MCP server should instead expose: /.well-known/oauth-protected-resource
(see: https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#protected-resource-metadata-discovery-requirements)
This resource is discovered by the client via the WWW-Authenticate header, which contains the URL of the MCP protected-resource metadata.
The JSON returned by this /.well-known/oauth-protected-resource endpoint must provide the base URL of the external authorization server.
Example response:
{
"resource": "http://localhost:3232/mcp",
"resource_name": "MCP Server",
"authorization_servers": [
"http://localhost:3001"
]
}
The client then uses this information to discover the authorization server metadata, as described in the spec:
https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#authorization-server-metadata-discovery
The spec allows several discovery patterns, such as:
-
OAuth 2.0 Authorization Server Metadata with path insertion:
https://auth.example.com/.well-known/oauth-authorization-server/tenant1 -
OpenID Connect Discovery 1.0 with path insertion:
https://auth.example.com/.well-known/openid-configuration/tenant1 -
OpenID Connect Discovery 1.0 with path appending:
https://auth.example.com/tenant1/.well-known/openid-configuration
This seems to be related to this topic on the inspector. Which seems to ignore the WWW-Authenticate header and make calls directly to the MCP server, expecting to deal with the authentication server.
To Reproduce
This issue can be observed by testing MCP clients + server that rely on this discovery mechanism.
For these clients, the current implementation does not work as expected.
Expected behavior
Add the /.well-known/oauth-protected-resource endpoint to the MCP server.
Remove the .well-known/oauth-authorization-server on the Mcp Server.Because it already displays this one by default.
Logs
If applicable, add logs to help explain your problem.
Additional context
Add any other context about the problem here.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la configuration des routes well-known du MCP server et examinez comment le mode EXTERNAL expose /.well-known/oauth-authorization-server. Comparez le comportement avec la MCP authorization specification liée et vérifiez le flux WWW-Authenticate. Le travail est terminé lorsque le MCP server expose /.well-known/oauth-protected-resource avec l’URL de l’authorization server externe et n’expose plus l’endpoint de métadonnées de l’authorization server.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- api, authentication
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 38/100