# MCP do Uaubook

Conecte sua IA aos dados e às ações autorizadas da sua clínica. Recurso Premium, com acesso controlado por conexão.

## Como conectar

1. No Uaubook, entre como admin e abra Integrações → MCP do Uaubook → Conectar uma IA.
2. Dê um nome à conexão e escolha suas permissões. A validade pode ser sem vencimento, até revogação, ou ter um prazo definido.
3. Gere o acesso e copie a chave no campo próprio. Ela aparece uma única vez; use-a na configuração segura, sem colocá-la no chat da IA.
4. Na configuração de integrações da sua IA, adicione um servidor MCP, cole o endpoint e informe a chave na autenticação Bearer.
5. Conecte e faça uma consulta à clínica. Confira as ferramentas autorizadas e o resultado; no Uaubook, o último acesso registra uma chamada autenticada real.

O campo de vínculo UAUFLOW é opcional. Para essa integração, você encontra o código da empresa em Conectores → Conexões MCP. A liberação para operar Uaubook no UAUFLOW é independente do Premium Uaubook. Outros clientes MCP não precisam desse código.

Ao renovar uma chave, substitua-a na configuração da IA. Alterar somente a validade em Editar conexão preserva a chave atual. Revogar bloqueia novas chamadas sem apagar reservas ou histórico. Se a resposta de geração se perder, atualize a lista antes de tentar novamente; a conexão pode ter sido criada.

## Configuração técnica

- Endpoint: https://qntglqmsobpswhlfmaur.supabase.co/functions/v1/uaubook-mcp
- Transporte: Streamable HTTP
- Protocolo: 2026-07-28
- Contrato: uaubook.mcp.v1
- Autenticação: Authorization: Bearer <CHAVE_DE_ACESSO>
- POST JSON/SSE; não pressupor sessão ou initialize da revisão 2025.
- tools/list retorna somente ferramentas implementadas e autorizadas para a conexão.
- workspace, papel e binding são definidos no servidor, nunca pelo modelo.
- Use um cliente compatível com Streamable HTTP, protocolo 2026-07-28 e Bearer. Este servidor não oferece OAuth. A conexão depende dessas capacidades do cliente, não de uma marca de IA.

## Como interpretar resultados

Consultas devolvem contract_version, status, operation_id e data. Listagens retornam items e next_cursor; getters retornam um registro. Erro não é lista vazia.

Escritas usam request_id estável. Criação e alteração de serviços exigem valores explícitos em reais. Para localizar/cadastrar pessoa, use clients_search e client_save; na criação da reserva, envie o client_id retornado e client_contact com os identificadores conhecidos. A reserva revalida o vínculo na mesma transação. Para reagendar, consulte availability_get com appointment_id e envie appointment_edit com expected_version; editar não cria outra reserva. Cancelamento sem recebimento elimina cobrança pendente; com recebimento exige revisão financeira da equipe, sem estorno automático. Mesmo request_id deve manter payload e contexto originais. Confirmed/rejected duráveis carregam operation_id e intent. Em timeout ou resposta perdida, use uaubook_operation_get e preserve a intenção original. Pending não comprova falha; não crie outro request_id para a mesma operação. Contexto de conversa/mensagem/run é fornecido pelo backend integrador quando disponível; não invente essas referências.

## Capacidades por módulo

### Clínica

#### Consultar a clínica — Consultar

Ferramenta: `uaubook_context_get` · Permissão: `context:read`

Consulta clínica, fuso, permissões e booking_payment com chave Pix e instruções de sinal configuradas pela clínica. Ausência não autoriza inventar chave. Informar pagamento não registra recebimento.

Retorno: Identificação, nome, fuso, regras de reagendamento, papel da integração e permissões.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{}
```

### Serviços e profissionais

#### Listar serviços — Consultar

Ferramenta: `uaubook_services_list` · Permissão: `catalog:read`

Lista serviços, duração, valores e sinal configurado.

Retorno: Serviços com categoria, duração, descrição, preço, variantes e configuração do sinal; próximo cursor.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "after": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "limit": 10
}
```

#### Listar profissionais — Consultar

Ferramenta: `uaubook_professionals_list` · Permissão: `catalog:read`

Lista profissionais ativos e seus horários internos configurados. Não confirma disponibilidade de um slot.

