Skip to content

🔄 Migración de SSE a Streamable HTTP (MCP SDK 1.23.0)#66

Merged
JesusMaster merged 2 commits intomainfrom
dev-jesus
Dec 2, 2025
Merged

🔄 Migración de SSE a Streamable HTTP (MCP SDK 1.23.0)#66
JesusMaster merged 2 commits intomainfrom
dev-jesus

Conversation

@JesusMaster
Copy link
Owner

📋 Descripción

Esta PR migra el servidor de SSE (Server-Sent Events) deprecado a Streamable HTTP, siguiendo las mejoras del SDK de MCP versión 1.23.0. La implementación anterior utilizaba SSE y multiplexing que han sido deprecados en favor de la nueva arquitectura Streamable HTTP.

🔄 Cambios Principales

1. Actualización de Dependencias

  • ✅ Actualizado @modelcontextprotocol/sdk de ^1.17.4 a ^1.23.0
  • ✅ Actualizado zod de ^3.24.4 a ^3.25.0
  • ✅ Actualizado axios, body-parser, express y otras dependencias menores

2. Migración a Streamable HTTP Transport

  • 🔄 Reemplazado SSEServerTransport por StreamableHTTPServerTransport
  • ❌ Eliminado MultiplexingSSEServerTransport (deprecado)
  • ✅ Simplificación del servidor a solo dos endpoints: /sse y /messages

3. Refactorización de Routers

Se actualizó la forma de registrar tools en todos los routers para seguir la nueva API del SDK:

Antes:

server.tool('tool_name', 'description', schema, async (args) => { ... })

Después:

server.registerTool('tool_name', {
    description: 'description',
    inputSchema: schema
}, async (args, req) => { ... })

Archivos modificados:

  • src/features/issues/issues.router.ts
  • src/features/pullRequests/pullRequest.router.ts
  • src/features/repositories/repositories.router.ts

4. Sistema de Autenticación con Token por Request

  • ✅ Ahora cada request puede tener su propio GitHub token
  • ✅ El token se extrae del header Authorization y se pasa a través de req.requestInfo.headers.github_token
  • ✅ Actualizado authenticate middleware para inyectar el token en el request

Servicios actualizados:

  • src/features/issues/issues.service.ts
  • src/features/pullRequests/pullRequest.service.ts
  • src/features/repositories/repositories.service.ts
  • src/services/api.ts

5. Simplificación del Servidor (src/server.ts)

  • 📉 Reducción de ~375 líneas a ~50 líneas
  • ❌ Eliminado rate limiting complejo (se puede reimplementar si es necesario)
  • ❌ Eliminado manejo manual de sesiones SSE
  • ✅ Configuración CORS mejorada para MCP
  • ✅ Fix para el header Accept que requiere el SDK estricto

6. Limpieza del Main (src/main.ts)

  • ✅ Simplificación del shutdown handler
  • ❌ Eliminado closeAllSseConnections() (ya no necesario)
  • ✅ Código comentado para referencia futura

🔍 Archivos Impactados

Archivo Líneas Modificadas Tipo de Cambio
package.json +2, -2 Dependencias
package-lock.json +180, -82 Dependencias
src/server.ts +24, -349 Refactorización Mayor
src/main.ts +76, -18 Refactorización
src/features/*/*.router.ts +405, -334 Actualización API
src/features/*/*.service.ts +72, -72 Token por request
src/services/api.ts +13, -13 Token por request

✅ Testing

  • Probar endpoint /sse con cliente MCP
  • Probar endpoint /messages con diferentes tools
  • Verificar que el token de GitHub se pasa correctamente en cada request
  • Probar creación de issues, PRs, y operaciones de repositorio

📝 Notas Adicionales

  • El servidor ahora es más simple y sigue las mejores prácticas del MCP SDK 1.23.0
  • Se eliminó código legacy relacionado con SSE deprecado
  • La autenticación ahora permite múltiples tokens por sesión
  • Se mantiene compatibilidad con la API de GitHub existente

🔗 Referencias

  • MCP SDK Changelog
  • Commit: 6197f8e - "change connection type deprecated sse to streamable http"

@JesusMaster JesusMaster merged commit b07d44c into main Dec 2, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant