Analiza el Tutorial Proyecto nº1, identifica todos los nodos que intervienen y crear una tabla indicando toolbox y seccion.
Crea un diagrama markdown que permita comprender qué solución final se visualizará en blockly cuando creemos los nodos. Pon especial interés en predecir cómo será el programa javascript que implement mcp.
A continuación presento una tabla con todos los nodos que intervienen en el Servidor de Eco MCP, clasificados por toolbox y sección:
Nodo | Toolbox | Sección | Tipo de Bloque |
---|---|---|---|
Crear Servidor MCP | setup.js | MCP Setup | mcp_create_server |
Configurar Transporte Stdio | setup.js | MCP Setup | mcp_stdio_transport_server |
Conectar | setup.js | MCP Setup | mcp_connect |
Definir Recurso Estático | resources.js | MCP Recursos | mcp_define_resource_static |
Función callback (recurso) | resources.js | MCP Recursos | mcp_resource_callback |
Retornar (recurso) | resources.js | MCP Recursos | mcp_return_resource_content |
Definir Herramienta | tools.js | MCP Herramientas | mcp_define_tool |
Descripción de herramienta | tools.js | MCP Herramientas | mcp_tool_description |
Parámetros de herramienta | tools.js | MCP Herramientas | mcp_tool_parameter |
Función callback (herramienta) | tools.js | MCP Herramientas | mcp_tool_callback |
Retornar (herramienta) | tools.js | MCP Herramientas | mcp_return_tool_response |
Obtener parámetro | tools.js | MCP Herramientas | mcp_get_parameter_value |
Unir textos | (común) | Text | text_join |
┌─────────────────────────────────────────────────────────────────────────┐
│ [Crear Servidor MCP] │
│ nombre: "Servidor Eco" │
│ versión: "1.0.0" │
│ [asignar a variable: servidor] │
└───────────────────────────────┬─────────────────────────────────────────┘
│
┌───────────────────────────────▼─────────────────────────────────────────┐
│ [Configurar Transporte Stdio] │
│ [asignar a variable: transporte] │
└───────────────────────────────┬─────────────────────────────────────────┘
│
┌───────────────────────────────▼─────────────────────────────────────────┐
│ [Conectar] │
│ servidor: servidor │
│ transporte: transporte │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ [Definir Recurso Estático] │
│ nombre: "info" │
│ uri: "info://server" │
│ │
│ [Función callback] │
│ [Retornar] │
│ [crear objeto Contenido de Recurso] │
│ uri: uri │
│ texto: "Servidor eco MCP v1.0" │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ [Definir Herramienta] │
│ nombre: "eco" │
│ [descripción: "Repite el mensaje enviado"] │
│ │
│ [Parámetros] │
│ mensaje: string │
│ │
│ [Función callback] │
│ [Retornar] │
│ [crear objeto Respuesta de Herramienta] │
│ tipo: "texto" │
│ texto: [unir "El servidor dice: " [obtener parámetro mensaje]] │
└─────────────────────────────────────────────────────────────────────────┘
// Importar el SDK de MCP
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
// Crear el servidor MCP
const servidor = new McpServer({
name: "Servidor Eco",
version: "1.0.0"
});
// Configurar el transporte stdio
const transporte = new StdioServerTransport();
// Definir un recurso estático
servidor.resource(
"info",
"info://server",
async (uri) => {
return {
contents: [
{
uri: uri.toString(),
text: "Servidor eco MCP v1.0"
}
]
};
}
);
// Definir una herramienta que repite mensajes
servidor.tool(
"eco",
"Repite el mensaje enviado",
{
mensaje: z.string()
},
async ({ mensaje }) => {
return {
content: [
{
type: "text",
text: "El servidor dice: " + mensaje
}
]
};
}
);
// Conectar el servidor al transporte
(async () => {
try {
await servidor.connect(transporte);
console.log("Servidor MCP de eco iniciado y listo para recibir mensajes");
} catch (error) {
console.error("Error al iniciar el servidor:", error);
process.exit(1);
}
})();
Este es un ejemplo minimalista pero completo que muestra el flujo básico de un servidor MCP. Los clientes pueden:
La implementación es sencilla pero demuestra los conceptos principales: configuración, transporte, recursos y herramientas.