Retorno: Profissionais ativos, especialidades, horários e intervalo configurado; próximo cursor.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "after": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "limit": 10
}
```

### Pessoas

#### Buscar pessoas — Consultar

Ferramenta: `uaubook_clients_search` · Permissão: `clients:read`

Busca pessoas no cadastro da clínica por nome, telefone ou e-mail. Telefone brasileiro é aceito com ou sem o nono dígito e com ou sem +55: a mesma pessoa é encontrada nos dois formatos, e fixo continua fixo. Lista vazia significa apenas nenhuma correspondência; formato impossível responde invalid_arguments. Nome, telefone e e-mail não concedem acesso Auth.

Retorno: Pessoas com nome, telefone, e-mail e versão do cadastro; próximo cursor. Não acessa credenciais de login.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "after": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "field": {
      "type": "string",
      "enum": [
        "name",
        "phone",
        "email"
      ]
    },
    "value": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "field": "name",
  "value": "Stark",
  "limit": 10
}
```

#### Consultar uma pessoa — Consultar

Ferramenta: `uaubook_client_get` · Permissão: `clients:read`

Consulta dados de contato e versão de uma pessoa pelo ID.

Retorno: Identificação, contato e versão do cadastro de uma pessoa.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "id": "11111111-1111-4111-8111-111111111111"
}
```

#### Cadastrar ou localizar pessoa — Alterar

Ferramenta: `uaubook_client_save` · Permissão: `clients:create`

Resolve pessoa pelo telefone/e-mail normalizados na clínica ou cria contato quando ausente. Informe nome e telefone ou e-mail conhecidos. Telefone brasileiro é aceito com ou sem o nono dígito e com ou sem +55; fixo continua fixo. Só cria contato quando nenhuma pessoa corresponde: telefone e e-mail apontando pessoas diferentes, apelido em duas pessoas ou nome coincidente respondem identity_review_required, sem duplicar/escolher silenciosamente. Não cria login nem altera contato existente. Use request_id/contexto estáveis e operation_get após resposta perdida.

Retorno: Pessoa localizada ou criada, com identificação e contato; conflito pede revisão sem duplicar cadastro. Não cria login nem sobrescreve contato existente.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 100
    },
    "phone": {
      "type": "string",
      "maxLength": 40
    },
    "email": {
      "type": "string",
      "maxLength": 254,
      "format": "email",
      "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "request_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "context": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "message_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "run_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "logical_turn_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "name",
    "request_id"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "name": "Stark Teste",
  "email": "stark@example.test"
}
```

### Agenda

#### Listar agendamentos — Consultar

Ferramenta: `uaubook_appointments_list` · Permissão: `appointments:read`

Lista reservas em intervalo de até 90 dias. Não trata horário vazio como disponibilidade confirmada.

Retorno: Reservas com pessoa, profissional, serviços, horário, status, origem, valores de sinal/recebimento/cashback/crédito e versão financeira; próximo cursor.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "after": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "from": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "to": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "professional_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "client_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "from",
    "to"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "from": "2026-09-01",
  "to": "2026-09-30",
  "limit": 10
}
```

#### Consultar um agendamento — Consultar

Ferramenta: `uaubook_appointment_get` · Permissão: `appointments:read`

Consulta agendamento, serviços, origem e situação financeira com versão.

Retorno: Dados da reserva, origem e situação financeira. Consulta não registra recebimento.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "id": "11111111-1111-4111-8111-111111111111"
}
```

#### Consultar opções de agenda por período — Consultar

Ferramenta: `uaubook_booking_options` · Permissão: `appointments:read`

Consulta opções de agenda de um período de até 31 dias em uma chamada, com as mesmas regras internas da secretária: especialidades do profissional, duração somando adicionais, expediente, bloqueios e reservas vigentes. Informe service_id ou service_query (nome como a clínica cadastrou); adicionais somente com IDs explícitos. professional_id/professional_query são opcionais: sem preferência, cada opção identifica o profissional. Nome ambíguo devolve candidatos para esclarecer, sem escolher por conta própria. Não exige pessoa, telefone ou e-mail; não reserva, não registra pagamento e não aplica desconto. Preço com variante em aberto responde needs_selection, sem supor a menor faixa. Use next_cursor enquanto complete for false: lista vazia com complete false não significa ausência de horário.

