DocsAbrir Studio

WebMCP

Um agente no browser pode preencher um survey sem clicar no DOM. O contrato de ingest continua o mesmo POST. WebMCP só descreve a página aberta.

O que é

WebMCP é um rascunho do W3C Web Machine Learning CG. A página registra tools em document.modelContext (o alias navigator.modelContext está deprecado no Chromium 150). O agente do browser descobre e chama essas functions no tab, com a pessoa olhando.

Não é o MCP da Anthropic no fio. Não substitui o SDK, o ingest HTTP nem um servidor MCP remoto. Sem um tab na origem, não há o que descobrir.

Chrome: origin trial nas versões 149–156, ou a flag local chrome://flags/#enable-webmcp-testing. Sem a API, a página é só um form.

O que o Forma registra

Páginas públicas de survey/f/:handle — registram duas tools, com feature-detect. Um Form feedback não tem página no Forma: a tela vive no app do cliente, então o POST via SDK ou HTTP continua o caminho.

describe_form
Só leitura. Devolve name, kind e a lista de Fields.
submit_form
Mesma validação da tela. POST em /api/v1/submit com X-Forma-Key.
describe_form.ts
await modelContext.registerTool({
  name: "describe_form",
  description: "Returns this survey's name and Field list.",
  inputSchema: { type: "object", properties: {} },
  annotations: { readOnlyHint: true },
  execute() {
    return { name, kind: "survey", fields };
  },
});
submit_form.ts
await modelContext.registerTool({
  name: "submit_form",
  description: "Submit this survey. Keys match Field.key.",
  inputSchema: fieldInputSchema(fields),
  async execute(input) {
    const response = await fetch("/api/v1/submit", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "X-Forma-Key": apiKey,
      },
      body: JSON.stringify(input),
    });
    return response.json();
  },
});

O sucesso e o erro aparecem na página, para a pessoa ver o que o agente fez. Rate limit e 400 de Field continuam iguais.

Field → JSON Schema

A key do Field é a propriedade. O label vira description.

text, textarea
string
email
string com format: email
number
number
scale
number com min/max do Field
satisfaction
number 1 a 5
select
string enum das options
multiselect
array de string enum
required
entra em schema.required

O que não vai nas tools

Nada que mude o Workspace sem a pessoa confirmar na tela: rotacionar API key, apagar Form, webhooks, slug. Studio ainda não tem auth — expor tools lá agora seria um write para quem tem o tab.

Agentes headless (script, GitHub Action, outro servidor) usam POST /api/v1/submit. WebMCP não é para isso.

Widget noutro origin

A Permissions Policy tools cai em self. Um iframe cross-origin só registra tools se o embed tiver allow="tools". HTTPS é obrigatório (Secure Context).