Analiza la explicación del Codelab propuesto en el fichero time-line.md.
Genera un análisis de proyecto para los objetivos propuestos en el texto.
Crea un índice interno del sdk que deberemos modelizar con blockly en la carpeta mcp-ts-sdk.
Tómate tu tiempo para procesar la información y establece un plan de acción para ayudarme a completarlo.
Análisis del Proyecto: MCP con Blockly
Resumen del Codelab
El Codelab propone integrar el Model Context Protocol (MCP) de Anthropic con Blockly, creando bloques visuales que permitan modelar servidores y clientes MCP. Adicionalmente, se busca explorar la posibilidad de un generador para TypeScript desde estos bloques.
Objetivos del Proyecto
Objetivo Principal
- Crear una paleta de bloques Blockly que representen los componentes del protocolo MCP
Objetivos Secundarios
- Modelizar patrones comunes de servidores MCP encontrados en el directorio de la comunidad
- Aprovechar el nuevo SDK TypeScript de MCP para la implementación
- Posiblemente crear un generador TypeScript para Blockly (aunque se puede usar el generador de JavaScript existente)
Análisis del MCP TypeScript SDK
El SDK de TypeScript para MCP provee una estructura clara basada en tres conceptos principales:
Protocol
(clase base): Maneja la comunicación base del protocolo
- Client: Especializa Protocol según el rol
MCPClient
/MCPServer
: Ofrece API de alto nivel para casos de uso comunes
-
Entidades principales:
- Hosts, Clients y Servers
- Resources, Tools y Prompts
- Transport, Sampling y Roots
-
Niveles de abstracción:
- MCPServer: Interfaz de alto nivel para implementar servidores MCP
- Server: Implementación base que maneja comunicaciones específicas del protocolo
- Protocol: Abstracción base para la comunicación según el protocolo MCP
Basado en el análisis del contenido de la carpeta mcp-ts-sdk, podemos definir la siguiente estructura:
-
Clases Base
Protocol
(src/shared/protocol.ts): Base para comunicación
- Server (src/server/index.ts): Implementación base del servidor
- Client (src/client/index.ts): Implementación base del cliente
- McpServer (src/server/mcp.ts): API de alto nivel para servidores
McpClient
(src/client/index.ts): API de alto nivel para clientes
-
Transportes
StdioServerTransport
: Para comunicaciones stdio
StdioClientTransport
: Cliente para stdio
StreamableHTTPServerTransport
: Servidor HTTP con streaming
StreamableHTTPClientTransport
: Cliente HTTP con streaming
SSEServerTransport
: Servidor con Server-Sent Events (legado)
SSEClientTransport
: Cliente con SSE (legado)
-
Funcionalidades MCP
-
Recursos:
-
Herramientas:
-
Prompts:
-
Autenticación:
OAuthClientProvider
: Para integración OAuth
ProxyOAuthServerProvider
: Para proxy de autenticación
-
Tipos y Validación
- Uso extensivo de
zod
para validación de esquemas
- zodToJsonSchema: Conversión para documentación
-
Manejo de Errores
- McpError: Errores específicos del protocolo
-
Compatibilidad
- Soporte para protocolo anterior (2024-11-05)
- Transporte actual (2025-03-26)
Propuesta de estructura de Bloques MCP
La estructura de bloques debe reflejar los componentes principales del MCP:
Categorías de Bloques
-
Configuración y Setup
- Crear servidor/cliente MCP
- Configurar transportes (stdio, HTTP, etc.)
- Establecer conexiones
-
Recursos
- Definir recursos estáticos
- Definir plantillas de recursos
- Implementar callbacks de lectura
-
Herramientas
- Definir herramientas con o sin parámetros
- Implementar callbacks de herramientas
- Configurar anotaciones
-
Prompts
- Definir plantillas de prompt
- Configurar argumentos y validaciones
-
Notificaciones y Eventos
- Enviar notificaciones
- Manejar eventos del servidor/cliente
-
Integración OAuth
Plan de Acción
-
Fase 1: Configuración del Entorno
- Configurar el proyecto Blockly base
- Integrar el SDK de MCP como dependencia
-
Fase 2: Diseño de Bloques Básicos
- Crear bloques para la configuración de servidor/cliente
- Implementar bloques para transportes
-
Fase 3: Implementación de Bloques Funcionales
- Desarrollar bloques para recursos
- Crear bloques para herramientas
- Diseñar bloques para prompts
-
Fase 4: Desarrollo del Generador
- Extender el generador JavaScript para generar código TypeScript
- O crear un nuevo generador específico para TypeScript
-
Fase 5: Ejemplos y Patrones
- Crear ejemplos de patrones comunes (servidor simple, cliente, etc.)
- Documentar los patrones
-
Fase 6: Pruebas y Refinamiento
- Probar los bloques con ejemplos reales
- Refinar la API de bloques según los casos de uso
Desafíos Previstos
- Manejo de TypeScript: La falta de un generador oficial para TypeScript puede requerir trabajo adicional.
- Callbacks y Closures: La representación de funciones de callback en bloques puede ser compleja.
- Tipado: Mantener el tipado fuerte de TypeScript en el código generado será un desafío.
- Zod y Validación: Integrar los esquemas de validación de Zod con bloques podría ser complejo.
Próximos Pasos Recomendados
- Revisar más a fondo la estructura y ejemplos del SDK de MCP
- Crear un prototipo inicial con los bloques más básicos (server, client, transportation)
- Evaluar si extender el generador JavaScript o crear uno propio para TypeScript
- Estudiar los ejemplos incluidos en el SDK para identificar patrones comunes a modelizar
¿Deseas comenzar con alguna fase específica o necesitas más detalles sobre algún aspecto particular?