MÓDULO 1.4

⚙️ API imperativa

Registre ferramentas JavaScript com schemas, execução assíncrona, cancelamento e resultados estruturados.

6

Tópicos

3h

Carga

Builder

Nível

Projeto

Tipo

0 de 60%
1

Registre a primeira tool imperativa

O que é: document.modelContext.registerTool() recebe name, título, descrição, schema, execução e anotações. O nome tem de usar apenas letras ASCII, números, sublinhado, hífen ou ponto e possuir de 1 a 128 caracteres.

Por que aprender: A forma imperativa atende jornadas que não cabem num formulário ou dependem de lógica e estado ricos.

Definição JSentrada observável registerToolcontrato explícito Resultado + UIresultado verificável

Conceito aplicado

O contrato deve ser compreensível por quem usa, testável por quem desenvolve e limitado por quem opera. A ferramenta não substitui autorização, validação nem experiência visual.

await document.modelContext.registerTool({
  name: 'buscar_cursos',
  title: 'Buscar cursos',
  description: 'Busca cursos por tema e nível.',
  inputSchema: { type: 'object', properties: {} },
  annotations: {
    readOnlyHint: true,
    untrustedContentHint: false
  },
  execute: async (input, { signal }) => buscar(input, signal)
});

Dica prática

Copie o exemplo, rode primeiro com dados locais e só depois conecte o backend. Mantenha logs sem dados pessoais e provoque pelo menos uma falha.

Checklist operacional

O objetivo da ferramenta cabe em uma frase.
A entrada inválida produz um erro compreensível.
O efeito aparece na interface para a pessoa.
O caminho manual funciona sem WebMCP.
Indo mais fundo: evidência mínima

Guarde a entrada usada, o estado anterior, o resultado devolvido e a alteração visível da página.

Anote também o comportamento sem suporte, durante cancelamento e diante de uma resposta não autorizada do backend.

Conceitos-chave

01

nome único

02

descrição não vazia

03

execute obrigatório

04

registro é Promise

2

Projete um inputSchema útil

O que é: inputSchema usa JSON Schema para declarar propriedades, tipos, enums, descrições e campos obrigatórios.

Por que aprender: O schema é parte do raciocínio de escolha e geração de argumentos; validação real ainda deve ocorrer no código.

✓ Faça

  • ✓ Declare type object de forma observável.
  • ✓ Preserve propriedades focadas no fluxo manual.
  • ✓ Teste o resultado e o cancelamento.

✗ Evite

  • ✗ Esconder efeitos atrás de descrições vagas.
  • ✗ Confiar na tool como autorização.
  • ✗ Remover o fallback da interface.

Conceito aplicado

O contrato deve ser compreensível por quem usa, testável por quem desenvolve e limitado por quem opera. A ferramenta não substitui autorização, validação nem experiência visual.

inputSchema: {
  type: 'object',
  properties: {
    tema: { type: 'string', minLength: 2, description: 'Tema desejado.' },
    nivel: { type: 'string', enum: ['iniciante', 'intermediario', 'avancado'] }
  },
  required: ['tema'],
  additionalProperties: false
}

Dica prática

Copie o exemplo, rode primeiro com dados locais e só depois conecte o backend. Mantenha logs sem dados pessoais e provoque pelo menos uma falha.

Checklist operacional

O objetivo da ferramenta cabe em uma frase.
A entrada inválida produz um erro compreensível.
O efeito aparece na interface para a pessoa.
O caminho manual funciona sem WebMCP.
Indo mais fundo: evidência mínima

Guarde a entrada usada, o estado anterior, o resultado devolvido e a alteração visível da página.

Anote também o comportamento sem suporte, durante cancelamento e diante de uma resposta não autorizada do backend.

Conceitos-chave

01

type object

02

propriedades focadas

03

required coerente

04

valide no execute

3

Execute assíncrono e responda estruturado

O que é: O callback execute pode retornar uma Promise; o valor resolvido é entregue ao agente.

Por que aprender: Resultados pequenos, tipados por convenção e acompanhados de evidência facilitam verificação e encadeamento.

1

Defina o contrato

Nome, descrição, entrada, resultado e limites ficam explícitos antes da implementação.

2

Observe a execução

Registre entrada, estado visível, cancelamento e saída sem expor dados sensíveis.

3

Verifique a evidência

A tool só está pronta quando o efeito e o retorno podem ser reproduzidos.

Conceito aplicado

O contrato deve ser compreensível por quem usa, testável por quem desenvolve e limitado por quem opera. A ferramenta não substitui autorização, validação nem experiência visual.

execute: async ({ tema, nivel }, { signal }) => {
  const cursos = await api.buscarCursos({ tema, nivel, signal });
  renderResultados(cursos);
  return { ok: true, total: cursos.length, cursos };
}

Dica prática

Copie o exemplo, rode primeiro com dados locais e só depois conecte o backend. Mantenha logs sem dados pessoais e provoque pelo menos uma falha.

Checklist operacional

O objetivo da ferramenta cabe em uma frase.
A entrada inválida produz um erro compreensível.
O efeito aparece na interface para a pessoa.
O caminho manual funciona sem WebMCP.
Indo mais fundo: evidência mínima

Guarde a entrada usada, o estado anterior, o resultado devolvido e a alteração visível da página.

Anote também o comportamento sem suporte, durante cancelamento e diante de uma resposta não autorizada do backend.

Conceitos-chave

01

Promise é aceita

02

resultado é serializável

03

UI é atualizada

04

erros são úteis

4

Controle ciclo de vida com AbortSignal

