Skip to main content
Glama
SistemaIntegra

I-Bot MCP

Official

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

ibot_list_chats

Lista conversas com filtros (status, não lidas, aparelho, arquivadas…)

ibot_read_messages

Lê o histórico de um chat (mensagens + anotações)

ibot_download_media

Baixa áudio, imagem e arquivo recebidos

ibot_get_chat_link / ibot_batch_get_chat_links

Busca o chat por telefone e devolve o link

ibot_read_custom_fields

Lê os campos personalizados do chat

ibot_read_tags

Lê as tags do chat

ibot_get_chat_status / ibot_get_message_status

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ó)

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

IBOT_API_KEY

Account ID

Configurações → API

IBOT_ACCOUNT_ID

Phone ID do número 1

Configurações → API (lista de números/aparelhos)

IBOT_PHONE_ID

Phone ID do número 2

Mesma tela, o outro número

IBOT_PHONE_ID_2

Servidor

O número depois do "s" no endereço do painel (s16 → 16)

IBOT_SERVER (padrão 16)

Domínio

ibotzap.com.br

IBOT_DOMAIN (padrão ibotzap.com.br)

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)

  1. Confirme node --version ≥ 18 e git --version.

  2. 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 chromium
  3. Descubra o caminho do index.js global (npm root -g + \ibot-mcp\index.js).

  4. 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.

  5. Adicione em ~/.claude.json, em mcpServers. Use node + caminho absoluto, não npx:

    "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>"
      }
    }
  6. Rode ibot-mcp login (ou node <caminho>\index.js login). Abre um navegador e o usuário faz login. A sessão fica em ~/.ibot-mcp/session.json.

  7. Peça para o usuário reiniciar o Claude Code e valide chamando ibot_list_chats com limit: 5.

Variáveis de ambiente

Variável

Obrigatória

Descrição

IBOT_SERVER

não (padrão 16)

Número do servidor do painel

IBOT_DOMAIN

não (padrão ibotzap.com.br)

Domínio do painel

IBOT_API_KEY

para as tools de status

Chave da API

IBOT_ACCOUNT_ID

para as tools de status

ID da conta

IBOT_PHONE_ID

para as tools de status

Phone ID do número 1

IBOT_PHONE_ID_2

recomendado

Phone ID do número 2

IBOT_DEVICE

não

Fixa um aparelho padrão nas leituras (vazio = todos)

IBOT_SESSION_PATH

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 login de novo.

  • As tools não aparecem: reinicie o Claude Code inteiro e confira o caminho do index.js em ~/.claude.json.


Integra Sistema · Licença MIT (ver LICENSE)

Available Tools

9 tools
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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYesURLs completas dos arquivos (campo arquivo.url das mensagens de ibot_read_messages)
dest_dirNoPasta local de destino (padrão: <pasta temporária do sistema>/ibot-media)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_statusA

Verifica o status do registro de um chat no I-Bot. Retorna: pending, fetched, done ou error. Quando done, inclui link do chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
phone_idNoPhone ID do número a consultar. Padrão: o primeiro número. Configurados: 67890
chat_add_idYesID do chat (ex: 699ce2eab27ac598c766e752), obtido por ibot_get_chat_link

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
phone_idNoPhone ID do número a consultar. Padrão: o primeiro número. Configurados: 67890
message_idYesID da mensagem

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFiltrar por nome do contato (busca parcial).
limitNoMá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.
deviceNoFiltrar 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.
offsetNoQuantos chats descartar do início da lista (padrão: 0). Use com limit para paginar uma varredura grande sem reprocessar o mesmo trecho.
statusNoFiltrar por status do chat.
archivedNoSe true, retorna SÓ os arquivados (o filtro do I-Bot é exclusivo, não soma com os ativos).
order_byNoOrdenação. Padrão: -updated (mais recentes). Use -new_messages para ordenar por não lidas.
favoritedNoSe true, mostra apenas chats favoritados.
departmentNoATENÇÃ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.
responsavelNoFiltrar 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_onlyNoSe true, mostra apenas chats com mensagens não lidas.
whatsapp_numberNoFiltrar por número WhatsApp (ex: 5511999990000).

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYesID do chat (hash de 24 caracteres). Obtido via ibot_get_chat_link ou ibot_list_chats.
only_filledNoSe true, retorna apenas os campos que têm valor preenchido.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoQuantidade máxima de mensagens a retornar (padrão: 50)
chat_idYesID do chat (hash, ex: 686ede5b2333cb755c57d1a5). Obtido via ibot_get_chat_link ou ibot_get_chat_status.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYesID do chat (hash de 24 caracteres).

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 9 tool updatesv1.0.0
    • First observedibot_batch_get_chat_links
    • First observedibot_download_media
    • First observedibot_get_chat_link
    • First observedibot_get_chat_status
    • First observedibot_get_message_status
    • First observedibot_list_chats
    • First observedibot_read_custom_fields
    • First observedibot_read_messages
    • First observedibot_read_tags

TDQS

A3.7/5.0

Scored across 9 tools

Disambiguation4/5

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).

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides 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 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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 npm
    MIT