Skip to main content
Glama

WhatsMCP: MCP for WhatsApp

List WhatsApp Accounts

wa_list_accounts
Read-only

List the WhatsApp accounts available to you. You need it only when no message row gives you the account_id — before a first message to a number you have no messages with, or to see why an account is not working; when replying, reuse the row's account_id. An account is only usable while its state is "connected" (status "live"); otherwise status and what_to_do say why and what to do.

Input Schema

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault
accountsYesthe accounts this API key can use — WhatsApp numbers and Telegram accounts; each says which in backend

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / accounts / items / properties / last_inbound_at
      Added value: +{
      +  "description": "the time this number last received a live (non-history) message, across all chats, RFC3339; absent when none is stored. Read it alongside status: a live number that is receiving has a recent last_inbound_at, so an empty message window with a recent last_inbound_at is a quiet conversation, not a missed one",
      +  "type": "string"
      +}
  2. Changed4 schema fields changed
    • changedOutput schema / properties / accounts / description
      Previous value: -"the WhatsApp accounts this API key can use"New value: +"the accounts this API key can use — WhatsApp numbers and Telegram accounts; each says which in backend"
    • changedOutput schema / properties / accounts / items / properties / backend / description
      Previous value: -"the account's backend: official (WhatsApp Business API) or personal (a linked device)"New value: +"the account's backend: official (WhatsApp Business API), personal (a WhatsApp linked device) or telegram (a Telegram user account; its chats and senders are Telegram ids of the form <id>@telegram)"
    • changedOutput schema / properties / accounts / items / properties / push_name / description
      Previous value: -"the display name WhatsApp shows for this account"New value: +"the display name WhatsApp (or Telegram) shows for this account"
    • changedOutput schema / properties / accounts / items / properties / status / description
      Previous value: -"whether the number is actually working: live, connecting, starting, not_running, whatsapp_down, suspended, pairing, unlinked or locked"New value: +"whether the number is actually working: live, connecting, starting, not_running, whatsapp_down (telegram_down for a Telegram account), suspended, pairing, unlinked or locked"
  3. Changed4 schema fields changed
    • addedOutput schema / properties / accounts / items / properties / status
      Added value: +{
      +  "description": "whether the number is actually working: live, connecting, starting, not_running, whatsapp_down, suspended, pairing, unlinked or locked",
      +  "type": "string"
      +}
    • addedOutput schema / properties / accounts / items / properties / status_reason
      Added value: +{
      +  "description": "the detail when it is not live, e.g. no_egress, no_plan, stopped",
      +  "type": "string"
      +}
    • addedOutput schema / properties / accounts / items / properties / status_since
      Added value: +{
      +  "description": "when it stopped working, RFC3339, when known",
      +  "type": "string"
      +}
    • addedOutput schema / properties / accounts / items / properties / what_to_do
      Added value: +{
      +  "description": "what is wrong and what to do, when it is not live; tell the user",
      +  "type": "string"
      +}
  4. Changed3 schema fields changed
    • addedOutput schema / properties / accounts / items / properties / backend
      Added value: +{
      +  "description": "the account's backend: official (WhatsApp Business API) or personal (a linked device)",
      +  "type": "string"
      +}
    • addedOutput schema / properties / accounts / items / properties / features
      Added value: +{
      +  "description": "the functions this number supports, e.g. messaging, templates, groups, calls; call only tools whose function is listed here",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": [
      +    "null",
      +    "array"
      +  ]
      +}
    • changedOutput schema / properties / accounts / items / required
      Previous value: -[
      -  "account_id",
      -  "phone",
      -  "push_name",
      -  "state"
      -]New value: +[
      +  "account_id",
      +  "phone",
      +  "push_name",
      +  "state",
      +  "backend",
      +  "features"
      +]
  5. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered; the description instead adds the non-obvious usability rule that an account is only usable while state is 'connected' (status 'live') and that status/what_to_do carry the diagnosis. It does not address any rate limits or what an empty account list means, but the state gating is real behavioral context beyond structured fields.

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 sentences, front-loaded with purpose then immediately the usage rule. The middle sentence is dense with em-dashes but every clause carries a decision rule; nothing is redundant 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?

An output schema exists, so return values need not be enumerated, and the description still names the salient fields an agent must act on (state, status, what_to_do). For a zero-parameter read tool, this is complete enough to call correctly on the first attempt.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the schema is closed (additionalProperties: false) and fully covered. Baseline 4 applies, with no parameter-level gap.

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 and resource ('List the WhatsApp accounts') plus scope ('available to you'), which cleanly separates it from the many wa_list_* siblings over messages, groups, contacts and templates.

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?

Gives an explicit trigger ('only when no message row gives you the account_id'), two concrete scenarios (first message to an unknown number, diagnosing a broken account), and an explicit exclusion ('when replying, reuse the row's account_id'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources