mcp-distributed-sse-poc
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-distributed-sse-pocAdd 42 and 58"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PoC: Protocolo MCP Distribuido sobre HTTP/SSE (TypeScript)
Esta Prueba de Concepto (PoC) implementa la especificación del Model Context Protocol (MCP) en una arquitectura distribuida de red de 3 capas en Node.js y TypeScript, sin dependencias de LLMs externos. Demuestra el handshake, la negociación de capacidades, el descubrimiento dinámico de herramientas y la ejecución remota de herramientas mediante Server-Sent Events (SSE) y HTTP POST.
🏗 Arquitectura de las 3 Capas
┌─────────────────────────────────────────────────────────────────────────┐
│ CAPA 3: MCP HOST │
│ (src/host.ts) │
│ - Orquesta la aplicación cliente. │
│ - Controla el flujo secuencial: descubrimiento y llamadas a tools. │
└────────────────────────────────────┬────────────────────────────────────┘
│ (Invoca API del cliente)
┌────────────────────────────────────▼────────────────────────────────────┐
│ CAPA 2: MCP CLIENT │
│ (src/client.ts) │
│ - Implementa SSEClientTransport (@modelcontextprotocol/sdk). │
│ - Inicia GET /sse para handshake y recibe evento 'endpoint'. │
│ - Envía mensajes JSON-RPC (initialize, tools/list, tools/call) POST. │
│ - Recibe resultados JSON-RPC de forma asíncrona vía SSE stream. │
└────────────────────────────────────┬────────────────────────────────────┘
│ Red IP / HTTP (LAN, VPN o Internet)
│ GET /sse (Server -> Client stream)
│ POST /messages?sessionId=...
┌────────────────────────────────────▼────────────────────────────────────┐
│ CAPA 1: MCP SERVER │
│ (src/server.ts) │
│ - Servidor HTTP (Express) escuchando en 0.0.0.0:3001 │
│ - Implementa SSEServerTransport (@modelcontextprotocol/sdk). │
│ - Expone endpoints /sse (stream) y /messages (POST). │
│ - Valida parámetros estrictos con Zod. │
│ - Herramientas: `calculate_loan_amortization` y │
│ `analyze_investment_projection`. │
└─────────────────────────────────────────────────────────────────────────┘Related MCP server: MCP Simple Server
🛠 Herramientas Disponibles para Razonamiento del Agente
calculate_loan_amortization:Propósito: Evalúa la deuda financiera y el impacto de prepagos a capital (sistema francés).
Parámetros:
principal(número > 0): Monto total financiado.annualInterestRate(número > 0): Tasa de interés anual (%).termMonths(entero > 0): Plazo en meses.extraMonthlyPayment(número opcional): Pago mensual adicional a capital.
Métricas devueltas: Cuota mensual regular, desembolso total, intereses pagados, meses y dinero ahorrados por aceleración.
analyze_investment_projection:Propósito: Evalúa crecimiento compuesto de patrimonio, poder adquisitivo real deflactado y escenarios por riesgo.
Parámetros:
initialCapital(número >= 0): Capital inicial.monthlyContribution(número >= 0): Aportación mensual.annualReturnRate(número): Rendimiento nominal anual estimado (%).timeHorizonYears(entero > 0): Horizonte temporal en años.annualInflationRate(número opcional, default: 4.0%): Inflación estimada.riskProfile("conservative"|"moderate"|"aggressive"): Perfil de volatilidad.
Métricas devueltas: Capital nominal final, ganancias netas nominales, poder de compra real deflactado, escenarios pesimista/esperado/optimista y tasa real anual.
🧠 ¿Cómo probar el razonamiento de un Agente con estas herramientas?
Puedes plantearle al agente problemas de toma de decisiones como:
"Tengo $50,000 libres en el banco y un crédito automotriz de $250,000 con tasa del 12.5% a 48 meses. ¿Me conviene aportar esos $50,000 a capital para reducir mi deuda o invertirlos a 4 años con un rendimiento estimado del 11% anual moderado e inflación del 4%? Analiza ambas opciones con las herramientas disponibles y dame tu recomendación fundamentada."
El agente deberá:
Identificar ambas herramientas en el catálogo (
tools/list).Mapear y ejecutar
calculate_loan_amortizationpara medir el costo de los intereses.Mapear y ejecutar
analyze_investment_projectionpara calcular el rendimiento real.Contrastar el costo de oportunidad financiero y formular una conclusión razonada.
🔄 Flujo Detallado de Red y Handshake MCP
Apertura de Canal SSE:
El cliente realiza una solicitud HTTP
GET /sse.El servidor responde con
Content-Type: text/event-streamy mantiene abierta la conexión.El servidor genera un
sessionId(UUID) único y emite inmediatamente un evento SSE llamadoendpoint:event: endpoint data: /messages?sessionId=df193f22-9b80-4297-9039-2e818054826d
Handshake de Inicialización:
El cliente recibe el endpoint de retorno y envía una solicitud JSON-RPC
initializevíaPOST /messages?sessionId=....El servidor procesa la inicialización y envía la respuesta JSON-RPC con sus capacidades y versión a través del stream SSE.
El cliente confirma enviando la notificación
notifications/initializedvía POST.
Descubrimiento y Ejecución de Herramientas:
tools/list: El cliente envíaPOST /messages?sessionId=...con el métodotools/list. El servidor responde por SSE con el catálogo y los esquemas Zod convertidos a JSON Schema.tools/call: El cliente envíaPOST /messages?sessionId=...con el métodotools/call, el nombre de la herramienta y sus argumentos. El servidor ejecuta la lógica y devuelve el resultado enriquecido vía SSE.
Desconexión Limpia:
El cliente cierra el canal SSE; el servidor detecta el evento
close, elimina la sesión de memoria y libera los recursos.
🚀 Requisitos Previos
Node.js v18 o superior.
Dependencias instaladas:
npm install
🖥 Instrucciones de Ejecución
Opción A: Prueba Local (Misma máquina, dos terminales)
Terminal 1 (Servidor MCP):
npm run start:serverEl servidor quedará a la espera en http://0.0.0.0:3001.
Terminal 2 (Host MCP):
npm run start:hostPor defecto se conectará a http://localhost:3001/sse.
Opción B: Entorno Distribuido en Red (Dos máquinas distintas)
En la Máquina Servidor (ej. IP
192.168.1.50):npm run start:server(Asegúrate de que el puerto
3001no esté bloqueado por el firewall).En la Máquina Cliente / Host: Puedes indicar la URL mediante argumento de línea de comandos o variable de entorno:
Vía argumento CLI:
npm run start:host -- http://192.168.1.50:3001/sseVía variable de entorno:
SERVER_URL=http://192.168.1.50:3001/sse npm run start:host
This server cannot be deployed
Maintenance
Related MCP Connectors
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
Remote MCP server exposing SMI Aware tools, resources, and skills over Streamable HTTP.
MCP server exposing the Backtest360 engine API as tools for AI agents.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceProvides basic arithmetic calculation tools through an HTTP-accessible MCP server. Supports mathematical operations like addition with streamable responses for integration with MCP clients.-
- FlicenseNot gradedqualityDmaintenanceA minimal reference implementation of an MCP server with two basic math tools (add and multiply), designed as a starting point for learning MCP protocol and deploying remote servers to cloud platforms.1-
- AlicenseNot gradedqualityDmaintenanceEnables basic arithmetic operations (add, subtract, multiply, divide, modulo) via natural language, with a FastMCP-based server and client for exploring MCP tool calling.MIT
- FlicenseNot gradedqualityDmaintenanceA stateless MCP server that exposes arithmetic operations (add, subtract, multiply, divide) as tools over HTTP, enabling AI assistants to perform basic calculations conversationally.-