@lionchat/mcp-server 0.5.5 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -166,6 +166,16 @@ Como a coleta de dados/cenários funciona hoje (importante pra diagnosticar "IA
166
166
  - O admin pode FIXAR o parâmetro de uma ferramenta no cenário (campo scenario.tool_bindings): quais mídias enviar, qual funil+etapa do card, quais agendas no agendamento. "Deixar a IA decidir" = binding vazio.
167
167
  - Quando UM cenário fixa a tool, a execução vira determinística (a IA não escolhe): mídia e kanban são aplicados pós-turno pelo BindingResolver (ordem texto→ação, sem duplicar, idempotente); o agendamento força/restringe a agenda mas a IA ainda define data/hora.
168
168
  - Via MCP: scenarios_create/update persiste binding de send_media_asset e create_kanban_item/move_kanban_item (re-escopados por conta). O binding de create_booking NÃO é aceito pela API — pra limitar agendas via MCP, use config.booking_event_type_ids no assistente (captain_assistants_update).
169
+ - Receita pra criar/editar cenário com binding via MCP (scenarios_create / scenarios_update): (1) o corpo vai SEMPRE embrulhado em `scenario`; (2) a instrução PRECISA mencionar a ferramenta como link markdown `[Rótulo](tool://slug)` — menção crua `(tool://slug)` NÃO conta e o binding é descartado no salvamento; (3) envie `tool_bindings` com o shape: `send_media_asset` → `{ "asset_ids": [Int] }`, `create_kanban_item`/`move_kanban_item` → `{ "funnel_id": Int, "stage": "<chave da etapa>" }`. Não precisa mandar `tools` (é auto-extraído da instrução e sobrescrito). `create_booking` NÃO entra em tool_bindings pela API.
170
+
171
+ ## Variáveis {{ }} nas instruções do AI Agente (2026-06)
172
+
173
+ As instruções aceitam variáveis Liquid `{{ }}` que chegam JÁ PREENCHIDAS com os dados reais do contato/conversa do atendimento — vale pra instrução base do assistente (`config.instructions`) e pra instrução de cada cenário (`scenario.instruction`). O texto é gravado como está (sem sanitização); cap de 20.000 chars na base.
174
+
175
+ - Contato: `{{contact.name}}`, `{{contact.first_name}}`, `{{contact.last_name}}`, `{{contact.email}}`, `{{contact.phone}}`, `{{contact.cpf}}`, `{{contact.cnpj}}`, `{{contact.rg}}`, `{{contact.date_of_birth}}`, `{{contact.profession}}`, `{{contact.address.city}}` (e `.cep`/`.street`/`.number`/`.neighborhood`/`.state`...), `{{contact.custom_attribute.<chave>}}`.
176
+ - Conversa: `{{conversation.display_id}}`, `{{conversation.custom_attribute.<chave>}}`.
177
+ - Variável sem valor sai vazia (não quebra). Texto SEM `{{` sai idêntico (preserva o cache do prompt) — só use variável quando agregar.
178
+ - ATENÇÃO: variável de CONTA NÃO funciona aqui — `{{account.custom_attribute.<chave>}}` (slogan, endereço...) sai VAZIA dentro das instruções do AI Agente (o contexto só tem `contact` e `conversation`, proteção contra vazar secret). Pra um valor fixo da empresa no prompt, escreva o valor literal no texto.
169
179
 
170
180
  ## Conhecimento passivo da IA: FAQ + artigos (RAG) (2026-06)
171
181
 
@@ -242,13 +252,57 @@ campanha e mostre a contagem ao usuário — estimativa e disparo usam o mesmo m
242
252
 
243
253
  ## Variáveis de conta (account_variables)
244
254
 
245
- Pra dados que se repetem (slogans, endereços, horários):
246
- - `account_variables_create` UMA vez
247
- - Use em templates com `{{slogan}}`, `{{endereco}}`
248
- - Atualiza UMA vez, propaga pra todo lugar
255
+ Pra dados fixos que se repetem (slogans, endereços, horários):
256
+ - `account_variables_create` UMA vez — campos: `attribute_display_name` (rótulo), `attribute_key` (a chave usada no `{{ }}`), `attribute_display_type` (`text`; use `secret` pra token/senha), `value`. Admin-only.
257
+ - Use em templates com a sintaxe COMPLETA `{{ account.custom_attribute.<attribute_key> }}` (ex: `{{ account.custom_attribute.slogan }}`). NÃO existe atalho `{{slogan}}` solto — sem o prefixo `account.custom_attribute.` não resolve.
258
+ - Resolve em: mensagens, respostas prontas, campanhas e automações. NÃO resolve nas instruções do AI Agente (base/cenário) — ali só `contact.*` e `conversation.*`.
259
+ - `secret` nunca aparece em template (sai vazio); só resolve em nós API Request do FlowBuilder.
260
+ - Atualiza UMA vez, propaga pra todo lugar.
249
261
 
250
262
  Nunca hard-code esses dados em respostas geradas.
251
263
 
264
+ ## Templates WhatsApp com variáveis do sistema (auto-preenchimento) (2026-06)
265
+
266
+ Ao criar/editar um template WhatsApp (`inboxes_whatsapp_templates_create` / `_create_2`), o corpo usa
267
+ variáveis posicionais `{{1}}`, `{{2}}`. Por padrão elas são **manuais** (o atendente digita o valor no
268
+ envio). Pra deixar uma variável **auto-preenchida** com um campo do contato/conversa, mande o parâmetro
269
+ opcional `variable_mapping` junto.
270
+
271
+ - Formato: objeto com chave = posição da variável (`"1"`, `"2"`...) e valor = `{ source, field, label }`.
272
+ - Só entram no mapping as que devem auto-preencher; as demais `{{N}}` continuam manuais.
273
+ - O `variable_mapping` é salvo localmente (NÃO vai pra Meta) e usado no momento do envio.
274
+
275
+ Exemplo — `{{1}}` vira o primeiro nome do contato:
276
+
277
+ ```json
278
+ {
279
+ "components": [
280
+ { "type": "BODY", "text": "Olá {{1}}! Sua oferta de {{2}} está ativa.",
281
+ "example": { "body_text": [["Maria", "20%"]] } }
282
+ ],
283
+ "variable_mapping": {
284
+ "1": { "source": "contact", "field": "name.split.first", "label": "Primeiro nome" }
285
+ }
286
+ }
287
+ ```
288
+
289
+ Fontes/campos disponíveis (`source` / `field`):
290
+
291
+ | Variável | source | field |
292
+ |---|---|---|
293
+ | Nome completo | contact | name |
294
+ | Primeiro nome | contact | name.split.first |
295
+ | Sobrenome | contact | name.split[1..] |
296
+ | Telefone | contact | phone_number |
297
+ | E-mail | contact | email |
298
+ | Atendente | conversation | assignee.name |
299
+ | Equipe | conversation | team.name |
300
+ | Nome da conta | account | name |
301
+ | Campo personalizado | contact | custom_attributes.CHAVE |
302
+
303
+ Lembrete: todo template recém-criado pelo MCP só mostra o texto na tela depois de **sincronizar**
304
+ (o MCP cria na Meta, mas o "puxar de volta" o conteúdo é o que a tela faz com o botão Sincronizar).
305
+
252
306
  ## Status codes a respeitar
253
307
 
254
308
  | Code | O que fazer |
package/endpoints.json CHANGED
@@ -5761,6 +5761,20 @@
5761
5761
  "location": "body",
5762
5762
  "required": false,
5763
5763
  "description": "Toggle ativo/inativo (default true)"
5764
+ },
5765
+ {
5766
+ "name": "tools",
5767
+ "type": "array",
5768
+ "location": "body",
5769
+ "required": false,
5770
+ "description": "Lista de slugs das ferramentas do cenario (ex: [\"send_media_asset\",\"create_kanban_item\"]). NORMALMENTE NAO precisa enviar: e DERIVADO automaticamente das mencoes [Rotulo](tool://slug) na instrucao e SOBRESCRITO no salvamento. Quem governa e o texto da instrucao."
5771
+ },
5772
+ {
5773
+ "name": "tool_bindings",
5774
+ "type": "object",
5775
+ "location": "body",
5776
+ "required": false,
5777
+ "description": "Parametro FIXADO por ferramenta (admin pre-define em vez de a IA escolher). Shapes aceitos: send_media_asset -> { \"asset_ids\": [Int] }; create_kanban_item e move_kanban_item -> { \"funnel_id\": Int, \"stage\": \"<chave da etapa>\" }. create_booking NAO e aceito aqui (para restringir agendas use config.booking_event_type_ids no assistente via captain_assistants_update). O binding so COLA se a ferramenta estiver mencionada como [Rotulo](tool://slug) na instrucao; senao e podado no salvamento. IDs de outra conta sao descartados (re-escopo por conta)."
5764
5778
  }
