Error
MCP OAuth: WWW-Authenticate has no scope parameter
Against MCP 2026-07-28 · verified 10 August 2026
The error
WWW-Authenticate has no scope parameter6 of the 16 real MCP servers we probed on 2026-08-11 tripped MCP-AUT-006. That is a snapshot of hand-picked public servers, not a random sample of the ecosystem — it shows the failure is common in practice, not that a given percentage of all servers have it.
What causes it
When an MCP server requires authorization, it answers with 401 and a `WWW-Authenticate` header that bootstraps the whole flow. The `resource_metadata` parameter points at Protected Resource Metadata; the `scope` parameter says which scopes this resource actually wants.
Omitting `scope` is not fatal — the flow can still complete — which is exactly why it survives review. The cost lands on the client and the end user: with nothing to go on, a client either requests a broad scope set, producing a consent screen that asks for far more than the tool needs, or requests a minimal one and gets a second 401 after the user has already been through an authorization round trip.
This is a SHOULD-level problem, not a MUST. The validator reports it as a warning rather than a failure, and it will not stop a build unless you ask it to.
How to fix it
The fix
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="mcp",
resource_metadata="https://mcp.example.com/.well-known/oauth-protected-resource",
scope="mcp:tools mcp:resources"The fix
The fix
Rules involved
Each of these is checked against a live server, and each links to the exact sentence of the specification it comes from.
| Rule | What we check | Level | If it fails |
|---|---|---|---|
| MCP-AUT-006 | WWW-Authenticate includes a scope parameter | SHOULD | warn |
| MCP-AUT-001 | Unauthenticated request returns 401 with WWW-Authenticate resource_metadata | MUST | fail |
| MCP-AUT-003 | PRM resource equals the canonical server URI | MUST | fail |
FAQ
Frequently asked
What should the WWW-Authenticate header contain for an MCP server?
At minimum a Bearer challenge and a resource_metadata parameter pointing at your Protected Resource Metadata document, so the client can discover the authorization server. It should also carry a scope parameter naming the scopes required for the resource that was refused, so the client does not have to guess.
Is a missing scope parameter a spec violation?
It is a SHOULD, not a MUST — so the validator reports it as a warning rather than a failure, and it will not fail your build unless you pass --fail-on warn. The flow still completes; the cost is a worse consent screen or an extra round trip.
What happens if a client guesses the wrong scopes?
One of two things. Guessing too broadly produces a consent screen asking for more access than the tool needs, which users refuse. Guessing too narrowly means the token comes back without sufficient scope and the next request is refused again — after the user has already completed an authorization round trip.
Check this against your own server
Point the validator at a live MCP server and it reports every rule on this page as pass, warn or fail — each linked to the exact spec sentence it comes from.
Validate a server →