I-Bot MCP
OfficialRead-only access to the account's WhatsApp conversations via I-Bot. Provides tools to list chats with filters (status, unread, device, archived), read chat message history and notes, download received media (audio, images, files), find a chat by phone number and get its link (individually or in batch), read custom fields and tags, and check the status of a chat or message. Supports multiple connected WhatsApp numbers with separate Phone IDs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@I-Bot MCPQuais conversas estão sem resposta no número 1 do I-Bot?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
I-Bot MCP — Integra Sistema
Conecta o WhatsApp do I-Bot ao Claude Code, em modo somente leitura. Depois de instalar, você pode pedir coisas como "quais conversas estão sem resposta?" ou "lê as últimas mensagens do cliente 31 99999-0000".
🔒 Somente leitura. Este MCP não envia mensagens, não altera contatos, campos, nomes ou notas e não dispara fluxos. Ele só consulta.
O que ele faz
Tool | O que faz |
| Lista conversas com filtros (status, não lidas, aparelho, arquivadas…) |
| Lê o histórico de um chat (mensagens + anotações) |
| Baixa áudio, imagem e arquivo recebidos |
| Busca o chat por telefone e devolve o link |
| Lê os campos personalizados do chat |
| Lê as tags do chat |
| Consulta o status de um chat ou de uma mensagem (API oficial) |
Related MCP server: WhatsApp MCP
⚠️ Importante: a conta I-Bot tem 2 números
Hoje a conta I-Bot tem dois números de WhatsApp conectados, e cada número tem o próprio Phone ID.
Configure os dois (IBOT_PHONE_ID e IBOT_PHONE_ID_2). Com só um, o Claude avisa que falta o segundo.
Quando for pedir algo ao Claude, diga de qual número está falando. Assim ele não mistura conversas dos dois aparelhos.
Passo a passo de instalação
1. Instale o que precisa (uma vez só)
Node.js 18 ou superior. Instale e reinicie o computador.
2. Pegue os dados no painel do I-Bot
Entre no painel (https://s16.ibotzap.com.br) com um usuário administrador e vá em Configurações → API. Anote:
Dado | Onde fica | Variável |
API Key (chave da API) | Configurações → API |
|
Account ID | Configurações → API |
|
Phone ID do número 1 | Configurações → API (lista de números/aparelhos) |
|
Phone ID do número 2 | Mesma tela, o outro número |
|
Servidor | O número depois do "s" no endereço do painel ( |
|
Domínio |
|
|
Se não tiver acesso a essa tela, peça esses dados ao responsável pelo I-Bot na Integra. Cuidado: a API Key dá acesso ao WhatsApp da conta. Não poste em grupo e não coloque em nenhum arquivo do repositório.
3. Peça ao Claude Code para instalar
Abra o Claude Code e cole o texto abaixo:
Instale o I-Bot MCP da Integra Sistema (https://github.com/SistemaIntegra/ibot-mcp).
Siga a seção "Roteiro de instalação (para o Claude)" do README de ponta a ponta.
Me peça os dados do I-Bot: API Key, Account ID, Phone ID do número 1 e Phone ID do número 2.
A conta tem DOIS números: configure os dois Phone IDs, não só um.
Regras: nunca me peça senha (o login no painel eu faço na janela do navegador);
nunca exiba minha API Key em resposta; só diga que terminou depois de testar de verdade.4. Faça o login no painel
Uma janela de navegador vai abrir sozinha. Faça login no I-Bot normalmente. A sessão fica salva na sua máquina. Depois feche e abra o Claude Code (o app inteiro).
5. Teste
Peça: "Lista os 5 chats mais recentes do I-Bot, separando por número." Se aparecerem os chats, está funcionando. 🎉
Roteiro de instalação (para o Claude)
Confirme
node --version≥ 18 egit --version.Clone e instale globalmente:
git clone https://github.com/SistemaIntegra/ibot-mcp.git "%USERPROFILE%\ibot-mcp" cd "%USERPROFILE%\ibot-mcp" && npm install && npm install -g . npx playwright install chromiumDescubra o caminho do
index.jsglobal (npm root -g+\ibot-mcp\index.js).Peça ao usuário API Key, Account ID, Phone ID do número 1 e Phone ID do número 2. São dois números, então insista no segundo.
Adicione em
~/.claude.json, emmcpServers. Usenode+ caminho absoluto, nãonpx:"ibot": { "type": "stdio", "command": "node", "args": ["<npm root -g>\\ibot-mcp\\index.js"], "env": { "IBOT_SERVER": "16", "IBOT_DOMAIN": "ibotzap.com.br", "IBOT_API_KEY": "<api key>", "IBOT_ACCOUNT_ID": "<account id>", "IBOT_PHONE_ID": "<phone id número 1>", "IBOT_PHONE_ID_2": "<phone id número 2>" } }Rode
ibot-mcp login(ounode <caminho>\index.js login). Abre um navegador e o usuário faz login. A sessão fica em~/.ibot-mcp/session.json.Peça para o usuário reiniciar o Claude Code e valide chamando
ibot_list_chatscomlimit: 5.
Variáveis de ambiente
Variável | Obrigatória | Descrição |
| não (padrão | Número do servidor do painel |
| não (padrão | Domínio do painel |
| para as tools de status | Chave da API |
| para as tools de status | ID da conta |
| para as tools de status | Phone ID do número 1 |
| recomendado | Phone ID do número 2 |
| não | Fixa um aparelho padrão nas leituras (vazio = todos) |
| não | Caminho alternativo do arquivo de sessão |
A leitura das conversas usa só a sessão do painel. A API Key, o Account ID e os Phone IDs são usados pelas tools de status.
Problemas comuns
"Sessão expirada": rode
ibot-mcp loginde novo.As tools não aparecem: reinicie o Claude Code inteiro e confira o caminho do
index.jsem~/.claude.json.
Integra Sistema · Licença MIT (ver LICENSE)
Available Tools
9 toolsibot_batch_get_chat_linksA
Busca múltiplos contatos no I-Bot de uma vez. Usa a API interna do painel (sem navegador, ~1s por contato) e cai no Playwright se ela falhar. Aceita filtro por aparelho (padrão: IBOT_DEVICE, ou todos). Retorna lista com chat_id e link para cada contato encontrado.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | Aparelho (número conectado) no I-Bot: nome, parte do nome ou id. Padrão: IBOT_DEVICE; sem ela, busca em todos. | |
| archived | No | Se true, quando não encontrar entre os não arquivados, tenta também os arquivados/fechados (padrão: true). | |
| contacts | Yes | Lista de contatos para buscar. Máximo 50 por chamada. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does credibly: it discloses the internal-API transport (no browser, ~1s per contact) and the Playwright fallback, plus what the result contains (chat_id and link). It omits auth/permission needs and rate/limit behavior (the 50-item cap lives only in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose before the transport/fallback detail and the return shape. Every sentence adds information; slight overlap between the description's device note and the schema's identical wording is the only redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch tool with no annotations and no output schema, the description supplies the essentials: batch scope, transport and fallback, device filtering, and the shape of the return. Missing only permission requirements and the call-size ceiling, the latter covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents device, archived, and contacts. The description restates the device default (IBOT_DEVICE, or all) but adds no format or edge-case semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Busca múltiplos contatos no I-Bot de uma vez') and makes the batch scope explicit, which distinguishes it from the singular sibling ibot_get_chat_link. It does not name that sibling directly, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage via 'de uma vez' (batch) and explains the device filter defaults and the archived fallback, which is real operational context. However it never states when to prefer this over the single-contact ibot_get_chat_link or any when-not condition, so guidance remains inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibot_download_mediaA
Baixa mídia (áudio/imagem/vídeo/documento) das mensagens do I-Bot para o disco local. Passe as URLs do campo arquivo.url que ibot_read_messages retorna. Não requer sessão nem login: o S3 do painel exige apenas o header Referer (medido 29/08/2026). Se a URL registrada falhar, tenta as pastas alternativas do bucket (received/sent/attached/unattached). Retorna caminho e tamanho de cada arquivo salvo.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | URLs completas dos arquivos (campo arquivo.url das mensagens de ibot_read_messages) | |
| dest_dir | No | Pasta local de destino (padrão: <pasta temporária do sistema>/ibot-media) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that no session or login is needed, that the panel's S3 requires only a Referer header (with an observed/measured date), and that failures trigger alternative bucket-folder attempts. It does not cover failure modes, rate limits, or overwrite behavior of existing files, so it is not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with what the tool does, then the input source, then auth behavior, then fallback. Each sentence carries information, though the dated measurement note is slightly incidental.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description compensates by stating the return values (path and size of each saved file). Combined with the auth and retry disclosures and a fully documented two-parameter schema, nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (urls, dest_dir) are already documented inline, giving a baseline of 3. The description reinforces that URLs must come from ibot_read_messages' arquivo.url field but adds no syntax, format, or default detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (download) and resource (media: audio/image/video/document from I-Bot messages) plus the destination (local disk). It explicitly names ibot_read_messages as the source of the URLs, so an agent can separate it from the other ibot_* readers without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent exactly what input to feed it – the URLs from the `arquivo.url` field of ibot_read_messages – and explains the fallback behavior when a URL fails (tries received/sent/attached/unattached bucket folders). It does not state when NOT to use it or name a competing tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibot_get_chat_linkA
Busca um contato existente no I-Bot pelo número de telefone. Usa a API interna do painel (sem navegador, <1s) e cai no Playwright se ela falhar. Tenta múltiplos formatos de número e cobre chats ativos e arquivados. Aceita filtro por aparelho (padrão: IBOT_DEVICE, ou todos) — o mesmo número pode existir em outro aparelho com conversa diferente. Retorna chat_id e link direto. NÃO envia mensagem. Requer a sessão do painel (rode ibot-mcp login primeiro).
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | Aparelho (número conectado) no I-Bot: nome, parte do nome ou id. Padrão: IBOT_DEVICE; sem ela, busca em todos. O mesmo número pode existir em outro aparelho com conversa diferente — em conta com vários aparelhos, filtre. | |
| archived | No | Se true, quando não encontrar entre os não arquivados, tenta também os arquivados/fechados (padrão: true). | |
| chat_number | Yes | Número do telefone para buscar (ex: 5511999990000, +55 11 99999-0000, 999990000). Aceita formatos variados — a busca tenta múltiplas variantes automaticamente. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to lean on, the description carries the full behavioral burden: it discloses the internal API path and <1s latency, a Playwright fallback on failure, coverage of both active and archived chats, automatic multi-format number matching, the auth prerequisite, and the absence of side effects. That is unusually rich disclosure for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool does, then packs latency, fallback, scope, output, and auth into short clauses with no filler. It is dense with clauses, but each one carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter read tool with no annotations and no output schema, the description covers return values (chat_id and link), auth requirements, latency, fallback path, and search scope. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so device, archived, and chat_number are already documented in the schema. The description largely restates those (device default IBOT_DEVICE, archived fallback, multiple formats) rather than adding new syntax or constraints, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: searches an existing I-Bot contact by phone number and returns chat_id plus a direct link, explicitly noting it does NOT send a message. This makes the operation unmistakable, though it never names a sibling (e.g. ibot_batch_get_chat_links or ibot_list_chats) to differentiate scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: requires the panel session (run `ibot-mcp login` first) and advises filtering by device when an account has several, in case the same number exists elsewhere. It does not, however, state when to prefer this over the batch sibling or list_chats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibot_get_chat_statusA
Verifica o status do registro de um chat no I-Bot. Retorna: pending, fetched, done ou error. Quando done, inclui link do chat.
| Name | Required | Description | Default |
|---|---|---|---|
| phone_id | No | Phone ID do número a consultar. Padrão: o primeiro número. Configurados: 67890 | |
| chat_add_id | Yes | ID do chat (ex: 699ce2eab27ac598c766e752), obtido por ibot_get_chat_link |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the possible return states and that "done" carries the chat link, which is genuine behavioral context. It does not state that the operation is read-only, nor any auth or rate-limit behavior, leaving gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler, and the core purpose is front-loaded ahead of the return-value detail. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must cover return values and it does list all four states plus the chat link for "done". It is nearly complete for a simple status lookup; only auth/polling guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: chat_add_id is documented with an example and its origin (obtained via ibot_get_chat_link), and phone_id has a default. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Verifica") and resource ("status do registro de um chat"), and the return values (pending, fetched, done, error) make the scope concrete. It implicitly separates itself from the sibling ibot_get_message_status by operating on a chat rather than a message, though it does not name that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The status values (pending, fetched, done, error) imply a polling workflow after a chat registration, so usage is inferable. However, the description never states when to call this versus ibot_get_chat_link or ibot_get_message_status, and gives no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibot_get_message_statusC
Consulta o status de entrega de uma mensagem enviada pelo I-Bot.
| Name | Required | Description | Default |
|---|---|---|---|
| phone_id | No | Phone ID do número a consultar. Padrão: o primeiro número. Configurados: 67890 | |
| message_id | Yes | ID da mensagem |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. "Consulta" implies a read-only operation, but the description says nothing about permissions, rate limits, error behavior, or what statuses are returned. For a returning-status query tool this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no filler. It is well front-loaded, though it is arguably too terse given the gaps elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple query with 100% schema coverage and a required message_id, the definition is minimally viable. However, with no output schema it could explain what delivery statuses mean, and it omits where the message_id originates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so message_id and phone_id are already documented in the schema, including the phone_id default note. The description adds no parameter meaning beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Consulta") and resource ("status de entrega de uma mensagem") for the I-Bot message-status tool. It is clearly distinct from siblings like ibot_get_chat_status, though it does not explicitly name an alternative to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states what the tool does but gives no when-to-use context, no prerequisites (e.g. where message_id comes from), and no mention of alternatives. Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibot_list_chatsA
Lista e filtra chats do painel I-Bot. Usa a API interna do painel (sem navegador, ~1s; 250 chats em 1,8s) e cai no Playwright se ela falhar. Filtra por APARELHO (padrão: IBOT_DEVICE; vazio = todos), status, não lidas, arquivados, favoritos, tag, nome e número. Retorna nome, status, tags, aparelho, última mensagem, timestamp e não lidas. O retorno SEMPRE diz qual corte ocorreu (fim real da lista / teto do painel / limite pedido) — nunca corta em silêncio. TETO: a API interna PAGINA (medido 17/08/2026: 250 chats distintos numa consulta), mas o Playwright de fallback trava em 100 POR CONSULTA sem paginação (medido 14/08/2026: nenhum limit/offset traz o chat 101) — se o retorno avisar teto do painel, varrer além exige FATIAR por filtro e cruzar wa_chat_id. FORÇA DOS EIXOS, medida em produção: device é o mais forte (cada aparelho é uma janela própria; único jeito de isolar o inbound de UM número) > department (que é TAG, uma janela por tag) > status × order_by, que satura rápido — cruzar 6 status × 8 ordenações bate o teto em quase toda fatia e deixa um MIOLO inalcançável. Três armadilhas medidas: (1) whatsapp_number dá FALSO NEGATIVO — o chat existe, wa_chat_id igual ao buscado, e a busca volta vazia; a causa é o filtro de arquivados ser EXCLUSIVO (numa conta madura quase todo o histórico está arquivado), e leads já foram dados como 'sem chat' tendo chat ABERTO. Pela API interna isso está resolvido (busca por número que não acha nada refaz o pass entre arquivados e avisa), mas no fallback Playwright a armadilha continua: nunca conclua 'não tem chat' sem repetir com archived=true; (2) a ordenação padrão é por última mensagem, que AFUNDA o chat sem resposta (a última mensagem é a do cliente, antiga) — para caçar conversa parada sem dono use '-created', e para achar quem nem isso alcança use 'updated' (ascendente), que foi o que revelou leads invisíveis a 4 ciclos de varredura; (3) o nome do contato aqui é o do WhatsApp, não o do CRM ('.', '', nome de empresa) — buscar pelo nome que está no CRM dá falso negativo. SEMPRE rode um controle positivo (um chat de estado já conhecido) na mesma virada: sem ele não há como distinguir 'não existe' de 'a fatia não alcança'.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filtrar por nome do contato (busca parcial). | |
| limit | No | Máximo de chats a retornar (padrão: 50, máximo: 1000). Acima de 100 o scroll precisa carregar mais lotes: conte ~2s a cada 100. | |
| device | No | Filtrar pelo APARELHO (número de origem) que recebe o chat. Padrão: IBOT_DEVICE; vazio ('') lista de TODOS os aparelhos. Aceita trecho do rótulo (ex.: 'comercial', os últimos dígitos do número) ou o id bruto do aparelho. É o corte mais forte que o painel oferece — o mesmo número pode existir em dois aparelhos com conversas DIFERENTES, e no Playwright cada aparelho é uma janela própria de 100. Não casou = ERRO explícito com a lista real de aparelhos, nunca lista sem filtro se passando por lista filtrada. | |
| offset | No | Quantos chats descartar do início da lista (padrão: 0). Use com limit para paginar uma varredura grande sem reprocessar o mesmo trecho. | |
| status | No | Filtrar por status do chat. | |
| archived | No | Se true, retorna SÓ os arquivados (o filtro do I-Bot é exclusivo, não soma com os ativos). | |
| order_by | No | Ordenação. Padrão: -updated (mais recentes). Use -new_messages para ordenar por não lidas. | |
| favorited | No | Se true, mostra apenas chats favoritados. | |
| department | No | ATENÇÃO — este filtro é de TAG, não de departamento (os labels de checkbox do painel são todos tags, ex.: 'Lead Quente', 'Cliente | Plano Gold'). O nome do parâmetro é herança e engana; para filtrar por departamento de verdade use `responsavel`. Vale como eixo de fatiamento: cada tag é uma janela própria de 100. Não casou = ERRO explícito com as tags disponíveis. | |
| responsavel | No | Filtrar por QUEM está com o chat — é o dropdown 'Usuário/Departamento' do painel. Aceita vários de uma vez (regra OU: devolve chat de qualquer um da lista), misturando PESSOA e DEPARTAMENTO livremente, porque no painel os dois vivem no mesmo seletor. Ex: ["Maria Souza", "Financeiro"]. Aceita nome completo, parte do nome, e-mail ou o id. Use ["sem responsável"] para os chats que NINGUÉM pegou — é o eixo pra caçar conversa órfã, e combina bem com order_by='-created'. Nome que não existe ou que casa com mais de um = ERRO explícito com a lista real, nunca lista sem filtro se passando por filtrada. NÃO funciona no fallback Playwright: se a API do painel estiver fora, a tool devolve erro em vez de lista sem esse filtro. | |
| unread_only | No | Se true, mostra apenas chats com mensagens não lidas. | |
| whatsapp_number | No | Filtrar por número WhatsApp (ex: 5511999990000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so exceptionally: it discloses the internal-API-first architecture with Playwright fallback, latency figures (~1s; 250 chats in ~1.8s), the measured pagination ceilings (250 via API, hard-stopped at 100 per query in the Playwright fallback), and the guarantee that truncation is always reported rather than silent. It also documents failure semantics (explicit error with the real device/tag list instead of an unfiltered list), a known false-negative mode for whatsapp_number, the exclusive (non-additive) archived filter, and that `responsavel` is unsupported in fallback mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, mechanism/cost, filters, return shape and the no-silent-truncation guarantee are correctly front-loaded ahead of the caveats, and every paragraph carries operational content. It is nonetheless a dense block with heavy capitalization and long parenthetical measurements; a tighter split between 'how to call' and 'how to run a sweep' would read better, though little is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, zero-required, no-output-schema tool with no annotations, the description supplies everything an agent needs: return field list, truncation reporting, fallback behavior, error semantics, per-axis semantics, and documented degradation cases. Nothing material for correct invocation is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description still adds meaning the schema cannot, notably the relative strength of the slicing axes, the trap that `department` is really a tag filter, the ordering pitfall where the default -updated buries unanswered chats, and the archived-filter false negative on whatsapp_number. It does not add syntax or format detail beyond the schema, which is why it sits at 4 rather than 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a precise verb+resource ('Lista e filtra chats do painel I-Bot') and immediately scopes the surface area (device, status, unread, archived, favorited, tag, name, number, plus the returned fields). An agent can tell this is the read/list entry point of the I-Bot panel without opening the schema, and it is clearly distinct from the sibling read tools (message status, chat links, custom fields, tags).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description goes far beyond 'when to use it': it ranks slicing axes by measured strength (device > department/tag > status×order_by), prescribes specific combinations for specific goals ('para caçar conversa parada sem dono use -created', 'sem responsável' for orphan chats), and warns when NOT to trust a result ('nunca conclua não tem chat sem repetir com archived=true'). It also mandates a positive control in the same run, which is explicit operational guidance rather than implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibot_read_custom_fieldsA
Lê os campos personalizados de um chat no I-Bot (Empresa, Email, CRM, etc). Usa a API interna do painel — não abre navegador. Latência: <1s. Requer session.json (execute login.js primeiro).
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | ID do chat (hash de 24 caracteres). Obtido via ibot_get_chat_link ou ibot_list_chats. | |
| only_filled | No | Se true, retorna apenas os campos que têm valor preenchido. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses the transport (internal panel API, no browser), expected latency (<1s), and an auth prerequisite (session.json, run login.js first). It does not explicitly confirm read-only/non-destructive behavior or rate limits, leaving a modest gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action before operational details (API, latency, auth). Every sentence adds operational value; there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read with no output schema, the definition covers purpose, auth prerequisite, and transport mechanism adequately. The only modest gap is return-format behavior, which is minor for a straightforward field read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both chat_id and only_filled are already fully documented by the schema. The description adds no parameter-specific syntax or format detail beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (reads) and resource (custom fields of a chat) with concrete examples (Company, Email, CRM), which distinguishes it from the sibling ibot_read_tags. It doesn't explicitly name the alternative, so it stops short of a 5, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use vs when-not guidance, and it doesn't contrast with ibot_read_tags or ibot_read_messages. It does hint at usage context by noting the auth prerequisite and that chat_id comes from ibot_get_chat_link or ibot_list_chats, which is implied routing rather than stated guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibot_read_messagesA
Lê o histórico de mensagens de um chat no I-Bot, incluindo as ANOTAÇÕES internas na mesma linha do tempo. Usa a API interna do painel (sem navegador, ~250ms) e cai no Playwright se ela falhar. O histórico completo é acessível: aumente o limit e a resposta avisa quando ainda há mensagem mais antiga. Requer session.json (execute login.js primeiro).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Quantidade máxima de mensagens a retornar (padrão: 50) | |
| chat_id | Yes | ID do chat (hash, ex: 686ede5b2333cb755c57d1a5). Obtido via ibot_get_chat_link ou ibot_get_chat_status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the internal-API path (~250ms, no browser), a Playwright fallback on failure, the auth prerequisite, and pagination behavior ('a resposta avisa quando ainda há mensagem mais antiga'). It stops short of confirming read-only/side-effect-free semantics or error detail beyond the fallback.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then layers fallback, pagination and prerequisite in a compact block with no filler. Slightly dense but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must cover return behavior, and it does note the response flags remaining older messages; auth and failure handling are also covered. A full account of return shape or error cases is still absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented; baseline is 3. The description adds a little meaning to 'limit' by tying it to retrieving the complete history, but no format or interaction detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lê o histórico de mensagens de um chat'), and adds scope beyond the name by noting internal annotations appear in the same timeline. It does not explicitly differentiate itself from siblings like ibot_get_message_status, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: increase the limit to reach full history, and run login.js first to obtain session.json. It never names an alternative tool or a when-not-to-use condition, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibot_read_tagsA
Lê as tags aplicadas a um chat no I-Bot. Usa a API interna do painel — não abre navegador. Latência: <1s. Requer session.json.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | ID do chat (hash de 24 caracteres). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose meaningful traits: it uses the panel's internal API, opens no browser, has sub-second latency, and requires session.json (an auth prerequisite). It does not describe failure modes (e.g., expired session) or the response shape, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short clauses, front-loaded with purpose followed by mechanism, latency, and prerequisite. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema and no annotations, the description covers mechanism, auth requirement, and latency, which is most of what the agent needs. It stops short of describing return values or error behavior, but no output schema exists to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single chat_id parameter (hash of 24 characters), so the schema already fully documents it. The description adds no format or constraint detail beyond the schema, which is the expected baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lê/Reads) and resource (tags) scoped to a chat in I-Bot, so the agent knows exactly what it retrieves. No sibling also reads tags, so no explicit differentiation is needed, but the description does not contrast with the read-oriented siblings either.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is only implied — the fact that it reads tags from a specific chat suggests when it applies, but there is no explicit when-to-use vs when-not or alternative routing. The mechanism notes (internal API, no browser) describe how rather than when.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v1.0.0- First observed
ibot_batch_get_chat_links - First observed
ibot_download_media - First observed
ibot_get_chat_link - First observed
ibot_get_chat_status - First observed
ibot_get_message_status - First observed
ibot_list_chats - First observed
ibot_read_custom_fields - First observed
ibot_read_messages - First observed
ibot_read_tags
TDQS
Scored across 9 tools
Each tool maps to a distinct target: message status, chat status, chat lookup, batch lookup, message history, media download, chat listing, custom fields, and tags. The only mild overlap is ibot_get_chat_status vs ibot_get_chat_link (both keyed on a chat) and get_chat_link vs its batch sibling, but the descriptions clearly separate them (status of a registration vs resolving a phone number to a chat_id/link).
All nine tools use the same ibot_ prefix plus a consistent snake_case verb_noun pattern (get_chat_status, read_messages, list_chats, download_media). The verb choice is semantically appropriate in each case (get/read/list/batch) rather than arbitrary, with no style mixing.
Nine tools is well within the ideal 3-15 range and each one covers a distinct capability of the panel (chats, messages, media, tags, fields, status, lookup, bulk lookup). Nothing appears redundant or padded.
The read surface is thorough: chats, message history (including internal notes), media, tags, custom fields, delivery and registration status, plus a batch variant for lookups. However the set is entirely read-only — there is no send-message, tag/custom-field write, archive, or mark-as-read operation, which is a notable gap for a WhatsApp bot panel (ibot_get_chat_link explicitly notes it does not send messages, implying no send tool exists).
Maintenance
Related MCP Connectors
Let Claude or ChatGPT search, read and send your WhatsApp messages over MCP. OAuth sign-in.
Drive your real WhatsApp inbox from Claude — send, reply, label, assign, and triage via TimelinesAI.
WhatsMCP connects Claude and other MCP-compatible AI agents directly to WhatsApp. Send and receive text, images, documents, and voice notes; manage groups (create, add/remove members, promote admins); look up contacts and profiles; follow channels; and read call and message history — all through a standard MCP interface. For voice use cases, WhatsMCP offers SIP-based calling plans (inbound-only, or full inbound/outbound) so AI voice agents can answer and place WhatsApp calls, plus low-latency WebSocket integrations with voice agent providers like ElevenLabs. Multiple WhatsApp accounts can be paired and managed per workspace, with webhook support for real-time inbound message delivery to your own infrastructure.
WhatsApp CRM for AI agents: search contacts, read chats, manage the sales pipeline, send messages.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Claude to read and search WhatsApp messages, transcribe voice notes, and analyze images locally through a read-only bridge.19MIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude to interact with WhatsApp: read chats, search messages, send messages with a mandatory confirmation step, and transcribe voice notes locally, all with encrypted storage and prompt-injection scrubbing.MIT
- AlicenseNot gradedqualityBmaintenanceProvides Claude with read-only access to your WhatsApp chat history entirely on your local machine, enabling natural language search, summarization, and retrieval of messages without sending data to the cloud.7 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to read, search, and reply to your personal WhatsApp messages by linking as an extra device, with support for chat history, full-text search, media downloads, and sending messages or files.28 npmMIT