5765
5779
  ],
5766
5780
  "returns": "assistente AI criado (com novo ID)",
@@ -5860,6 +5874,20 @@
5860
5874
  "location": "body",
5861
5875
  "required": false,
5862
5876
  "description": "Toggle ativo/inativo"
5877
+ },
5878
+ {
5879
+ "name": "tools",
5880
+ "type": "array",
5881
+ "location": "body",
5882
+ "required": false,
5883
+ "description": "Lista de slugs das ferramentas do cenario (ex: [\"send_media_asset\",\"create_kanban_item\"]). NORMALMENTE NAO precisa enviar: e DERIVADO automaticamente das mencoes [Rotulo](tool://slug) na instrucao e SOBRESCRITO no salvamento. Quem governa e o texto da instrucao."
5884
+ },
5885
+ {
5886
+ "name": "tool_bindings",
5887
+ "type": "object",
5888
+ "location": "body",
5889
+ "required": false,
5890
+ "description": "Parametro FIXADO por ferramenta (admin pre-define em vez de a IA escolher). Shapes aceitos: send_media_asset -> { \"asset_ids\": [Int] }; create_kanban_item e move_kanban_item -> { \"funnel_id\": Int, \"stage\": \"<chave da etapa>\" }. create_booking NAO e aceito aqui (para restringir agendas use config.booking_event_type_ids no assistente via captain_assistants_update). O binding so COLA se a ferramenta estiver mencionada como [Rotulo](tool://slug) na instrucao; senao e podado no salvamento. IDs de outra conta sao descartados (re-escopo por conta)."
5863
5891
  }
