Safari 27: servidor MCP para agentes, select customizável e o elemento model
O time do WebKit publicou em 17 de setembro de 2026 o post de recursos do Safari 27.0. Como sempre, é um texto enorme: segundo o próprio WebKit, a lista de features cresceu de 58 para 80 desde o primeiro beta, em junho, e o total de correções chega a 844. Separei o que mais me chamou atenção como desenvolvedor, começando pelo item que eu não esperava ver num release de navegador.
Um servidor MCP dentro do safaridriver
O Safari 27 inclui um servidor MCP que roda a partir do próprio safaridriver. Com ele, agentes de código como Claude Code e Codex, ou “o agente de sua escolha”, nas palavras do post, ganham acesso ao DOM, às requisições de rede, a screenshots e ao console. O WebKit cita usos como verificar renderização, estados de formulário e checkout, estilos computados, problemas de acessibilidade e tempos de carregamento.
A configuração é curta. Primeiro, habilite em Safari, Settings, Developer, a opção “Allow remote automation and external agents”. Depois registre o servidor no agente:
claude mcp add safari-mcp -- "/usr/bin/safaridriver" --mcp
Para o Codex, o comando é o mesmo trocando claude por codex; outros agentes usam uma entrada mcpServers com o comando /usr/bin/safaridriver e o argumento --mcp. Um ponto que o post faz questão de destacar: o servidor roda inteiramente na máquina local e, segundo o WebKit, não faz chamadas de rede próprias.
Select customizável e model no macOS e iOS
O <select> customizável chega ao Safari. Aplicar appearance: base-select no select e no ::picker(select) troca o controle para os novos estilos padrão e libera os recursos novos, como os pseudo-elementos ::picker-icon e ::checkmark, o elemento <selectedcontent> e HTML dentro de <option>. O post avisa que os estilos padrão mudaram desde o beta de junho, então quem testou cedo deve revisar.
O elemento <model>, que já existia no visionOS, agora funciona no Safari para iOS, iPadOS e macOS. Ele aceita várias <source>, um <img> como fallback e atributos como environmentmap e stagemode.
JavaScript e WebAssembly
Duas mudanças de motor merecem destaque. A primeira é o JSPI (WebAssembly JavaScript Promise Integration), que, segundo o WebKit, permite que código WebAssembly com aparência síncrona suspenda e espere Promises do JavaScript. Isso facilita portar código C, C++ e Rust que espera I/O síncrono.
A segunda é um loader de módulos ES reescrito do zero, agora em C++ nativo. O WebKit diz que a reescrita corrige bugs de ordem de execução e inicialização, foi validada contra test262 e Web Platform Tests e fecha uma lacuna antiga em top-level await.
Nas streams, for await...of passa a funcionar em response.body, ReadableStream.from() cria uma stream a partir de um iterável síncrono ou assíncrono, e streams podem ser transferidas entre contextos via postMessage().
Pequenas coisas que poupam trabalho
- Service Worker static routing: o service worker pode declarar regras para que o navegador ignore o worker em certas requisições.
sizes="auto": comloading="lazy", o navegador calcula o tamanho da imagem pela largura real do layout.- Scroll anchoring ativado por padrão: conteúdo inserido acima da viewport não empurra mais o leitor;
overflow-anchor: nonedesativa. - WebGPU: shaders WGSL suportam
clip_distances, para planos de corte customizados. - Cookies
Secureem loopback: em hosts locais via HTTP, cookies marcados comoSecureagora podem ser definidos, como nos outros navegadores. Ótimo para desenvolvimento local. - WKWebView:
WKJSHandlepermite usar referências a objetos JavaScript a partir do código nativo, eWKDOMNodeSnapshotclona nós do DOM, incluindo shadow roots, entre instâncias. - Web Inspector: a aba Network mostra toda a cadeia de redirecionamentos, não só o destino final.
Minha leitura
O servidor MCP é o item mais simbólico do release. Até aqui, dar a um agente acesso a um navegador real normalmente significava Chrome com alguma camada de automação por cima. Ter isso embutido no Safari, rodando localmente, torna muito mais fácil pedir a um agente que confira se algo quebrou especificamente no WebKit, que historicamente é onde muitos bugs de layout aparecem por último.
Fora isso, o que mais me agrada é a convergência: select customizável, scroll anchoring por padrão, cookies Secure em localhost e a correção do top-level await são itens que tiram o Safari da lista de exceções. Menos código condicional por navegador é uma vitória concreta para quem mantém front-end.