WebMCP na prática com document.modelContext
Em setembro de 2026, o WebMCP registra ferramentas por document.modelContext.registerTool, e o local antigo, navigator.modelContext, está depreciado no Chrome 150. Fora da flag de teste, o Chrome só expõe a API em sites com o token do origin trial, que vai do Chrome 149 ao 156. A implementação que eu tinha feito em 5 de setembro usava só o local antigo e não tinha token, então nenhuma ferramenta chegava a ser registrada para um visitante comum. Corrigi as duas coisas em 25 de setembro e deixei as ferramentas marcadas como somente leitura.
Principais pontos
- O rascunho da especificação WebMCP, do grupo comunitário Web Machine Learning do W3C, define modelContext como atributo de Document, em contexto seguro.
- Pela mesma especificação, registerTool recebe a ferramenta e um objeto de opções com signal, e devolve uma Promise.
- O Chrome abriu o origin trial do WebMCP no Chrome 149, com anúncio publicado em 9 de junho de 2026.
- A anotação readOnlyHint da especificação indica que a ferramenta não muda estado.
- Em 25 de setembro de 2026, o primeiro resultado em português para "webmcp como implementar registerTool" ainda ensinava navigator.modelContext.
Onde a API mora agora?
Em setembro de 2026, as ferramentas WebMCP são registradas em document.modelContext, e não mais em navigator.modelContext. O rascunho da especificação define modelContext como atributo de Document, exposto só em contexto seguro, com três métodos: registerTool, getTools e executeTool. O local antigo, no navigator, está depreciado desde o Chrome 150, segundo a leitura de quem acompanha a especificação, e não aparece mais no texto atual.
A assinatura também mudou em relação às primeiras demonstrações. O registerTool recebe a ferramenta e um objeto de opções, onde vai o signal de um AbortController para desregistrar, e devolve uma Promise. A ferramenta tem nome, descrição, inputSchema, a função execute e, agora, annotations, com dicas como readOnlyHint e consequentialHint.
O registerTool recebe a ferramenta e um objeto de opções, onde vai o signal de um AbortController para desregistrar, e devolve uma Promise.
Lucas Ferraz, especialista em SEO
const mc = document.modelContext || navigator.modelContext;
if (mc && typeof mc.registerTool === 'function') {
const ctrl = new AbortController();
mc.registerTool({
name: 'gerar_url_amigavel',
description: 'Converte um título em slug de URL amigável.',
inputSchema: { type: 'object', properties: { texto: { type: 'string' } }, required: ['texto'] },
annotations: { readOnlyHint: true },
execute: async ({ texto }) => ({ content: [{ type: 'text', text: slugify(texto) }] })
}, { signal: ctrl.signal }).catch(() => {});
}
O fallback para navigator.modelContext cobre os builds que ainda expõem o local antigo. Quando o Chrome remover o alias, a primeira condição basta.
O que estava errado no meu site?
A implementação que publiquei em 5 de setembro de 2026 checava só navigator.modelContext e não tinha token de origin trial, então nenhuma ferramenta era registrada para um visitante comum. O script fazia feature detection e ficava inerte quando a API não existia, o que é o comportamento certo. O problema é que ele procurava a API no lugar antigo, e no Chrome estável a API só aparece com o token do trial. Duas condições, as duas falhando em silêncio.
Encontrei o erro ao preparar este texto, lendo a especificação atual contra o código. Três ajustes entraram em 25 de setembro. O script passou a procurar primeiro em document.modelContext. O registerTool passou a receber o signal no objeto de opções, como a especificação define. E o tema ganhou a saída da meta tag de origin trial, que imprime o token quando ele estiver configurado.
| Ponto | Até 25/09/2026 | Depois |
|---|---|---|
| Onde procura a API | navigator.modelContext | document.modelContext, com fallback |
| Token de origin trial | ausente | meta tag, quando o token existir |
| signal | dentro da ferramenta | no objeto de opções do registerTool |
| Anotação de leitura | ausente | readOnlyHint nas cinco ferramentas |
A busca mostra que o desencontro não é só meu. Em 25 de setembro, o primeiro resultado em português para "webmcp como implementar registerTool" era um tutorial de 17 de setembro que ainda ensinava navigator.modelContext.
O token que liga a API
Fora da flag de teste, o Chrome só expõe o WebMCP em origens registradas no origin trial, que vai do Chrome 149 ao 156. O registro é feito no painel de origin trials do Chrome, para o domínio, e devolve um token. O token vai na página como meta tag http-equiv origin-trial, ou no cabeçalho HTTP Origin-Trial. Para desenvolver, a flag chrome://flags/#enable-webmcp-testing liga a API só na sua máquina.
Como a página que carrega o token pode ficar em cache na CDN, prefiro a meta tag no HTML a um cabeçalho montado por requisição. O HTML é igual para todos os visitantes, e o token também. Quando o trial terminar, o token para de valer e a API some, sem quebrar o site, porque o script continua fazendo feature detection.
Quais ferramentas publiquei?
As cinco ferramentas do site são de leitura ou de navegação, e nenhuma envia dado nem muda estado. Três delas levam a páginas do site: buscar conteúdo, abrir um serviço e ir para o pedido de orçamento. Duas devolvem resultado: gerar um slug de URL, calculado no próprio navegador, e testar a prontidão de um site para IA, que chama a mesma rota pública da ferramenta gratuita. Uma sexta, que só existe na página de contato, preenche o formulário e pede que a pessoa revise e envie.
A regra vem da própria orientação de segurança do Chrome e da natureza da API. A ferramenta roda na página, com a sessão de quem está navegando. Um agente que leu conteúdo malicioso pode chamar uma ferramenta legítima com um pedido falso. Por isso só publico o que um humano não se incomodaria de ver sendo chamado sem aviso, e marco com readOnlyHint o que não muda nada.
Experimento, não canal
O WebMCP ainda é um experimento: a API funciona, mas em setembro de 2026 não encontrei um agente de uso amplo que chame essas ferramentas em produção. No Google I/O de 2026, o Google anunciou o Gemini no Chrome como consumidor, e até lá as ferramentas ficam paradas esperando quem as use. O custo de manter é baixo: um arquivo de script, uma meta tag e um evento no GA4 a cada chamada.
O que acompanho é simples. O evento webmcp_tool no GA4 mostra se alguma ferramenta foi chamada, e o servidor MCP do mesmo site conta as chamadas por ferramenta, sem guardar IP nem argumento. Quando o primeiro número sair do zero, este texto ganha uma atualização com o que foi chamado e de onde.
Nota de método
- O que foi medido
- O código do webmcp.js publicado no site da agência desde 5 de setembro de 2026, a especificação WebMCP na versão lida em 25 de setembro de 2026 e a primeira página de resultados em português para a busca sobre como implementar.
- Quando
- 25 de setembro de 2026.
- Como
- Leitura da IDL da especificação, teste do código novo com um document.modelContext simulado e leitura da SERP com gl=br.
- Limitação
- O navegador em que testei não expõe a API, então as ferramentas não foram chamadas por um agente real. O token do origin trial ainda não estava configurado no site na data.
Os termos de medição estão definidos no vocabulário de medição, e o protocolo das rodadas na política editorial.
O que a IA desdobra desta pergunta?
Quando alguém faz esta busca em uma IA, o sistema abre subperguntas antes de responder. Estas são as que apareceram na medição, e onde cada uma é respondida.
Perguntas frequentes
Preciso do origin trial para testar o WebMCP?
Para testar na sua máquina, não. A flag chrome://flags/#enable-webmcp-testing liga a API localmente. Para que visitantes comuns do Chrome tenham a API exposta no seu site, sim, é o token do origin trial, servido em uma meta tag http-equiv origin-trial ou no cabeçalho HTTP Origin-Trial.
Alguma IA já chama as ferramentas WebMCP de um site?
Até setembro de 2026, não encontrei registro de um agente de uso amplo que chame essas ferramentas em produção. O Google anunciou que o Gemini no Chrome vai consumir o WebMCP. Por isso trato o WebMCP como experimento, com custo baixo e sem expectativa de tráfego.
Posso deixar uma ferramenta enviar formulário sozinha?
Tecnicamente pode, e é o tipo de ferramenta que eu não publico. A ferramenta roda na página com a sessão do usuário, e um agente enganado por conteúdo malicioso pode chamá-la. No meu caso, a ferramenta de contato só preenche os campos e pede que a pessoa revise e envie.
Fontes citadas
- W3C Web Machine Learning Community Group, WebMCP, Draft Community Group Report (2026)
- Chrome for Developers, Join the WebMCP origin trial (9 de junho de 2026) (2026)
- Chrome for Developers, WebMCP is available for early preview (10 de fevereiro de 2026) (2026)
- Chrome for Developers, segurança de ferramentas WebMCP (2026)
Versão em markdown para agentes de IA: https://lucasferraz.com/blog/webmcp-na-pratica/md/