WebMCP: O Protocolo que Pode Transformar a Web em um Toolkit para Agentes de IA
Como o Web Model Context Protocol está eliminando o screen scraping e criando uma web agent-ready

Vale a pena ficar atento a uma nova proposta apresentada no ecossistema do Chrome: o Web Model Context Protocol (WebMCP), um esforço experimental desenvolvido por engenheiros do Google em colaboração com a Microsoft.
A ideia: permitir que sites exponham suas funcionalidades como ferramentas estruturadas para agentes de IA. Sem scraping, sem adivinhação. O site conta pro agente o que ele pode fazer.
Como agentes interagem com sites hoje
Antes de entender o WebMCP, vale olhar o cenário atual. Existem várias abordagens, nenhuma ideal.
Screen scraping visual: o agente tira screenshot da página, manda pra um modelo de visão, e tenta identificar onde clicar por coordenadas. É a mais frágil e cara. Mudou o layout? Quebrou.
DOM/HTML parsing: mais esperto. O agente lê o HTML, navega a árvore DOM, identifica elementos por seletores CSS ou IDs. Funciona melhor, mas depende da estrutura do HTML, que muda entre deploys e nem sempre foi pensada pra consumo programático.
Accessibility tree: usa atributos ARIA e roles semânticos do browser. Provavelmente a melhor opção disponível hoje. O problema é que depende do site ter implementado acessibilidade direito. E a gente sabe que isso não é a regra.
Abordagem híbrida: ferramentas como Playwright combinam DOM parsing com interações programáticas. Funciona bem pra automação controlada, mas o agente ainda precisa inferir o que o site faz olhando a estrutura.
O ponto em comum de todas essas abordagens: o agente tá fazendo engenharia reversa de uma interface feita pra humanos. Ele precisa adivinhar o que cada elemento faz, qual o fluxo esperado, como encadear ações.
O que o WebMCP faz diferente
O WebMCP inverte a lógica. Em vez do agente interpretar a interface, o site declara suas capacidades como ferramentas estruturadas. O agente não precisa adivinhar nada.
Pensa assim: é a diferença entre ler o código-fonte de uma API pra descobrir os endpoints e ter uma spec OpenAPI completa. A informação é a mesma, mas num caso você interpreta, no outro você consome.
Segundo o Google, os ganhos são:
Benchmarks iniciais mostram reduções de até 67% no overhead computacional em comparação com abordagens baseadas em scraping visual.
Latência bem menor, porque a comunicação é via dados estruturados direto
Duas formas de integrar
O WebMCP oferece dois caminhos. Escolhe o que faz sentido pro seu caso.
API Declarativa (HTML puro)
A forma mais simples. Adiciona atributos nos forms que você já tem:
<form toolname="search-flights"
tooldescription="Search available flights between two cities on a specific date">
<label for="origin">Origem</label>
<input name="origin" type="text" placeholder="São Paulo (GRU)" required />
<label for="destination">Destino</label>
<input name="destination" type="text" placeholder="Lisboa (LIS)" required />
<label for="date">Data</label>
<input name="date" type="date" required />
<label for="passengers">Passageiros</label>
<input name="passengers" type="number" min="1" max="9" value="1" />
<button type="submit">Buscar voos</button>
</form>
O Chrome lê toolname e tooldescription, monta o schema JSON a partir dos inputs, e expõe pro agente como uma ferramenta. Dois atributos e seu form já é "agent-ready".
Quando o agente submete, dá pra saber que foi ele (e não um humano) pelo SubmitEvent:
form.addEventListener('submit', (event) => {
if (event.agentInvoked) {
analytics.track('agent_booking', { tool: 'search-flights' });
}
handleFlightSearch(new FormData(form));
});
Funciona bem pra formulários simples: buscas, cadastros, filtros.
API Imperativa (JavaScript)
Pra fluxos mais complexos, o WebMCP expõe o navigator.modelContext. Você registra ferramentas via JavaScript com schema JSON e um handler:
navigator.modelContext.registerTool({
name: 'add-to-cart',
description: 'Add a product to the shopping cart with optional quantity',
schema: {
type: 'object',
properties: {
productId: {
type: 'string',
description: 'The unique product identifier'
},
quantity: {
type: 'number',
minimum: 1,
maximum: 99,
description: 'Number of items to add'
},
size: {
type: 'string',
enum: ['P', 'M', 'G', 'GG'],
description: 'Product size'
}
},
required: ['productId']
},
handler: async ({ productId, quantity = 1, size }) => {
const result = await cartService.addItem(productId, quantity, size);
return {
success: true,
itemCount: result.totalItems,
cartTotal: result.total,
currency: 'BRL'
};
}
});
O retorno do handler volta pro agente como resposta estruturada. Ele sabe exatamente o que aconteceu.
Contexto compartilhado
Dá pra passar informações extras pro agente sobre o estado atual da sessão:
navigator.modelContext.provideContext({
userTier: 'premium',
currency: 'BRL',
language: 'pt-BR',
cartItems: 3,
isLoggedIn: true
});
// No logout, limpa tudo
logoutButton.addEventListener('click', () => {
navigator.modelContext.clearContext();
});
Os 4 métodos do navigator.modelContext
registerTool(config): expõe uma função pro agente. Recebe name, description, schema e handler.
unregisterTool(name): remove a ferramenta. Útil quando o estado muda (usuário deslogou, por exemplo).
provideContext(data): envia metadados pro agente (preferências, sessão, dados do usuário).
clearContext(): limpa os dados compartilhados. Essencial no logout.
Na prática: e-commerce agent-ready
Pra deixar mais concreto, um exemplo de loja online expondo suas operações principais:
// Busca no catálogo
navigator.modelContext.registerTool({
name: 'search-products',
description: 'Search products by keyword, category, or price range',
schema: {
type: 'object',
properties: {
query: { type: 'string', description: 'Search keywords' },
category: { type: 'string', enum: ['electronics', 'clothing', 'books', 'home'] },
minPrice: { type: 'number', minimum: 0 },
maxPrice: { type: 'number', minimum: 0 },
sortBy: { type: 'string', enum: ['price_asc', 'price_desc', 'rating', 'newest'] }
},
required: ['query']
},
handler: async (params) => {
const results = await catalogAPI.search(params);
return {
products: results.items.map(p => ({
id: p.id, name: p.name, price: p.price, rating: p.rating
})),
totalResults: results.total,
page: 1
};
}
});
// Checkout
navigator.modelContext.registerTool({
name: 'checkout',
description: 'Start the checkout process for items in the cart',
schema: {
type: 'object',
properties: {
shippingMethod: { type: 'string', enum: ['standard', 'express', 'pickup'] },
couponCode: { type: 'string', description: 'Optional discount coupon' }
}
},
handler: async ({ shippingMethod = 'standard', couponCode }) => {
const order = await checkoutService.initiate({ shippingMethod, couponCode });
return {
orderId: order.id,
total: order.total,
estimatedDelivery: order.deliveryDate,
requiresConfirmation: true
};
}
});
// Contexto da loja
navigator.modelContext.provideContext({
storeName: 'TechBR',
currency: 'BRL',
freeShippingThreshold: 199.90,
userTier: currentUser?.tier || 'guest'
});
Com isso, um agente consegue buscar produtos, adicionar ao carrinho e fazer checkout. Tudo via dados estruturados, sem tocar na UI.
Segurança
O WebMCP é permission-first. O Chrome funciona como mediador entre o agente e o site.
Ações sensíveis (compras, envio de dados pessoais) pedem confirmação do usuário antes de executar. A execução roda dentro da sessão do usuário, então não precisa re-autenticar. E o clearContext() garante limpeza no logout.
Ou seja, o usuário mantém controle. O agente faz o trabalho pesado, mas decisões críticas passam pelo humano.
Impacto
Pra devs web: o custo de implementação é baixo. No caso simples, são dois atributos HTML. No complexo, algumas dezenas de linhas de JavaScript. Seu site passa a ser acessível pra uma nova geração de interfaces.
Pra empresas: sites agent-ready vão ter vantagem. Quando alguém pedir pro agente "compra a passagem mais barata pra Lisboa", ele vai preferir sites com WebMCP. É mais rápido, confiável e barato.
Pro ecossistema: o WebMCP é pro browser o que o MCP (Model Context Protocol, da Anthropic) é pra ferramentas locais. Juntos, criam um padrão onde agentes podem interagir com qualquer coisa de forma estruturada.
Como testar
O WebMCP tá em Early Preview no Chrome 146.
Se inscreva no Early Preview Program
Acesse a documentação e demos
Teste com diferentes LLMs
Um detalhe importante: a qualidade da description que você escreve nas ferramentas impacta diretamente na capacidade do modelo de usá-las. Descrição vaga gera alucinação. Descrições mais precisas mostraram, em benchmarks experimentais, taxas de sucesso muito elevadas.
Conclusão
A web foi construída pra humanos olharem e clicarem. Agentes de IA tentando usar essa mesma interface, seja por visão, DOM, ou accessibility tree, é sempre algum grau de engenharia reversa.
O WebMCP é um grande passo para um canal de comunicação direto entre sites e agentes. Claro que ainda falta adoção dos outros browsers, falta a spec estabilizar, falta o ecossistema crescer. Mas ao que tudo indica a direção está clara.
Se você desenvolve pra web, vale começar a pensar nos seus sites como toolkits. Não só como interfaces visuais.
WebMCP está disponível para preview no Chrome 146 via o Early Preview Program. Documentação oficial em developer.chrome.com/blog/webmcp-epp.
Referências:



