Plain HTTP 403 without `WWW-Authenticate` starts OAuth discovery in the Inspector web client
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 68/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
- Área
- authentication, frontend
Línea de trabajo
Comienza localizando parseAuthChallengeFromResponse() en el cliente web de Inspector y revisando las pruebas del flujo de autorización relacionadas con el manejo de 403. Reproduce el caso de regresión específico para un 403 sin WWW-Authenticate y, después, verifica que siga siendo una respuesta MCP ordinaria, mientras que los desafíos reales de 401 o de alcance insuficiente sigan activando el flujo OAuth existente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Which version line?
v2 — current (@modelcontextprotocol/inspector@latest)
Which client?
Web
Inspector version
2.7.0 (also tested against 2.8.0 source code)
Node version
v26.5.0
Operating system (and browser, for the web client)
macOS 27.0, Chrome 153.0.8010.54
Transport
Streamable HTTP
MCP server under inspection
A disposable local Soklet MCP server using Streamable HTTP and the modern 2026-07-28 protocol. Soklet is a Java MCP server under active development. Inspector connects to http://127.0.0.1:/mcp with a valid static bearer credential. The server permits Apps catalog reads and tool calls, but intentionally denies subscriptions/listen with HTTP 403 and no WWW-Authenticate header. It has no OAuth authorization server. The port and credential are temporary.
Steps to reproduce
- Connect Inspector’s web client to the server above using Streamable HTTP, the modern protocol, and the valid bearer credential.
- Open the Apps catalog and select the app. Its catalog data renders, and a refresh succeeds.
- Inspector automatically requests subscriptions/listen. The server returns HTTP 403 without WWW-Authenticate.
- Observe Inspector attempt OAuth discovery and client registration despite the absence of an OAuth challenge.
Expected behavior
Treat this response as an ordinary denial of that operation. Preserve the 403 response for the MCP caller and do not start OAuth discovery. A genuine 401 challenge or a 403 with WWW-Authenticate: Bearer error="insufficient_scope" should still follow Inspector’s existing authorization flow.
Actual behavior
Inspector treats the plain 403 as an OAuth challenge and attempts protected-resource metadata discovery, authorization-server discovery, and client registration. The app itself rendered and refreshed, but this unsolicited OAuth recovery prevents the full Apps host check from passing.
Logs, errors, or screenshots
Sanitized observation from the Inspector 2.7.0 web run: a valid credential was accepted; subscriptions/listen received HTTP 403 with no WWW-Authenticate; Inspector then requested OAuth well-known endpoints and /register. No browser screenshot was captured. The credential and temporary port are omitted.
A focused check of Inspector 2.8.0 source also shows parseAuthChallengeFromResponse() classifying a 403 response without WWW-Authenticate as reason: "unauthorized".
Already prototyped a fix?
Yes. We tested a local change against clean Inspector 2.8.0 source so a 403 without WWW-Authenticate is left as a normal response. Three focused regression tests failed before the change and passed after it; the relevant test suite passed 65/65, as did the TypeScript build and targeted formatting and lint checks. This is an unpublished local prototype. The exact user message authorizing the approach was “Let's go with your recommended approach then.” No before/after UI screenshots were captured; the before/after evidence is the test results.
Before you submit
- I searched existing issues and this is not a duplicate.
- This is not a security vulnerability report (those go through the private advisory process).
- Lenguaje dominante
- TypeScript
- Estrellas
- 11k
- Forks
- 1.5k
- Merge medio
- 5 h 18 min
- PR fusionados (30 d)
- 130
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de modelcontextprotocol/inspector
-
chore dependencies v2
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
modelcontextprotocol/inspector#2522 ·
Los mantenedores suelen responder en 1 día
-
enhancement v2
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
modelcontextprotocol/inspector#2438 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
chore dependencies v2
Dificultad 3/5 1-2 días Aptitud para principiantes 75/100
modelcontextprotocol/inspector#2521 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 62/100
modelcontextprotocol/inspector#2518 ·
Los mantenedores suelen responder en 1 día
-
bug v2
Dificultad 3/5 1-2 días Aptitud para principiantes 78/100
modelcontextprotocol/inspector#2517 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de modelcontextprotocol/inspector
Issues similares
-
refactor
Dificultad 2/5 Medio día Aptitud para principiantes 84/100
Los mantenedores suelen responder en 5 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
OHDSI/Data2Evidence#3450 ·
Los mantenedores suelen responder en 2 días
-
e2e-failure ready-to-code
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
redhat-developer/rhdh-plugin-export-overlays#4011 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
automation missing-model model-sync provider:ofox
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
anomalyco/models.dev#8421 ·
Los mantenedores suelen responder en 1 día
-
SlackAdapter and TelegramAdapter are not assignable to Adapter under exactOptionalPropertyTypesAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día