Retorno: Serviço e adicionais reconhecidos, duração total, fuso, valor canônico ou pendência de variante, e opções com data, horário e profissional identificado; continuidade explícita por cursor. Nome ambíguo devolve candidatos. Não reserva nem registra pagamento.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "to": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "service_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "service_query": {
      "type": "string",
      "minLength": 2,
      "maxLength": 80
    },
    "professional_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "professional_query": {
      "type": "string",
      "minLength": 2,
      "maxLength": 80
    },
    "additional_service_ids": {
      "maxItems": 19,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "cursor": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    }
  },
  "required": [
    "from",
    "to"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "from": "2026-09-20",
  "to": "2026-09-21",
  "service_query": "design de sobrancelha",
  "limit": 20
}
```

#### Fechar a reserva em uma chamada — Alterar

Ferramenta: `uaubook_booking_commit` · Permissão: `appointments:create`

Fecha a reserva interna em uma chamada: resolve a pessoa pelo telefone/e-mail (WhatsApp brasileiro com ou sem nono dígito, fixo continua fixo), confere o orçamento e grava com as mesmas regras internas de agenda, origem e financeiro. Reutiliza cadastro existente sem repetir o nome; client_name é obrigatório somente quando ninguém corresponde ao contato. Envie expected_quote exatamente como booking_options devolveu: mudança de preço/duração responde quote_changed sem gravar, e variante de preço em aberto responde quote_requires_selection. deposit_amount é sinal A COBRAR, nunca recebido: não registra pagamento, Pix, desconto ou origem inventada. Telefone e e-mail apontando pessoas diferentes respondem identity_review_required. Use request_id estável e operation_get após resposta perdida.

Retorno: Reserva confirmada com a pessoa reutilizada ou criada, e comprovante durável da operação composta. Confere o orçamento antes de gravar: mudança de preço/duração ou variante em aberto recusa sem gravar. Sinal é valor a cobrar; não registra pagamento nem cria login.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "service_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "additional_service_ids": {
      "maxItems": 19,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    },
    "professional_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "date": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "time": {
      "type": "string",
      "pattern": "^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"
    },
    "client_contact": {
      "type": "object",
      "properties": {
        "phone": {
          "type": "string",
          "maxLength": 40
        },
        "email": {
          "type": "string",
          "maxLength": 254,
          "format": "email",
          "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
        }
      },
      "additionalProperties": false
    },
    "client_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "client_name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 100
    },
    "expected_quote": {
      "type": "object",
      "properties": {
        "total_price": {
          "type": "number",
          "minimum": 0,
          "maximum": 100000000
        },
        "discount": {
          "type": "number",
          "minimum": 0,
          "maximum": 100000000
        },
        "deposit_amount": {
          "type": "number",
          "minimum": 0,
          "maximum": 100000000
        },
        "duration_minutes": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 1440
        }
      },
      "required": [
        "total_price",
        "discount",
        "deposit_amount",
        "duration_minutes"
      ],
      "additionalProperties": false
    },
    "booking_origin_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "notes": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2000
        },
        {
          "type": "null"
        }
      ]
    },
    "room_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "request_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "context": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "message_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "run_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "logical_turn_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "service_id",
    "professional_id",
    "date",
    "time",
    "client_contact",
    "expected_quote",
    "request_id"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "service_id": "11111111-1111-4111-8111-111111111111",
  "professional_id": "11111111-1111-4111-8111-111111111111",
  "date": "2026-09-20",
  "time": "10:00",
  "client_contact": {
    "phone": "11987654321"
  },
  "client_name": "Stark Teste",
  "expected_quote": {
    "total_price": 100,
    "discount": 0,
    "deposit_amount": 30,
    "duration_minutes": 60
  }
}
```

#### Consultar horários disponíveis — Consultar

Ferramenta: `uaubook_availability_get` · Permissão: `appointments:read`

Consulta horários de um dia usando as regras da secretária interna. time opcional verifica um horário específico. Não reserva; revalidar ao criar.