O que é: O signal de registerTool remove a ferramenta quando abortado; o signal recebido por execute cancela a chamada em andamento.

Por que aprender: Esse modelo evita ferramentas obsoletas e trabalho continuando depois que o agente perdeu interesse.

💡 Teste de realidade

Implemente este tópico com um caminho feliz, uma entrada inválida e um cancelamento. Registre o que a pessoa viu e o que o agente recebeu.

Conceito aplicado

O contrato deve ser compreensível por quem usa, testável por quem desenvolve e limitado por quem opera. A ferramenta não substitui autorização, validação nem experiência visual.

const registro = new AbortController();
await document.modelContext.registerTool(tool, { signal: registro.signal });
// desmontagem do componente
registro.abort('Tela encerrada');

Dica prática

Copie o exemplo, rode primeiro com dados locais e só depois conecte o backend. Mantenha logs sem dados pessoais e provoque pelo menos uma falha.

Checklist operacional

O objetivo da ferramenta cabe em uma frase.
A entrada inválida produz um erro compreensível.
O efeito aparece na interface para a pessoa.
O caminho manual funciona sem WebMCP.
Indo mais fundo: evidência mínima

Guarde a entrada usada, o estado anterior, o resultado devolvido e a alteração visível da página.

Anote também o comportamento sem suporte, durante cancelamento e diante de uma resposta não autorizada do backend.

Conceitos-chave

01

signal de registro remove

02

signal de execução cancela

03

fetch aceita signal

04

cleanup é determinístico

5

Descubra e execute tools na página

O que é: getTools lista ferramentas expostas ao documento e executeTool executa uma RegisteredTool com entrada estruturada.

Por que aprender: Essas operações viabilizam agentes in-page e testes controlados sem simular um agente externo.

✓ Faça

  • ✓ Declare getTools é assíncrono de forma observável.
  • ✓ Preserve origem pode filtrar no fluxo manual.
  • ✓ Teste o resultado e o cancelamento.

✗ Evite

  • ✗ Esconder efeitos atrás de descrições vagas.
  • ✗ Confiar na tool como autorização.
  • ✗ Remover o fallback da interface.

Conceito aplicado

O contrato deve ser compreensível por quem usa, testável por quem desenvolve e limitado por quem opera. A ferramenta não substitui autorização, validação nem experiência visual.

const tools = await document.modelContext.getTools({
  fromOrigins: [location.origin]
});
const buscar = tools.find((tool) => tool.name === 'buscar_cursos');
if (!buscar) throw new Error('Tool indisponível neste contexto');
const raw = await document.modelContext.executeTool(buscar, { tema: 'WebMCP' });
console.log(JSON.parse(raw));

Leia as anotações

readOnlyHint sinaliza ausência de mutação; untrustedContentHint avisa que a resposta exige tratamento reforçado. São sinais para o agente, não substitutos de autorização, validação ou sanitização.

Dica prática

Copie o exemplo, rode primeiro com dados locais e só depois conecte o backend. Mantenha logs sem dados pessoais e provoque pelo menos uma falha.

Checklist operacional

O objetivo da ferramenta cabe em uma frase.
A entrada inválida produz um erro compreensível.
O efeito aparece na interface para a pessoa.
O caminho manual funciona sem WebMCP.
Indo mais fundo: evidência mínima

Guarde a entrada usada, o estado anterior, o resultado devolvido e a alteração visível da página.

Anote também o comportamento sem suporte, durante cancelamento e diante de uma resposta não autorizada do backend.

Conceitos-chave

01

getTools é assíncrono

02

origem pode filtrar

03

execute usa RegisteredTool

04

cancelamento opcional

6

Entregue um catálogo pequeno e coerente

O que é: Buscar, consultar e verificar disponibilidade formam uma sequência com responsabilidades distintas e sem tool genérica.

Por que aprender: Um catálogo enxuto melhora a escolha do agente e cria uma base clara para a fase Integrator.

💡 Teste de realidade

Implemente este tópico com um caminho feliz, uma entrada inválida e um cancelamento. Registre o que a pessoa viu e o que o agente recebeu.

Conceito aplicado

O contrato deve ser compreensível por quem usa, testável por quem desenvolve e limitado por quem opera. A ferramenta não substitui autorização, validação nem experiência visual.

buscar_cursos({ tema, nivel })
consultar_curso({ cursoId })
consultar_disponibilidade({ cursoId, turmaId })
// Não criar: gerenciar_curso({ qualquerCoisa })

Dica prática

Copie o exemplo, rode primeiro com dados locais e só depois conecte o backend. Mantenha logs sem dados pessoais e provoque pelo menos uma falha.

Checklist operacional

O objetivo da ferramenta cabe em uma frase.
A entrada inválida produz um erro compreensível.
O efeito aparece na interface para a pessoa.
O caminho manual funciona sem WebMCP.
Indo mais fundo: evidência mínima

Guarde a entrada usada, o estado anterior, o resultado devolvido e a alteração visível da página.

Anote também o comportamento sem suporte, durante cancelamento e diante de uma resposta não autorizada do backend.

Conceitos-chave

01

buscar lista

02

consultar detalha

03

disponibilidade verifica

04

sem sobreposição

📦 Entrega do módulo

Entregar buscar_cursos, consultar_curso e consultar_disponibilidade, todas modificando a interface e retornando dados estruturados.

Critério de aceite

A entrega funciona com suporte WebMCP e mantém o caminho manual quando a API não existe.

Evidência

Inclua código, cenário testado, resultado observado e uma limitação conhecida.

Fontes técnicas