E1 · Kit instalado
10 minRode o bloco de clonar e instalar.
Pronto quando: npx playwright install chromium; echo "saída: $?" → saída: 0, e ls pagina/vendor mostra webmcp-polyfill.js.
Aula 2 · 18 min
A mesma reserva pode chegar pela pessoa no formulário, por um agente dentro do navegador (WebMCP) ou por um agente fora dele (MCP). Se cada caminho tiver a sua cópia da regra, elas divergem. Nesta aula a regra mora num arquivo só, e um script prova que as três superfícies respondem igual e pedem a pessoa.
Começar a aula
Objetivo: servir a mesma ação pela tela, pelo WebMCP e pelo MCP com uma regra só, e provar que as três respondem igual e pedem a pessoa.
Clique em cada bloco.
Em produção a regra e o estado ficam no backend; no kit, a regra é o mesmo arquivo e cada superfície tem a sua memória.
Não é tudo nas três. Decida pela pergunta certa.
Toda ação que a pessoa faz continua no HTML, acessível e rotulado.
É o fallback de tudo: sem ele, desligar uma ferramenta (aula 7) tira a ação do ar.
Quando o agente precisa do que está na página: filtro aberto, item na tela, a pessoa ali para confirmar.
Só existe com a API (origin trial ou flag); detecção e fallback sempre.
Quando o agente trabalha fora do navegador: assistente no terminal, automação, outro serviço.
Autorização real (OAuth, escopo) é do servidor: curso 1, aula 6.
Regra, estado e autorização ficam no backend, nunca só na página.
As três superfícies são portas finas que chamam a mesma regra.
Se mudar a regra exige editar dois arquivos, ela está duplicada.
Versões fixadas em 19/10/2026: Playwright 1.64.0 (traz o Chromium), polyfill 6.0.3, SDK MCP 2.3.1.
git clone -q https://github.com/inematds/formacao-webmcp-expert-v72 ~/projetos/formacao-webmcp-expert-v72 cd ~/projetos/formacao-webmcp-expert-v72/kit npm ci --no-audit --no-fund 2>&1 | tail -2 npx playwright install chromium; echo "saída: $?"
added 18 packages in 799ms saída: 0
O postinstall copia o polyfill para pagina/vendor/, só para o ensaio. Se o Chromium já estiver baixado, o install não imprime nada.
Trechos do kit: a página e o servidor importam o mesmo oficinas.mjs.
import { criarAgenda } from './oficinas.mjs';
import { catalogo, liberadas, comRegistro, iniciarWebMCP } from './ferramentas.mjs';import { criarAgenda, TEMAS } from '../pagina/oficinas.mjs';// O estado do serviço fica FORA da fábrica: o protocolo não guarda sessão, o seu serviço guarda o dado. export const agenda = criarAgenda();
Busca pelas três portas, depois três reservas, cada uma com o seu jeito de pedir a pessoa. Cliente MCP no mesmo processo, sem porta.
cd ~/projetos/formacao-webmcp-expert-v72/kit node scripts/superficies.mjs nativo; echo "saída: $?"
== Chromium 156.0.8078.4 (Playwright) · modo: nativo · MCP 2026-07-28 (SDK 2.3.1)
buscar_oficinas {"tema":"html","apenasComVaga":true}
html → of-101
webmcp → of-101
mcp → of-101
reservar_vaga of-101
html → painel Confirmar na página → reservado
webmcp → consequentialHint + Confirmar na página → reservado
mcp → MRTR: o cliente perguntou "Reservar "HTML semântico na prática" (2026-11-04) para Duda?" → reservado
SUPERFÍCIES: 3/3 iguais na busca · 3/3 reservas esperaram a pessoa
saída: 0No MCP, a 1ª volta da chamada devolve input_required; o cliente pergunta ao usuário e repete a chamada (MRTR). O texto da pergunta vem do servidor.
html → of-101 webmcp → of-101 mcp → of-101,of-102 SUPERFÍCIES: 2/3 iguais na busca · 3/3 reservas esperaram a pessoa saída: 1
Alguém reescreveu o filtro no servidor "para não depender da página" e esqueceu o apenasComVaga. O MCP passa a oferecer of-102, que não tem vaga. A prova pega e sai com 1.
Numa cópia descartável do kit (scripts/copia.sh): o kit não muda.
cd ~/projetos/formacao-webmcp-expert-v72/kit
E=$(bash scripts/copia.sh a2)
# o erro comum: copiar a regra à mão no servidor (e esquecer o filtro de vaga)
sed -i 's/const oficinas = agenda.buscar(input);/const oficinas = agenda.buscar({}).filter(o => !input.tema || o.tema === input.tema);/' $E/servidor/mcp.mjs
cd $E && node scripts/superficies.mjs nativo | grep -E "→ of|SUPERF"; echo "saída: ${PIPESTATUS[0]}"Instalar, provar a equivalência e ver a divergência ser pega. Cada exercício termina num pronto quando.
Rode o bloco de clonar e instalar.
Pronto quando: npx playwright install chromium; echo "saída: $?" → saída: 0, e ls pagina/vendor mostra webmcp-polyfill.js.
Rode o bloco das três superfícies no modo nativo (e, se quiser, no polyfill).
Pronto quando: node scripts/superficies.mjs nativo; echo "saída: $?" → SUPERFÍCIES: 3/3 iguais na busca · 3/3 reservas esperaram a pessoa e saída: 0.
Rode o ensaio da regra copiada à mão no servidor.
Pronto quando: O bloco imprime mcp → of-101,of-102, SUPERFÍCIES: 2/3 iguais na busca e saída: 1.
Escolha uma ação do seu site e escreva onde mora a regra e por quais portas ela sai (tela, WebMCP, MCP), com o jeito de pedir a pessoa em cada uma.
Pronto quando: O arquivo superficies-[seu site].md tem a ação, o caminho do arquivo da regra (um só) e uma linha por porta com a confirmação.
A explicação aparece depois da resposta.
Pergunta 1 de 4
Por que o servidor MCP do kit importa ../pagina/oficinas.mjs em vez de ter o próprio filtro?
Pergunta 2 de 4
Como a reserva pelo MCP pede a pessoa na revisão 2026-07-28?
Pergunta 3 de 4
Qual ação NÃO deve sair só pelo WebMCP?
Pergunta 4 de 4
superficies.mjs deu 3/3 na busca. O que ainda NÃO está provado?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.