5864
5892
  ],
5865
5893
  "returns": "assistente AI atualizado",
@@ -5872,7 +5900,8 @@
5872
5900
  "lionchat_captain_assistants_list",
5873
5901
  "lionchat_captain_assistants_create",
5874
5902
  "lionchat_captain_assistants_show"
5875
- ]
5903
+ ],
5904
+ "body_wrapper": "scenario"
5876
5905
  },
5877
5906
  {
5878
5907
  "id": "lionchat_captain_assistants_destroy_1",
@@ -14492,6 +14521,13 @@
14492
14521
  "location": "body",
14493
14522
  "required": true,
14494
14523
  "description": "Componentes do template"
14524
+ },
14525
+ {
14526
+ "name": "variable_mapping",
14527
+ "type": "object",
14528
+ "location": "body",
14529
+ "required": false,
14530
+ "description": "Opcional. Mapeia variaveis {{N}} do corpo a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta, fica salvo localmente). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Variavel sem mapping continua manual (digitada no envio). Fontes/campos: contact/name (Nome completo), contact/name.split.first (Primeiro nome), contact/name.split[1..] (Sobrenome), contact/phone_number, contact/email, conversation/assignee.name (Atendente), conversation/team.name (Equipe), account/name, ou contact/custom_attributes.CHAVE para campo personalizado."
14495
14531
  }
14496
14532
  ],
14497
14533
  "returns": "template WhatsApp criado (com novo ID)",
@@ -14611,6 +14647,13 @@
14611
14647
  "location": "body",
14612
14648
  "required": false,
14613
14649
  "description": "Componentes atualizados"
14650
+ },
14651
+ {
14652
+ "name": "variable_mapping",
14653
+ "type": "object",
14654
+ "location": "body",
14655
+ "required": false,
14656
+ "description": "Opcional. Mapeia variaveis {{N}} a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Mesmas fontes/campos do endpoint de criacao."
14614
14657
  }
14615
14658
  ],
14616
14659
  "returns": "{ success: true }",
@@ -14625,6 +14668,33 @@
14625
14668
  "lionchat_inboxes_whatsapp_templates_destroy"
14626
14669
  ]
14627
14670
  },
14671
+ {
14672
+ "id": "lionchat_inboxes_sync_templates",
14673
+ "method": "POST",
14674
+ "path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/sync_templates",
14675
+ "title": "Sincronizar Templates WhatsApp",
14676
+ "description": "Sincroniza (puxa) os templates de WhatsApp da Meta para a caixa, atualizando nome, corpo e status no LionChat. SOMENTE Channel::Whatsapp Cloud. Use logo apos criar/editar um template via API: a criacao retorna so id/status e o conteudo so aparece na tela depois deste sync.",
14677
+ "category": "Templates WhatsApp",
14678
+ "params": [
14679
+ {
14680
+ "name": "inbox_id",
14681
+ "type": "integer",
14682
+ "location": "path",
14683
+ "required": true,
14684
+ "description": "ID da inbox"
14685
+ }
14686
+ ],
14687
+ "returns": "{ message: 'Template sync initiated successfully' } — dispara o job de sincronizacao",
14688
+ "common_use_cases": [
14689
+ "Tornar visivel um template recem-criado via API (sai do estado vazio)",
14690
+ "Atualizar status (aprovado/recusado) dos templates"
14691
+ ],
14692
+ "related_tools": [
14693
+ "lionchat_inboxes_whatsapp_templates_create",
14694
+ "lionchat_inboxes_whatsapp_templates_create_2",
14695
+ "lionchat_inboxes_whatsapp_templates_list"
14696
+ ]
14697
+ },
14628
14698
  {
14629
14699
  "id": "lionchat_inboxes_csat_template_list",
14630
14700
  "method": "GET",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lionchat/mcp-server",
3
- "version": "0.5.5",
3
+ "version": "0.5.7",
4
4
  "description": "MCP server for LionChat API — 547 tools + 10 resources + 9 prompts. Audit-log aware, completion API, progress notifications.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",