E1 · Ver las piezas
5 minCorre el bloque listar después de instalar el kit (clase 2, primer bloque).
Listo cuando: node listar.mjs → 2 ferramentas · 1 recurso · 1 prompt, con era: modern y saída: 0.
Clase 1 · 15 min
Antes de escribir código, separa las piezas. El server MCP ofrece tres cosas (tools, resources y prompts), el client vive dentro de la aplicación con el modelo, y el transport es solo el caño. En esta clase conectas un client al server del kit y ves cada pieza listada.
Comenzar la lección
Objetivo: separar tool, resource y prompt y decir quién es host, client, server y transport en tu servicio.
Haz clic en cada bloque.
División de control según la documentación del SDK oficial v2 (páginas Tools, Resources y Prompts), leída el 19/10/2026.
En el kit, un servicio ficticio de grupos de curso.
Una función que el modelo decide llamar a partir del nombre, la descripción y el esquema de entrada. Puede solo leer o puede cambiar algo en el mundo.
En el kit: buscar_turmas (solo lectura) y reservar_vaga (tiene consecuencias).
¿Hay un grupo de MCP con plazas?
Dato de solo lectura, identificado por una URI, que el cliente lista y adjunta como contexto. Quien decide leerlo es la aplicación, no el modelo.
En el kit: turmas://catalogo, el catálogo completo en JSON.
Un pedido listo, con argumentos, que el cliente muestra para que la persona lo elija (como un comando de barra o un ítem de menú).
En el kit: convite_turma, que arma el pedido de una invitación para un grupo.
Si cambia algo o depende de la pregunta del usuario, es una tool. Si es contexto estable que la aplicación puede adjuntar, es un resource. Si es un atajo que la persona dispara, es un prompt.
La mayoría de los servicios empieza solo con tools, y está bien.
La versión vigente del protocolo es la 2026-07-28 (página de versionado de MCP, leída el 19/10/2026). La anterior era la 2025-11-25.
Lo que más cambia para quien viene de 2025: ya no hay apretón de manos initialize ni sesión (Mcp-Session-Id); cada pedido lleva versión y capacidades en _meta; el cliente descubre el servidor con server/discover; y el servidor que necesita preguntarle algo al usuario devuelve input_required en vez de abrir un pedido propio. Roots, Sampling y Logging quedaron en desuso.
El SDK oficial que implementa esto es la línea v2 (@modelcontextprotocol/server y @modelcontextprotocol/client, 2.3.1, del 05/10/2026). El paquete antiguo @modelcontextprotocol/sdk (1.32.1) todavía habla la 2025-11-25: es el que vas a encontrar en la mayoría de los tutoriales.
Necesitas el kit instalado (clase 2, primer bloque). El cliente habla con el servidor en el mismo proceso, sin puerto.
cd ~/projetos/formacao-webmcp-mcp-v72/kit node listar.mjs; echo "saída: $?"
// listar.mjs — conecta un cliente MCP al servidor de turmas, en el mismo proceso (sin puerto),
// y muestra la anatomía: era del protocolo, ferramentas, recursos y prompts.
import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
import { createMcpHandler } from '@modelcontextprotocol/server';
import { createServer } from './servidor.mjs';
const handler = createMcpHandler(createServer);
const transporte = new StreamableHTTPClientTransport(new URL('http://teste.local/mcp'), {
fetch: (url, init) => handler.fetch(new Request(url, init))
});
// mode 'auto': pregunta server/discover; si el servidor es antiguo, cae en initialize.
const cliente = new Client({ name: 'listar', version: '1.0.0' }, { versionNegotiation: { mode: 'auto' } });
await cliente.connect(transporte);
const { tools } = await cliente.listTools();
const { resources } = await cliente.listResources();
const { prompts } = await cliente.listPrompts();
console.log(`era: ${cliente.getProtocolEra()}`);
for (const t of tools) console.log(`ferramenta: ${t.name} · readOnlyHint=${t.annotations?.readOnlyHint}`);
for (const r of resources) console.log(`recurso: ${r.uri}`);
for (const p of prompts) console.log(`prompt: ${p.name}`);
console.log(`${tools.length} ferramentas · ${resources.length} recurso · ${prompts.length} prompt`);
await cliente.close();
await handler.close();era: modern ferramenta: buscar_turmas · readOnlyHint=true ferramenta: reservar_vaga · readOnlyHint=false recurso: turmas://catalogo prompt: convite_turma 2 ferramentas · 1 recurso · 1 prompt saída: 0
era: modern significa que cliente y servidor acordaron la revisión 2026-07-28. Con mode: 'legacy' (el valor por defecto del cliente v2) caerían en el initialize de 2025.
Ensayo en el kit y el mapa de tu servicio.
Corre el bloque listar después de instalar el kit (clase 2, primer bloque).
Listo cuando: node listar.mjs → 2 ferramentas · 1 recurso · 1 prompt, con era: modern y saída: 0.
En un archivo mapa-mcp.md, enumera qué haría tu servicio como tool, como resource y como prompt. Marca cada tool como lectura o consecuencia.
Listo cuando: grep -c -E "leitura|consequência" mapa-mcp.md → al menos 3.
Pregunta 1 de 4
¿Quién decide llamar a una tool del MCP?competencia
Pregunta 2 de 4
El catálogo completo de grupos, en JSON, que la aplicación puede adjuntar como contexto, ¿qué es?competencia
turmas://catalogo) es un resource. Si dependiera de la pregunta del usuario, sería una tool.turmas://catalogo) es un resource. Si dependiera de la pregunta del usuario, sería una tool.Repasar: Las tres cosas que ofrece un servidorPregunta 3 de 4
¿Qué quitó del protocolo la revisión 2026-07-28?competencia
Mcp-Session-Id; entró server/discover.Mcp-Session-Id; entró server/discover.Repasar: Revisión 2026-07-28: lo que cambió, en una pantallaPregunta 4 de 4
Instalas @modelcontextprotocol/sdk 1.32.1 siguiendo un tutorial. ¿De qué revisión habla?
LATEST_PROTOCOL_VERSION = '2025-11-25'. La 2026-07-28 está en la línea v2 (@modelcontextprotocol/server 2.3.1).LATEST_PROTOCOL_VERSION = '2025-11-25'. La 2026-07-28 está en la línea v2 (@modelcontextprotocol/server 2.3.1).Repasar: Revisión 2026-07-28: lo que cambió, en una pantallaElige una alternativa. La explicación aparece después de tu intento.