Voltar ao Blog
    Arquitetura

    Seu site está pronto para a era dos agentes de IA?

    Web MCP é o protocolo que permite agentes de IA interagirem diretamente com o seu site no browser. Entenda por que isso muda tudo, como implementamos no eliseu.dev com 11 tools, e como validar hoje mesmo.

    23 de março de 20268 min

    Você já parou pra pensar em como consome conteúdo hoje comparado a 10 anos atrás?

    Em 2014 você abria o notebook, entrava no site, lia o que precisava e fechava. Em 2018 você começava no desktop, continuava no celular no metrô e finalizava no tablet no sofá. Hoje? Você pode começar uma pesquisa no Chrome, continuar pedindo pra Alexa resumir enquanto faz café, e finalizar com um agente de IA que navega pelo site por você enquanto você faz outra coisa.

    A forma de consumir conteúdo mudou. Mas a maioria dos sites ainda foi construída pensando apenas no olho humano na frente de uma tela.

    É hora de mudar isso.

    🌊 A evolução que muita gente ainda não percebeu

    Pensa comigo na linha do tempo:

    • Desktop first (2000–2012): uma tela, um mouse, leitura linear
    • Mobile first (2012–2018): múltiplos dispositivos, mesmo conteúdo, diferentes contextos
    • Voice first (2018–2022): Alexa, Google Assistant, Siri — conteúdo por voz
    • Agent first (2022–hoje): agentes de IA que navegam, consomem e interagem com seu site por conta própria

    Cada virada dessas exigiu que a gente repensasse como entregamos conteúdo. A web responsiva foi a resposta ao mobile. As APIs de voz foram a resposta ao voice. E agora chegou a vez dos agentes.

    A diferença é que dessa vez a superfície de consumo não é uma tela — é um modelo de linguagem. E modelos não leem HTML, não clicam em botões, não fazem scroll. Eles precisam de ferramentas estruturadas para interagir com seu sistema.

    🤖 O que é o Web MCP?

    Web MCP (Web Machine Learning Context Protocol) é uma especificação ainda em beta do W3C que define uma API JavaScript nativa para que páginas web exponham ferramentas (tools) consumíveis por agentes de IA diretamente no browser.

    A ideia é simples: seu site registra o que ele sabe fazer, e um agente rodando no browser pode invocar essas ferramentas sem precisar de scraping, sem precisar de integração customizada, sem precisar de uma API separada.

    // O conceito em uma linha
    navigator.modelContext.registerTool({
      name: "get_blog_posts",
      description: "Lista todos os posts do blog",
      execute: async () => blogPosts
    })
    

    É o mesmo princípio do MCP que o Claude usa com ferramentas externas — mas rodando no browser, client-side, sem servidor.

    Seu SiteBrowser (Chrome)Agente de IASeu SiteBrowser (Chrome)Agente de IASite registra tools ao carregarnavigator.modelContext.registerTool(...)Solicita tools disponíveisLista de tools registradasInvoca tool("get_blog_posts")execute()Retorna dados estruturadosResultado da tool

    🛠️ Como implementamos no eliseu.dev

    Eu vi esse protocolo sendo especificado e pensei: vamos ser early adopters.

    A implementação foi toda client-side, sem adicionar uma linha de backend. A estrutura ficou assim:

    1. Um hook que registra as toolsuseWebMCP — que vive dentro do BrowserRouter para ter acesso ao useNavigate:

    // src/hooks/use-webmcp.ts
    function getModelContext(): ModelContext | null {
      if (typeof navigator === "undefined") return null;
      return "modelContext" in navigator
        ? (navigator as any).modelContext
        : null;
    }
    
    export function useWebMCP() {
      const navigate = useNavigate();
    
      useEffect(() => {
        const mc = getModelContext();
        if (!mc) return; // graceful degradation em browsers sem suporte
    
        mc.registerTool({ /* ... */ });
    
        return () => mc.unregisterTool("tool_name"); // cleanup
      }, [navigate]);
    }
    

    O guard if (!mc) return é fundamental. Em browsers sem suporte (a maioria ainda), o site funciona normalmente. Zero impacto para usuários comuns.

    2. Um inicializador dentro do Router:

    // src/App.tsx
    const WebMCPInitializer = () => {
      useWebMCP();
      return null;
    };
    
    // Dentro do BrowserRouter:
    <WebMCPInitializer />
    

    3. Os dados extraídos das páginas para arquivos dedicados:

    Um passo importante foi extrair os dados que estavam hardcoded nos componentes para arquivos em src/data/. Isso evita duplicação entre a página e as tools MCP:

    src/data/
      blog-posts.ts   → carrega os .md do blog
      projects.ts     → projetos e iniciativas
      talks.ts        → palestras e workshops
      guides.ts       → guias técnicos com capítulos
      uses.ts         → setup por categoria
      experience.ts   → experiência + educação
    

    Tanto os componentes das páginas quanto o hook MCP importam da mesma fonte. Uma fonte de verdade.

    📦 As 11 tools que expusemos

    Registramos tools para expor praticamente todo o conteúdo do site:

    ToolO que retorna
    list_blog_postsTodos os posts com metadata
    get_blog_postConteúdo completo por slug
    list_projectsProjetos e iniciativas
    list_talksPalestras (futuras + passadas) com slides/vídeo
    list_guidesGuias técnicos com chapterCount
    get_guideTodos os capítulos de um guia
    get_setupHardware e software por categoria
    get_experienceHistórico profissional + educação
    get_profilePerfil estruturado com especialidades
    search_contentBusca cross-content (blog + guias + projetos)
    navigateNavega para qualquer rota do site

    A tool search_content é a que mais me empolga. Um agente pode perguntar "quais posts falam sobre observabilidade?" e receber resultados filtrados por título, excerpt, tags e categoria — sem fazer scraping de HTML.

    mc.registerTool({
      name: "search_content",
      description: "Busca em blog posts, guias e projetos por keyword",
      inputSchema: {
        type: "object",
        properties: {
          query: { type: "string" },
          types: {
            type: "array",
            items: { type: "string", enum: ["blog", "guide", "project"] }
          }
        },
        required: ["query"]
      },
      annotations: { readOnlyHint: true },
      execute: async ({ query, types }) => {
        // filtra blogPosts, guides e projects pelo termo
        // retorna resultados com tipo, título, excerpt e URL
      }
    })
    

    Detalhe importante: o campo annotations: { readOnlyHint: true } sinaliza pro agente que essa tool não modifica estado. A única tool com readOnlyHint: false é o navigate, que de fato muda o estado do browser.

    ✅ Como validar hoje (ainda é beta)

    O Web MCP ainda não está disponível em browsers por padrão. Mas já dá pra testar de duas formas:

    Opção 1 — Chrome Flag

    Acesse chrome://flags/#enable-webmcp-testing no Chrome, habilite a flag e reinicie o browser. Agora o navigator.modelContext estará disponível para testes locais.

    Opção 2 — Extensão Chrome

    Instale a extensão WebMCP - Model Context Tool diretamente da Chrome Web Store. Ela injeta suporte ao protocolo e expõe as tools registradas para agentes compatíveis.

    Com qualquer uma das opções ativa, você pode abrir o DevTools e verificar:

    // No console do browser
    console.log('modelContext' in navigator) // true
    
    // Lista as tools registradas
    const tools = await navigator.modelContext.listTools()
    console.log(tools.map(t => t.name))
    // ['list_blog_posts', 'get_blog_post', 'list_projects', ...]
    

    🔭 Por que se antecipar?

    Essa tecnologia ainda é beta. O spec pode mudar. A adoção dos browsers vai levar tempo. Então por que implementar agora?

    Porque o custo de entrada é baixo e o aprendizado é alto.

    Implementar Web MCP aqui levou poucas horas. Mas o processo forçou uma disciplina valiosa: extrair todos os dados hardcoded das páginas para arquivos de dados bem tipados. Isso por si só já valeu — o código ficou mais limpo, os dados têm uma fonte única de verdade, e as páginas ficaram menores.

    Além disso, pensa no padrão que está se formando:

    • Você já tem robots.txt para crawlers
    • Você já tem llms.txt para modelos de linguagem
    • Em breve você vai ter Web MCP tools para agentes

    São camadas complementares de como você disponibiliza seu conteúdo para diferentes tipos de "consumidores".

    Um agente que usa seu site hoje pode:

    • Resumir seus posts mais recentes sobre um tema
    • Navegar até o post certo baseado em uma pergunta
    • Montar um briefing sobre você antes de uma reunião
    • Buscar referências cruzando blog + guias + projetos

    Tudo isso sem scraping, sem API key, sem backend — usando apenas o que você registrou no browser.

    💡 O padrão que está surgindo

    A analogia que mais me faz sentido: assim como você tem uma interface visual pra humanos e uma API REST pra sistemas, você vai precisar de uma interface semântica pra agentes.

    Web MCP é exatamente isso. Uma camada de abstração que diz: "aqui está o que meu site sabe fazer, descrito em linguagem natural, com schemas tipados."

    Seu Site

    Interface Visual

    API REST / GraphQL

    Web MCP Tools

    Usuário Humano

    Sistemas Externos

    Agentes de IA

    Conclusão

    O consumo de conteúdo não é mais linear, não é mais apenas visual, e não é mais apenas humano.

    Seu site hoje precisa funcionar bem para a pessoa que lê no desktop, para quem navega no celular no metrô, para quem pergunta por voz no carro — e agora também para o agente de IA que está pesquisando por conta dela.

    Implementar Web MCP no eliseu.dev foi um exercício de se antecipar a uma mudança que já está acontecendo. O protocolo é beta, mas o comportamento que ele representa — sites como plataformas de dados consumíveis por agentes — já é uma realidade crescente.

    Vale a pena entrar cedo, enquanto o custo de aprendizado é baixo e o diferencial ainda existe.


    Para testar o Web MCP no eliseu.dev, instale a extensão Chrome ou habilite chrome://flags/#enable-webmcp-testing e abra o DevTools. A spec completa está em webmachinelearning.github.io/webmcp.

    Dúvidas ou quer implementar no seu projeto? Me encontra no LinkedIn ou GitHub.