Verificador de endpoints MCP
Apúntalo a un servidor MCP remoto. Recorre la cadena de descubrimiento igual que lo hace un cliente de IA y nombra el paso que falló.
Esto se ejecuta desde tu navegador, así que está sujeto a
CORS. Un servidor que no envía Access-Control-Allow-Origin
bloqueará la petición y parecerá inalcanzable aunque esté sano. Eso ya es
información útil de por sí — algunos clientes también necesitan esas cabeceras —
pero no interpretes un fallo de CORS como prueba de que el servidor está roto.
Qué comprueba, y por qué importa cada paso
1. El desafío sin autenticar
Una petición sin autenticar debe devolver 401 con una cabecera
WWW-Authenticate que lleve resource_metadata.
Sin esa cabecera el cliente no tiene forma de descubrir dónde autenticarse y
falla con un error de conexión opaco. Es la razón más común de que un conector
se niegue a funcionar sin decir nada.
2. Metadatos del recurso protegido (RFC 9728)
El campo resource debe coincidir exactamente con el
URI canónico del servidor. Los clientes lo comparan de forma literal, así que una
barra final o un http frente a https es un fallo total
con un mensaje inútil.
3. Metadatos del servidor de autorización (RFC 8414)
Debe anunciar los endpoints de authorization, token y registration, y debe incluir
S256 en code_challenge_methods_supported. OAuth 2.1
exige PKCE y prohíbe el método plain; un servidor que ofrece
plain no cumple la especificación y algunos clientes lo rechazarán.
4. Transporte
Se espera que los conectores nuevos hablen Streamable HTTP. El antiguo transporte independiente HTTP+SSE está obsoleto y ya no se acepta para dar de alta conectores en el directorio.
Por qué construimos esto
Varven es en sí mismo un servidor MCP remoto, y dejar bien el handshake de OAuth nos llevó más tiempo que el motor de recuperación. El modo de fallo es brutal: el cliente solo informa de que no pudo conectar, sin indicar cuál de los siete pasos falló. Esto los recorre en orden y nombra el que se rompió.
Cómo se conecta Varven a Claude
Preguntas frecuentes
Mi servidor funciona en Claude pero aquí falla.
Casi seguro que es CORS. Los navegadores lo aplican; los clientes nativos no.
¿Necesito registro dinámico de clientes?
Si quieres que los clientes se conecten sin que los registres tú de antemano, sí. Sin eso, cada cliente necesita credenciales emitidas a mano.
¿A qué revisión de la especificación debo apuntar?
Apunta a la especificación de autorización vigente y cuenta con cambios — se ha revisado varias veces, y la migración de SSE a Streamable HTTP es lo bastante reciente como para que algunos clientes vayan por detrás.