Retorno: Data, fuso, profissional, serviços e horários válidos pelas regras internas da secretária. Não reserva o horário.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "professional_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "service_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "additional_service_ids": {
      "maxItems": 19,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    },
    "date": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "time": {
      "type": "string",
      "pattern": "^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"
    },
    "appointment_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "professional_id",
    "service_id",
    "date"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "professional_id": "11111111-1111-4111-8111-111111111111",
  "service_id": "11111111-1111-4111-8111-111111111111",
  "date": "2026-09-20"
}
```

#### Criar agendamento — Alterar

Ferramenta: `uaubook_appointment_create` · Permissão: `appointments:create`

Cria reserva interna com client_id consultado ou retornado por client_save. Envie client_contact com telefone/e-mail conhecidos para revalidar o vínculo na mesma transação; telefone antigo sem nono dígito é aceito, e vínculo divergente responde identity_review_required em vez de trocar a pessoa. Valores explícitos em reais: total_price final após discount; deposit_amount é sinal a cobrar, não recebido. Não inventar valores/origem. request_id estável identifica a operação; repetir apenas o mesmo payload/contexto. Sem registro de pagamento ou acesso Auth. context vem do backend integrador quando disponível.

Retorno: Reserva confirmada ou rejeição com comprovante durável da operação. Mantém vínculo CRM; não cria pessoa, senha ou recebimento.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "professional_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "service_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "additional_service_ids": {
      "maxItems": 19,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    },
    "date": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "time": {
      "type": "string",
      "pattern": "^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"
    },
    "client_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "client_contact": {
      "type": "object",
      "properties": {
        "phone": {
          "type": "string",
          "maxLength": 40
        },
        "email": {
          "type": "string",
          "maxLength": 254,
          "format": "email",
          "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
        }
      },
      "additionalProperties": false
    },
    "total_price": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000000
    },
    "discount": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000000
    },
    "deposit_amount": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000000
    },
    "booking_origin_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "notes": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2000
        },
        {
          "type": "null"
        }
      ]
    },
    "room_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "request_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "context": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "message_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "run_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "logical_turn_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "professional_id",
    "service_id",
    "date",
    "time",
    "client_id",
    "total_price",
    "discount",
    "deposit_amount",
    "request_id"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "client_id": "11111111-1111-4111-8111-111111111111",
  "professional_id": "11111111-1111-4111-8111-111111111111",
  "service_id": "11111111-1111-4111-8111-111111111111",
  "date": "2026-09-20",
  "time": "10:00",
  "total_price": 100,
  "discount": 0,
  "deposit_amount": 20
}
```

#### Editar ou reagendar — Alterar

Ferramenta: `uaubook_appointment_edit` · Permissão: `appointments:edit`

Edita/reagenda reserva interna existente com expected_version consultada em appointment_get. changes contém somente campos a alterar; mudança de serviços exige total_price, discount e deposit_amount explícitos em reais. Preserva pessoa, origem, pagamentos e créditos. Consulte disponibilidade com appointment_id para excluir a própria reserva. reason é obrigatório para exceção próxima ao atendimento. Sem recebimento ou reembolso. Use request_id/contexto estáveis.

Retorno: Reserva atualizada, versão anterior e receipt durável. Preserva origem, pessoa, recebimentos e créditos; conflito exige nova consulta.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "appointment_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "expected_version": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "changes": {
      "type": "object",
      "properties": {
        "date": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
        },
        "time": {
          "type": "string",
          "pattern": "^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"
        },
        "professional_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "service_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "additional_service_ids": {
          "maxItems": 19,
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          }
        },
        "room_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "type": "null"
            }
          ]
        },
        "total_price": {
          "type": "number",
          "minimum": 0,
          "maximum": 100000000
        },
        "discount": {
          "type": "number",
          "minimum": 0,
          "maximum": 100000000
        },
        "deposit_amount": {
          "type": "number",
          "minimum": 0,
          "maximum": 100000000
        },
        "notes": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "reason": {
      "type": "string",
      "minLength": 3,
      "maxLength": 1000
    },
    "request_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "context": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "message_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "run_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "logical_turn_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "appointment_id",
    "expected_version",
    "changes",
    "request_id"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "appointment_id": "11111111-1111-4111-8111-111111111111",
  "expected_version": 1,
  "changes": {
    "date": "2026-09-21",
    "time": "14:00"
  },
  "reason": "Pedido da cliente"
}
```

#### Cancelar agendamento — Alterar

Ferramenta: `uaubook_appointment_cancel` · Permissão: `appointments:cancel`

Cancela reserva interna com autorização da cliente/equipe, motivo e expected_version consultada. Sem valor recebido cancela cobranças pendentes; com recebimento encaminha destino financeiro para revisão da equipe, preservando dinheiro registrado. Não efetua reembolso, cobrança extra ou exclusão da pessoa. Use request_id/contexto estáveis e operation_get após resposta perdida.

Retorno: Cancelamento com receipt e situação financeira. Sem recebimento cancela a cobrança; valores recebidos ficam para revisão da equipe, sem reembolso automático.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "appointment_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "expected_version": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "reason": {
      "type": "string",
      "minLength": 3,
      "maxLength": 1000
    },
    "request_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "context": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "message_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "run_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "logical_turn_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "appointment_id",
    "expected_version",
    "reason",
    "request_id"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "appointment_id": "11111111-1111-4111-8111-111111111111",
  "expected_version": 1,
  "reason": "Pedido da cliente"
}
```

