E1 · Ver as peças
5 minRode o bloco listar depois de instalar o kit (aula 2, primeiro bloco).
Pronto quando: node listar.mjs → 2 ferramentas · 1 recurso · 1 prompt, com era: modern e saída: 0.
Aula 1 · 15 min
Antes de escrever código, separe as peças. O servidor MCP oferece três coisas (ferramentas, recursos e prompts), o cliente vive dentro do aplicativo com o modelo, e o transporte é só o cano. Nesta aula você liga um cliente ao servidor do kit e vê cada peça listada.
Começar a aula
Objetivo: separar ferramenta, recurso e prompt e dizer quem é host, cliente, servidor e transporte no seu serviço.
Clique em cada bloco.
Divisão de controle conforme a documentação do SDK oficial v2 (páginas Tools, Resources e Prompts), lida em 19/10/2026.
No kit, um serviço fictício de turmas de curso.
Uma função que o modelo decide chamar a partir do nome, da descrição e do esquema de entrada. Pode só ler ou pode mudar algo no mundo.
No kit: buscar_turmas (só leitura) e reservar_vaga (tem consequência).
Tem turma de MCP com vaga?
Dado só de leitura, identificado por uma URI, que o cliente lista e anexa como contexto. Quem decide ler é o aplicativo, não o modelo.
No kit: turmas://catalogo, o catálogo inteiro em JSON.
Um pedido pronto, com argumentos, que o cliente mostra para a pessoa escolher (como um comando de barra ou item de menu).
No kit: convite_turma, que monta o pedido de um convite para uma turma.
Se muda algo ou depende da pergunta do usuário, é ferramenta. Se é contexto estável que o aplicativo pode anexar, é recurso. Se é um atalho que a pessoa dispara, é prompt.
A maior parte dos serviços começa só com ferramentas, e tudo bem.
A versão vigente do protocolo é a 2026-07-28 (página de versionamento do MCP, lida em 19/10/2026). A anterior era a 2025-11-25.
O que mais muda para quem vem de 2025: não há mais aperto de mão initialize nem sessão (Mcp-Session-Id); cada pedido leva versão e capacidades em _meta; o cliente descobre o servidor com server/discover; e o servidor que precisa perguntar algo ao usuário devolve input_required em vez de abrir um pedido próprio. Roots, Sampling e Logging foram descontinuados.
O SDK oficial que implementa isso é a linha v2 (@modelcontextprotocol/server e @modelcontextprotocol/client, 2.3.1, de 05/10/2026). O pacote antigo @modelcontextprotocol/sdk (1.32.1) ainda fala a 2025-11-25: é o que você vai achar na maioria dos tutoriais.
Precisa do kit instalado (aula 2, primeiro bloco). O cliente fala com o servidor no mesmo processo, sem porta.
cd ~/projetos/formacao-webmcp-mcp-v72/kit node listar.mjs; echo "saída: $?"
// listar.mjs — liga um cliente MCP ao servidor de turmas, no mesmo processo (sem porta),
// e mostra a anatomia: era do protocolo, ferramentas, recursos e 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': pergunta server/discover; se o servidor for antigo, cai no 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 quer dizer que cliente e servidor combinaram a revisão 2026-07-28. Com mode: 'legacy' (o padrão do cliente v2) eles cairiam no initialize de 2025.
Ensaio no kit e o mapa do seu serviço.
Rode o bloco listar depois de instalar o kit (aula 2, primeiro bloco).
Pronto quando: node listar.mjs → 2 ferramentas · 1 recurso · 1 prompt, com era: modern e saída: 0.
Num arquivo mapa-mcp.md, liste o que o seu serviço faria como ferramenta, como recurso e como prompt. Marque cada ferramenta como leitura ou consequência.
Pronto quando: grep -c -E "leitura|consequência" mapa-mcp.md → pelo menos 3.
Pergunta 1 de 4
Quem decide chamar uma ferramenta MCP?competência
Pergunta 2 de 4
O catálogo inteiro de turmas, em JSON, que o aplicativo pode anexar como contexto, é o quê?competência
turmas://catalogo) é recurso. Se dependesse da pergunta do usuário, seria ferramenta.turmas://catalogo) é recurso. Se dependesse da pergunta do usuário, seria ferramenta.Rever: As três coisas que um servidor oferecePergunta 3 de 4
O que a revisão 2026-07-28 tirou do protocolo?competência
Mcp-Session-Id; entrou server/discover.Mcp-Session-Id; entrou server/discover.Rever: Revisão 2026-07-28: o que mudou em uma telaPergunta 4 de 4
Você instala @modelcontextprotocol/sdk 1.32.1 seguindo um tutorial. Que revisão ele fala?
LATEST_PROTOCOL_VERSION = '2025-11-25'. A 2026-07-28 está na linha v2 (@modelcontextprotocol/server 2.3.1).LATEST_PROTOCOL_VERSION = '2025-11-25'. A 2026-07-28 está na linha v2 (@modelcontextprotocol/server 2.3.1).Rever: Revisão 2026-07-28: o que mudou em uma telaEscolha uma alternativa. A explicação aparece depois da sua tentativa.