Referência de Tools
A Fase 1 do MCP Alcance expõe 6 tools — 5 de leitura e 1 de escrita. Todas seguem padrões inegociáveis do projeto: descrições em PT-BR (consumidas pelo LLM), identificação por cliente_id (int), PII mascarada por padrão e dry-run obrigatório em qualquer operação de escrita.
Convenções
- Annotations MCP sinalizam ao cliente IA o caráter da tool.
readOnlyHint: trueé exibido como ícone de leitura;destructiveHint: truedispara o escudo amarelo de confirmação no Claude Desktop. openWorldHint: trueem todas — a tool fala com um sistema externo (a WebApi).
buscar_cliente read
Resolve um termo em uma lista de clientes da Alcance. Detecta CNPJ automaticamente quando o termo contém 11+ dígitos; busca fuzzy por razão social chega na Fase 1.1.
Input
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
termo | string (mín. 2) | Sim | CNPJ (com ou sem máscara) ou trecho da razão social / nome fantasia. |
Output
Tabela markdown com até 20 linhas:
| Coluna | Conteúdo |
|---|---|
cliente_id | ID inteiro — use como chave nas demais tools. |
Razão social | Nome jurídico (ou nome fantasia, em fallback). |
CNPJ | Mascarado (XX.XXX.***/0001-XX). |
Cidade/UF | Localização concatenada. |
Annotations
readOnlyHint: trueopenWorldHint: true
Exemplo de prompt
Encontre o cliente com CNPJ 12.345.678/0001-90 na base da Alcance.obter_cliente read
Retorna a ficha completa do cliente. PII sempre mascarada (CNPJ, telefone, celular, e-mail). Credenciais Gov (login_gov, senha_gov) nunca são expostas, mesmo que estejam na resposta da WebApi.
Input
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cliente_id | int positivo | Sim | ID retornado por buscar_cliente. |
Output
Bloco markdown com 17 campos: razão social, nome fantasia, CPF/CNPJ, inscrições, regime tributário, contatos mascarados, endereço, representante, flags (ativo, certificado, zap_contábil).
Annotations
readOnlyHint: trueopenWorldHint: true
Exemplo de prompt
Me mostre a ficha completa do cliente 1234, com regime tributário e endereço.listar_certidoes read
Lista Certidões Negativas de Débito (CND, FGTS, SEFAZ) com filtros e paginação. O campo pdf_base64 é removido antes de chegar ao LLM — para baixar o PDF, use o endpoint binário da WebApi (/api/v1/certidao-negativa/{id}/pdf).
Input
| Campo | Tipo | Obrigatório | Default | Descrição |
|---|---|---|---|---|
cliente_id | int positivo | Não | — | Filtra por um cliente. |
status | "valida" | "vencida" | "em_processamento" | "erro" | "todos" | Não | "vencida" | Default reduz ruído; use "todos" para listar tudo. |
pagina | int ≥ 1 | Não | 1 | Página de resultados (1-based). |
por_pagina | int 1..50 | Não | 20 | Tamanho da página. |
Output
| Coluna | Conteúdo |
|---|---|
id | ID da certidão. |
Cliente | #<cliente_id> para correlacionar com obter_cliente. |
Tipo | CND, FGTS, SEFAZ, etc. |
Status | valida, vencida, em_processamento, erro. |
Validade | Data BR (dd/mm/aaaa). |
Negativa | Sim / Não / —. |
Annotations
readOnlyHint: trueopenWorldHint: true
Exemplo de prompt
Quais certidões do cliente 1234 estão vencidas? Mostre a data de validade.listar_lembretes read
Lista lembretes WhatsApp por cliente ou por usuário responsável. Pelo menos um dos filtros é obrigatório — sem isso a tool retorna erro estruturado (input_validation) explicando ao LLM como corrigir.
Input
| Campo | Tipo | Obrigatório | Default | Descrição |
|---|---|---|---|---|
cliente_id | int positivo | Condicional¹ | — | Filtra por cliente. |
usuario_id | int positivo | Condicional¹ | — | Filtra por usuário atribuído. |
apenas_pendentes | boolean | Não | true | Quando true, oculta lembretes concluídos/enviados. |
¹ É obrigatório informar cliente_id ou usuario_id (ambos aceitos, mas pelo menos um).
Output
| Coluna | Conteúdo |
|---|---|
ID | ID do lembrete. |
Envio | Data/hora BR formatada. |
Status | pendente, agendado, enviado, etc. |
Contato | Telefone mascarado ((11) ****-1234). |
Mensagem | Truncada em 80 caracteres. |
Annotations
readOnlyHint: trueopenWorldHint: true
Exemplo de prompt
Quais lembretes pendentes eu (usuário 7) tenho agendados para essa semana?criar_lembrete write
Cria um lembrete WhatsApp. Tool de escrita com custo real (envia mensagem WhatsApp Business quando confirmada). Por padrão executa em dry-run — sem confirmar=true, retorna apenas preview.
Dry-run obrigatório por padrão
Esta tool tem destructiveHint: true. O Claude Desktop exibe o escudo amarelo de confirmação. Em
modo dry-run nada é enviado à WebApi; a operação real só ocorre com confirmar=true explícito.
Input
| Campo | Tipo | Obrigatório | Default | Descrição |
|---|---|---|---|---|
cliente_id | int positivo | Sim | — | Cliente destinatário. |
contato | string (mín. 8) | Sim | — | Telefone com DDD; aceita formato livre — só os dígitos são extraídos. |
mensagem | string 1..4096 | Sim | — | Texto do lembrete. |
observacao | string ≤ 500 | Não | — | Observação interna (não enviada ao destinatário). |
data_hora_envio | string ISO 8601 | Não | imediato | Com timezone. Sem TZ assume -03:00 (Brasília). |
confirmar | boolean | Não | false | false ⇒ apenas preview. true ⇒ cria e agenda o envio de verdade. |
Output
Dois formatos possíveis:
| Modo | Conteúdo |
|---|---|
Dry-run (false) | Bloco "Preview do lembrete" com cliente_id, contato, data, observação e mensagem citada. |
Confirmado (true) | Bloco "Lembrete criado" com id, cliente_id, status e envio formatado. |
Annotations
destructiveHint: trueopenWorldHint: true
Exemplo de prompt
Crie um lembrete para o cliente 1234 no celular (11) 91234-5678 dizendo
"DARF do Simples vence amanhã". Pode confirmar e agendar pra hoje 16h.consultar_status_task read
Consulta o estado de uma tarefa Celery na WebApi. Útil quando o usuário disparou uma automação (geração de PDF, conversão de extrato bancário) e quer saber se já terminou — tasks longas nunca bloqueiam o LLM; o task_id é devolvido na hora.
Input
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
task_id | string não-vazia | Sim | UUID retornado por outra tool que dispara processamento assíncrono. |
Output
Bloco markdown com o estado atual. Os campos extras dependem do estado:
| Estado | Campos adicionais |
|---|---|
SUCCESS | resultado (truncado em 500 chars, formatado como JSON quando objeto). |
FAILURE | erro (resumo) e traceback parcial. |
RETRY | Mensagem informativa — task está sendo retentada automaticamente. |
PENDING/STARTED | Sugestão de consultar novamente em alguns segundos. |
REVOKED | Mensagem de cancelamento. |
Annotations
readOnlyHint: trueopenWorldHint: true
Exemplo de prompt
A task 7c1e9f2a-... já terminou? Se tiver resultado, me mostra.