### CRM

#### Consultar funis e etapas — Consultar

Ferramenta: `uaubook_crm_catalog_get` · Permissão: `crm:read`

Consulta funis ou etapas de um funil, sem criar configurações padrão.

Retorno: Funis ativos ou etapas de um funil com nome, ordem e configuração; próximo cursor.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "resource": {
      "type": "string",
      "enum": [
        "pipelines",
        "stages"
      ]
    },
    "pipeline": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9_-]{1,80}$"
    },
    "after": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9_-]{1,80}$"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "resource": "pipelines",
  "limit": 10
}
```

#### Listar negócios — Consultar

Ferramenta: `uaubook_crm_opportunities_list` · Permissão: `crm:read`

Lista negócios e leads da clínica preservando pessoa, funil, etapa e versão.

Retorno: Negócios com pessoa, funil, etapa, status, responsável, serviços de interesse e versão; próximo cursor.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "after": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "pipeline": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9_-]{1,80}$"
    },
    "client_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "pipeline": "agendamentos",
  "limit": 10
}
```

#### Consultar um negócio — Consultar

Ferramenta: `uaubook_crm_opportunity_get` · Permissão: `crm:read`

Consulta negócio pelo ID, sem expor tokens privados da captação.

Retorno: Dados e versão do negócio, sem tokens privados de captação.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "id": "11111111-1111-4111-8111-111111111111"
}
```

### Automações

#### Consultar automações ativas — Consultar

Ferramenta: `uaubook_crm_automations_list` · Permissão: `automations:read`

Consulta automações ativas padrão ou criadas pela equipe, sem executar/ativar/reaplicar regras.

Retorno: Regras padrão ou automações criadas pela equipe, parâmetros, versão e vigência. Não ativa nem executa regras.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "standard",
        "authored"
      ]
    },
    "pipeline": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9_-]{1,80}$"
    },
    "after": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "required": [
    "kind",
    "pipeline"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "kind": "standard",
  "pipeline": "agendamentos",
  "limit": 10
}
```

### Operações

#### Conferir resultado de uma operação — Consultar

Ferramenta: `uaubook_operation_get` · Permissão: `operations:read`

Recupera receipt da mesma conexão/request_id sem executar a escrita. Ausência é pending, não comprova rejeição. Preserve a operação original até resultado durável.

Retorno: Resultado original da mesma conexão/request_id, inclusive após perda da resposta. Pending não comprova falha e não autoriza criar outra reserva.

Parâmetros (JSON Schema):

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "request_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "request_id"
  ],
  "additionalProperties": false
}
```

Exemplo fictício — substitua IDs e valores por dados consultados:

```json
{
  "request_id": "11111111-1111-4111-8111-111111111111"
}
```

## Limites desta entrega

Editar contatos existentes, alterar negócios e registrar pagamentos ainda não são ferramentas disponíveis. O cadastro de pessoa resolve telefone/e-mail ou cria o contato. Editar/reagendar e cancelar reservas exigem permissão explícita e versão atual; não são concessões automáticas. A consulta de agendamentos inclui sua situação financeira; não registra recebimento. Telefone, e-mail ou nome de contato não concedem acesso de login.

O guia é público. Dados e comandos exigem autorização por tenant, plano e permissão. Nenhuma ferramenta nova recebe permissão automaticamente nas conexões existentes.
