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: true dispara o escudo amarelo de confirmação no Claude Desktop.
  • openWorldHint: true em 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

CampoTipoObrigatórioDescrição
termostring (mín. 2)SimCNPJ (com ou sem máscara) ou trecho da razão social / nome fantasia.

Output

Tabela markdown com até 20 linhas:

ColunaConteúdo
cliente_idID inteiro — use como chave nas demais tools.
Razão socialNome jurídico (ou nome fantasia, em fallback).
CNPJMascarado (XX.XXX.***/0001-XX).
Cidade/UFLocalização concatenada.

Annotations

  • readOnlyHint: true
  • openWorldHint: 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

CampoTipoObrigatórioDescrição
cliente_idint positivoSimID 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: true
  • openWorldHint: 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

CampoTipoObrigatórioDefaultDescrição
cliente_idint positivoNãoFiltra por um cliente.
status"valida" | "vencida" | "em_processamento" | "erro" | "todos"Não"vencida"Default reduz ruído; use "todos" para listar tudo.
paginaint ≥ 1Não1Página de resultados (1-based).
por_paginaint 1..50Não20Tamanho da página.

Output

ColunaConteúdo
idID da certidão.
Cliente#<cliente_id> para correlacionar com obter_cliente.
TipoCND, FGTS, SEFAZ, etc.
Statusvalida, vencida, em_processamento, erro.
ValidadeData BR (dd/mm/aaaa).
NegativaSim / Não / —.

Annotations

  • readOnlyHint: true
  • openWorldHint: 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

CampoTipoObrigatórioDefaultDescrição
cliente_idint positivoCondicional¹Filtra por cliente.
usuario_idint positivoCondicional¹Filtra por usuário atribuído.
apenas_pendentesbooleanNãotrueQuando true, oculta lembretes concluídos/enviados.

¹ É obrigatório informar cliente_id ou usuario_id (ambos aceitos, mas pelo menos um).

Output

ColunaConteúdo
IDID do lembrete.
EnvioData/hora BR formatada.
Statuspendente, agendado, enviado, etc.
ContatoTelefone mascarado ((11) ****-1234).
MensagemTruncada em 80 caracteres.

Annotations

  • readOnlyHint: true
  • openWorldHint: 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

CampoTipoObrigatórioDefaultDescrição
cliente_idint positivoSimCliente destinatário.
contatostring (mín. 8)SimTelefone com DDD; aceita formato livre — só os dígitos são extraídos.
mensagemstring 1..4096SimTexto do lembrete.
observacaostring ≤ 500NãoObservação interna (não enviada ao destinatário).
data_hora_enviostring ISO 8601NãoimediatoCom timezone. Sem TZ assume -03:00 (Brasília).
confirmarbooleanNãofalsefalse ⇒ apenas preview. true ⇒ cria e agenda o envio de verdade.

Output

Dois formatos possíveis:

ModoConteú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: true
  • openWorldHint: 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

CampoTipoObrigatórioDescrição
task_idstring não-vaziaSimUUID retornado por outra tool que dispara processamento assíncrono.

Output

Bloco markdown com o estado atual. Os campos extras dependem do estado:

EstadoCampos adicionais
SUCCESSresultado (truncado em 500 chars, formatado como JSON quando objeto).
FAILUREerro (resumo) e traceback parcial.
RETRYMensagem informativa — task está sendo retentada automaticamente.
PENDING/STARTEDSugestão de consultar novamente em alguns segundos.
REVOKEDMensagem de cancelamento.

Annotations

  • readOnlyHint: true
  • openWorldHint: true

Exemplo de prompt

A task 7c1e9f2a-... já terminou? Se tiver resultado, me mostra.