Skip to main content
Glama
Maheidem

WAHA WhatsApp MCP Server

by Maheidem

WAHA WhatsApp MCP Server

npm License: MIT Node.js

A TypeScript Model Context Protocol stdio server for WhatsApp through a unified WAHA backend. It exposes 28 tools for messages, contacts, media, transcription, speech generation, automatic voice-note replies, message-store search, and per-conversation media automation.

Architecture

MCP client → this package → unified backend /api (:8200)
                                  ├─ PostgreSQL message store
                                  ├─ WAHA live proxy
                                  ├─ transcription and TTS providers
                                  └─ media analysis/archive worker

The MCP server only talks to the authenticated /api facade. It does not connect directly to WAHA, databases, Nextcloud, or model providers. LAN-only management routes for archive review and LLM provider administration are intentionally excluded.

This release targets waha-backend commit 46acc32 or a compatible newer build.

Related MCP server: WhatsApp MCP Server

Install

Claude Code

claude mcp add waha-whatsapp -- \
  env WAHA_API_URL=http://your-server:8200/api \
      WAHA_API_KEY=your-backend-api-key \
  npx -y @marcos-heidemann/waha-mcp-server

MCP JSON configuration

{
  "mcpServers": {
    "waha-whatsapp": {
      "command": "npx",
      "args": ["-y", "@marcos-heidemann/waha-mcp-server"],
      "env": {
        "WAHA_API_URL": "http://your-server:8200/api",
        "WAHA_API_KEY": "your-backend-api-key"
      }
    }
  }
}

Configuration

Variable

Required

Default

Description

WAHA_API_URL

no

http://localhost:8200/api

Unified backend API URL

WAHA_API_KEY

yes

Value sent as X-API-Key

WAHA_SESSION

no

default

WAHA session name

WAHA_SEND_DELAY_MS

no

1000

Minimum delay between outbound sends; non-negative integer

Older WAHA_STORE_* and WAHA_TRANSCRIPTION_* variables are no longer used. Those services are configured behind the unified backend.

Contact identifiers

Chat-targeting tools use a stable contactId:

  • Person: phone digits with country code, such as 5521999999999.

  • Group: the stable group JID ending in @g.us.

  • Legacy @c.us and @lid aliases remain accepted on routes where the backend supports them.

  • Imported chat IDs ending in @import work with message read/search, but not with the backend chat-summary route.

Use whatsapp_list_contacts to discover identifiers.

Tools (28)

Area

Tool

Purpose

Session

whatsapp_session_status

Connection and account presence

Session

whatsapp_account_info

Authenticated WhatsApp identity

Chats

whatsapp_list_chats

Live chat overview with previews

Chats

whatsapp_read_messages

Persistent history with live fallback and optional mark-read

Messaging

whatsapp_send_text

Rate-limited text send

Messaging

whatsapp_react

Add or remove a reaction

Messaging

whatsapp_edit_message

Edit an outgoing text message

Messaging

whatsapp_delete_message

Unsend a message

Messaging

whatsapp_forward_message

Copy stored text into another chat

Media

whatsapp_download_media

Return images/audio up to 10 MiB inline; save larger/other files in /tmp

Media

whatsapp_transcribe_audio

Transcribe with language and prompt hints

Media

whatsapp_generate_speech

Generate inline TTS audio; does not send it to WhatsApp

Contacts

whatsapp_check_number

Check whether a phone is registered

Contacts

whatsapp_list_contacts

Unified people and groups address book

Contacts

whatsapp_get_contact

Person or group detail

Store

whatsapp_search_messages

Search text plus indexed captions, OCR, summaries, tags, and documents

Store

whatsapp_contact_graph

Shared groups and mutual contacts

Store

whatsapp_chat_summary

Recent readable history, up to 100 messages

Store

whatsapp_stats

Activity totals and top chats/contacts

Store

whatsapp_import_chat

Import a local .zip/.txt WhatsApp export, up to 100 MiB

Auto-reply

whatsapp_auto_reply_enable

Enable person/group voice-note replies; optional contextual mode

Auto-reply

whatsapp_auto_reply_disable

Disable automatic voice-note replies

Auto-reply

whatsapp_auto_reply_status

Check enabled/found state

Auto-reply

whatsapp_auto_reply_list

List enabled people and groups

Automation

whatsapp_media_settings_get

Read per-conversation media policy

Automation

whatsapp_media_settings_update

Partially update capture/analysis/reply/archive policy

Automation

whatsapp_media_settings_disable

Turn every media automation flag off for a conversation

Automation

whatsapp_automation_health

Combined backend/listener/media/worker diagnostics

Media automation settings

whatsapp_media_settings_update supports:

  • captureEnabled

  • analyzeImages

  • analyzeDocuments

  • whatsappReplyEnabled

  • includeMediaInRecap

  • archiveMode: off, review, or auto

  • fixedNextcloudFolderId: integer or null

  • archiveConfirmationEnabled

  • allowSensitiveProcessing

  • askOnReview

Conversation settings are combined with backend-wide kill switches. Always inspect returned warnings or call whatsapp_automation_health before assuming a feature is active. The current public health/warning contract does not expose the global gates for recap inclusion or review questions.

Current backend limitations

  • Manual quote replies are not implemented by the public backend send route. Supplying replyTo returns an MCP error and sends nothing.

  • whatsapp_forward_message re-sends stored text. It does not preserve media, sender attribution, or WhatsApp's Forwarded label.

  • Some current GOWS media is still exposed as stored type chat; type filters may miss it until the backend public API switches to normalized_type.

  • Public chat summaries are not fully @lid alias-aware. Read/search are the safer choices for migrated histories.

  • Imported sender identities are history-only and are omitted from whatsapp_list_contacts; imported *@import chats support read/search but not live read receipts or chat summaries.

  • Durable staged-media preview, Nextcloud folder discovery, archive review/actions, and Motor/LLM configuration remain operator-only management functions.

Development and verification

npm ci
npm test                  # hermetic unit + backend-contract tests
npm run build
npm pack --dry-run

Releases are deployed by pushing a tag that exactly matches the package version, for example v2.4.0. The publish workflow repeats unit tests and the build before publishing to npm with the repository secret.

Live tests require WAHA_API_URL and WAHA_API_KEY:

npm run test:live                         # read-only suites
WAHA_TEST_LEVEL=2 npm run test:live       # includes self-chat writes
WAHA_TEST_LEVEL=3 npm run test:live       # includes configured contact writes

The default test and CI paths never contact WhatsApp.

Security

  • Treat the backend API key as a password; never commit it.

  • Sending through an unofficial WhatsApp API can trigger anti-abuse controls. Keep automation narrow and rate-limited.

  • Media and chat exports can contain sensitive data. Review automation policy before enabling analysis, replies, or archival.

  • Rotate any credential that has previously appeared in Git history.

License

MIT

Available Tools

22 tools
whatsapp_account_infoWhatsApp Account InfoA
Read-onlyIdempotent

Get information about the authenticated WhatsApp account.

Returns the phone number, display name, and WhatsApp ID of the connected account. Use this to verify which account is connected.

No parameters required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds the specific return values, confirming the safe read-only nature and providing behavioral context beyond annotations.

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?

Three short sentences, each adding value: purpose, returned data, and usage. No unnecessary words, front-loaded with the action.

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?

Given no parameters and comprehensive annotations, the description is sufficiently complete. It tells what it returns and a use case. It could mention error handling but not necessary for a getter.

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?

There are zero parameters, and the description explicitly states 'No parameters required,' which is helpful. Per rubric, baseline is 4 for no parameters.

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 description clearly states the verb 'Get information' and specifies the resource (authenticated WhatsApp account). It lists the specific fields returned (phone number, display name, WhatsApp ID), distinguishing it from siblings like send or delete tools.

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?

The description provides a clear use case: 'Use this to verify which account is connected.' It does not mention alternatives or when not to use, but the context is sufficient for a simple read-only tool.

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

whatsapp_auto_reply_disableDisable Auto-Reply TranscriptionA
Idempotent

Disable auto-reply with audio transcription for a contact.

Args:

  • phone: Phone number digits only, no @, no spaces (e.g., "5521986910666").

Returns:

  • status: "ok"

  • phone: the canonical phone

  • enabled: false

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneYesPhone digits only with country code (e.g., "5521986910666")

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate idempotentHint=true and destructiveHint=false, so the description adds value by specifying the return fields (status, phone, enabled: false). However, it does not disclose other behavioral traits like side effects or prerequisites.

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?

The description is extremely concise: a one-line purpose statement followed by structured Args and Returns sections. Every sentence is necessary and well-organized.

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?

With a single parameter fully documented in the schema, annotations present, and no output schema needed, the description is complete. It explains the tool's action, input format, and output structure.

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% with a description and pattern for the phone parameter. The description adds an example and format clarification ('digits only, no @, no spaces'), but this largely overlaps with the schema. Baseline 3 is appropriate.

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 description clearly states the verb 'Disable' and the resource 'auto-reply with audio transcription', along with the scope 'for a contact'. This distinguishes it from sibling tools like whatsapp_auto_reply_enable and whatsapp_auto_reply_list.

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?

No explicit guidance on when to use this tool vs alternatives. There is no mention of when not to use it or references to enable/list siblings. The usage is only implicitly understood from the name.

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

whatsapp_auto_reply_enableEnable Auto-Reply TranscriptionA
Idempotent

Enable auto-reply with audio transcription for a contact.

When the contact sends a voice note, the transcription is sent back as a quoted reply automatically. DM only — voice notes in groups are never auto-replied even if a member is flagged.

The flag is contact/phone-scoped, so it follows the contact across WhatsApp's @c.us → @lid JID transitions automatically — no need to re-flag when WhatsApp migrates the JID.

Args:

  • phone: Phone number digits only, no @, no spaces (e.g., "5521986910666"). Look up via whatsapp_list_contacts first if you only know the name.

Returns:

  • status: "ok" on success

  • phone: the canonical phone

  • enabled: true

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneYesPhone digits only with country code (e.g., "5521986910666")

TDQS

A4.9/5.0
Behavior5/5

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

Describes the scoping behavior (contact/phone-scoped, follows JID transitions) and idempotent nature (implied). Annotations already set idempotentHint=true and destructiveHint=false; description adds valuable context beyond these.

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?

Well-structured with summary, then detailed behavior, Args/Returns sections. Slightly verbose with the JID transition explanation, but all sentences add value. Front-loaded main purpose.

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?

Completely describes behavior, parameter, and return value. Without output schema, the Returns section covers needed info. Sibling tools context makes it stand out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaning beyond schema: specifies format 'Phone number digits only, no @, no spaces' with example, and advises looking up contact first. Schema coverage is 100%, but description enhances usability.

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?

Clearly states 'Enable auto-reply with audio transcription for a contact.' Verb 'enable', specific resource 'auto-reply transcription', and scope 'for a contact' distinguish it from sibling tools like disable, list, etc.

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?

Explicitly notes when to use: 'When the contact sends a voice note, the transcription is sent back as a quoted reply automatically.' Also excludes groups: 'DM only — voice notes in groups are never auto-replied even if a member is flagged.' Advises lookup via whatsapp_list_contacts first.

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

whatsapp_auto_reply_listList Contacts with Auto-Reply EnabledA
Read-onlyIdempotent

List every contact that currently has auto-reply transcription enabled, with display names from Google Contacts (when matched) or WhatsApp push name fallback.

Returns:

  • contacts: array of { phone, display_name, person_name, push_name }

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

The description adds value beyond the annotations by explaining the name resolution logic (Google Contacts with WhatsApp fallback) and the exact fields returned. Annotations already indicate read-only, non-destructive, idempotent behavior, so the description complements them well.

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?

The description is concise with two sentences: the first states the purpose and name resolution, the second details the return structure. No wasted words.

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 parameterless tool, the description is sufficiently complete. It explains the output structure, though it might be missing details like sorting or pagination, but those are not critical for this query.

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?

There are no parameters, so the baseline is 4. The description adds no parameter information, which is appropriate given the empty input 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?

The description clearly states the tool lists contacts with auto-reply enabled, using a specific verb ('list') and resource ('contacts with auto-reply'), and distinguishes from sibling tools like whatsapp_auto_reply_enable and whatsapp_list_contacts.

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?

While the purpose is clear, the description does not explicitly state when to use this tool versus alternatives, such as when to use whatsapp_list_contacts instead. The usage context is implied but not directly addressed.

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

whatsapp_chat_summaryChat SummaryA
Read-onlyIdempotent

Get a readable summary of recent messages in a WhatsApp chat, including sender names and timestamps.

This is optimized for readability — use whatsapp_read_messages for structured data with filtering, or whatsapp_search_messages for full-text search.

Args:

  • contactId: Phone digits for a person, or "*@g.us" for a group

  • limit: Number of recent messages to include (1-200, default 50)

Returns:

  • chat: Name, type, message count, date range

  • messages: Recent messages with sender name, body, timestamp, type

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesPhone digits for a person, or "*@g.us" for a group
limitNoNumber of recent messages to include (1-200, default 50)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the safety profile is clear. The description adds context by explaining the return structure (chat and messages objects) and that the output is human-readable. No contradictions exist. While it doesn't go beyond what annotations provide for safety, it adds value in output transparency.

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?

The description is highly concise with no wasted words: a one-sentence purpose, a one-sentence usage note, and clearly formatted Args and Returns sections. Every sentence serves a purpose, making it easy for an agent to parse.

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?

Despite lacking an output schema, the description provides a detailed textual description of the return value (chat info and messages with sender, body, timestamp, type). This fully compensates for the missing schema, and the tool's simplicity (2 parameters) means no further information is needed.

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%, and both parameters have schema descriptions. The description's 'Args' section repeats the schema descriptions verbatim without adding new information. Thus, the description adds no additional semantic value beyond the schema, meeting the baseline for high coverage.

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 description clearly states the tool's purpose: 'Get a readable summary of recent messages in a WhatsApp chat, including sender names and timestamps.' It also distinguishes from siblings by explicitly mentioning alternatives (whatsapp_read_messages for structured data, whatsapp_search_messages for full-text search), making the purpose unambiguous.

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 provides explicit usage guidance: 'This is optimized for readability — use whatsapp_read_messages for structured data with filtering, or whatsapp_search_messages for full-text search.' This clearly tells the agent when to use this tool versus alternatives, fulfilling the highest standard.

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

whatsapp_check_numberCheck WhatsApp NumberA
Read-onlyIdempotent

Check if a phone number is registered on WhatsApp.

Use this before sending a message to a number not yet in your address book.

Args:

  • phone: Phone number with country code, no spaces or dashes (e.g., "5511999999999")

Returns:

  • numberExists: true if registered on WhatsApp

  • contactId: The id to use as contactId in other tools (the same phone digits)

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneYesPhone number with country code, no spaces/dashes (e.g., "5511999999999")

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds value by explaining return values (numberExists, contactId) and the contactId's reuse in other tools, which annotations do not cover.

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?

The description is concise with a clear summary, usage note, and structured Args/Returns sections. Every sentence is purposeful with no fluff.

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 check tool with one parameter, the description covers purpose, usage context, parameter format, and return values. It could mention error handling but is largely complete given the low complexity.

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% with a parameter description. The description repeats the format example and adds a usage note, but does not add significant new semantic meaning beyond the schema. Baseline 3 is appropriate.

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 description clearly states 'Check if a phone number is registered on WhatsApp,' using a specific verb and resource. It distinguishes itself from sibling tools that handle other WhatsApp operations like account info or messaging.

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?

The description explicitly advises: 'Use this before sending a message to a number not yet in your address book,' providing clear context. It does not mention when not to use or alternatives, but the guidance is direct and useful.

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

whatsapp_contact_graphContact Social GraphA
Read-onlyIdempotent

Get social graph for a WhatsApp contact — shared groups, mutual connections.

Args:

  • phone: Phone number with country code (e.g., "5524999160115")

Returns:

  • groups: Groups this contact is in, with message counts

  • mutualContacts: Other contacts who share groups with this person

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneYesPhone number with country code (e.g., "5524999160115")

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds that the tool returns groups with message counts and mutual contacts, providing additional behavioral detail beyond annotations.

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?

The description is short, front-loaded with the purpose, and uses a clear args/returns structure. Every sentence adds value.

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 single-parameter, read-only tool with comprehensive annotations, the description is largely complete. It could optionally mention that the contact must exist, but overall it covers the key aspects.

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?

The input schema already fully describes the 'phone' parameter with an example. The description repeats the same information without adding new semantic meaning.

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 description states 'Get social graph for a WhatsApp contact — shared groups, mutual connections', specifying the verb and resource clearly. It distinguishes from sibling tools like whatsapp_get_contact by focusing on social connections.

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?

The description explains what the tool does and what it returns, allowing the agent to infer when to use it (when social graph info is needed). However, it does not explicitly mention when not to use it or compare to alternatives like whatsapp_list_contacts.

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

whatsapp_delete_messageDelete WhatsApp MessageA
Destructive

Delete (unsend) a message from a contact's chat.

Removes the message for everyone. WhatsApp shows "This message was deleted" in its place.

Args:

  • contactId: Contact id: phone digits for a person (e.g. "5521986910666"; survives @c.us↔@lid flips), or a group JID "*@g.us". Look up via whatsapp_list_contacts.

  • messageId: Message ID to delete

Returns confirmation of deletion.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesContact id: phone digits for a person (e.g. "5521986910666"; survives @c.us↔@lid flips), or a group JID "*@g.us". Look up via whatsapp_list_contacts.
messageIdYesMessage ID to delete

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true. The description adds that WhatsApp shows 'This message was deleted' as a placeholder, providing extra behavioral context beyond what annotations convey. No contradictions.

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?

The description is short and uses a clear structure with an Args section. The first sentence is slightly redundant with later details, but overall efficient and front-loaded.

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 destructive operation with two parameters and an output confirmation, the description covers the essential behavioral and parameter details. No output schema exists, but return value is noted. Lacks mention of idempotency or rate limits, but acceptable given the tool's simplicity.

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%. The description adds example values for contactId and explains special handling for group JIDs, but for messageId it only repeats the schema description. Meets baseline but adds limited extra meaning.

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 description clearly states 'Delete (unsend) a message from a contact's chat.' It uses a specific verb and resource, distinguishing it from siblings like whatsapp_edit_message and whatsapp_forward_message.

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?

While it explains the action and outcome ('Removes the message for everyone'), it does not explicitly state when to use this tool versus alternatives or when not to use it. The context of destructive action is clear, but no direct comparison to sibling tools.

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

whatsapp_download_mediaDownload WhatsApp MediaA
Read-onlyIdempotent

Download media (image, audio, video, document) from a WhatsApp message.

Fetches the media attached to a specific message and returns it directly:

  • Images: returned inline so Claude can see them

  • Audio: returned inline so Claude can process them

  • Video/documents: saved to /tmp/whatsapp-media/ and path returned

Use whatsapp_read_messages first to find messages with hasMedia=true, then pass the contactId and messageId here.

Note: Old media (weeks+) may no longer be available on WhatsApp's servers.

Args:

  • contactId: Phone digits or "*@g.us" — the contact whose chat contains the message

  • messageId: Message ID with media to download (from whatsapp_read_messages)

Returns:

  • For images: the image content directly (Claude can see it)

  • For audio: the audio content directly

  • For other files: file path where it was saved + metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesPhone digits or "*@g.us" — chat that contains the media message
messageIdYesMessage ID with media to download

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, destructiveHint, idempotentHint. The description adds valuable behavioral context: inline return for images/audio, file save path for video/documents, and potential unavailability of old media.

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?

Description is concise (5 sentences plus structured Args/Returns sections), front-loaded with purpose, and well-organized. Every sentence adds value without redundancy.

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 simple tool with 2 required parameters and no output schema, the description covers all necessary aspects: return behavior by media type, prerequisite workflow, and data persistence. Annotations cover safety constraints.

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% with clear descriptions for both parameters. The description repeats similar explanations in Args section, adding no new semantic value 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?

The description clearly states the tool downloads media (image, audio, video, document) from a WhatsApp message. It distinguishes from siblings by specifying to use whatsapp_read_messages first and provides the exact verb and resource.

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?

Explicitly instructs to use whatsapp_read_messages first to find messages with hasMedia=true, then pass contactId and messageId. Also notes that old media may not be available, guiding appropriate usage conditions.

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

whatsapp_edit_messageEdit WhatsApp MessageA
Idempotent

Edit a previously sent text message.

Only works on messages you sent (fromMe=true). WhatsApp shows an "edited" label on the message after editing.

Args:

  • contactId: Contact id: phone digits for a person (e.g. "5521986910666"; survives @c.us↔@lid flips), or a group JID "*@g.us". Look up via whatsapp_list_contacts.

  • messageId: Message ID to edit (must be your own message)

  • text: New text content

Returns confirmation with the edited message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesContact id: phone digits for a person (e.g. "5521986910666"; survives @c.us↔@lid flips), or a group JID "*@g.us". Look up via whatsapp_list_contacts.
messageIdYesMessage ID to edit (must be your own message)
textYesNew text content

TDQS

A4.1/5.0
Behavior4/5

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

Adds behavioral info: 'WhatsApp shows an "edited" label on the message after editing.' Annotations already declare idempotentHint=true and nondestructive, but description enriches with user-visible effect.

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 purpose, each sentence adds value. Could be slightly tighter but still efficient.

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?

Includes return info ('confirmation with edited message ID'), sufficient given no output schema. Coverage is adequate for a simple edit tool.

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 description repeats parameter info without adding extra meaning. Meets baseline for high coverage.

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?

Description starts with 'Edit a previously sent text message,' clearly stating verb (edit) and resource (message). Distinguishes from siblings like send, delete, forward.

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?

States 'Only works on messages you sent (fromMe=true),' providing a clear condition. No explicit alternatives or when-not usage, but context is clear.

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

whatsapp_forward_messageForward WhatsApp MessageA

Forward a message from one chat to another contact.

The forwarded message shows a "Forwarded" label in WhatsApp and preserves the original sender attribution.

Args:

  • contactId: Contact id: phone digits for a person (e.g. "5521986910666"; survives @c.us↔@lid flips), or a group JID "*@g.us". Look up via whatsapp_list_contacts. — destination

  • messageId: Message ID to forward (get from whatsapp_read_messages)

Returns confirmation with forwarded message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesContact id: phone digits for a person (e.g. "5521986910666"; survives @c.us↔@lid flips), or a group JID "*@g.us". Look up via whatsapp_list_contacts. (destination)
messageIdYesMessage ID to forward (from whatsapp_read_messages)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations (readOnlyHint=false) confirm this is a write operation. The description adds behavioral context: the forwarded message labels itself, preserves attribution, and returns a confirmation with the new message ID. No contradictions with annotations.

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?

The description is concise (3 short paragraphs) and well-structured: a one-sentence purpose, a line about labeling, and bullet-like parameter explanations. No redundant words.

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 simple 2-param tool, the description covers all essential aspects: purpose, parameter sourcing, expected label behavior, and return value. No output schema is needed given the simple confirmation format.

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 coverage is 100%, so baseline is 3. The description adds meaningful guidance beyond the schema: how to obtain contactId (via whatsapp_list_contacts) and messageId (from whatsapp_read_messages), and explains the ID format and stability across @c.us↔@lid flips.

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 description clearly states the tool's purpose: 'Forward a message from one chat to another contact.' This is a specific verb+resource pair that distinguishes it from sibling tools like whatsapp_send_text (sends new message) or whatsapp_delete_message (deletes message).

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 description explains what forwarding does (shows 'Forwarded' label, preserves attribution) but does not explicitly state when to use this tool vs alternatives like sending a new message or editing. Usage context is implied rather than explicit, lacking when-not-to-use guidance.

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

whatsapp_get_contactGet Contact Detail (person or group)A
Read-onlyIdempotent

Detail for a single contact — person OR group, by stable id.

Returns shape depends on kind:

  • Person: contact (phone, names, email, org), all chats they appear in, all JID variants, message stats.

  • Group: chat (group metadata), members with display names, member_count.

Args:

  • contactId: phone digits (person; "5521986910666"), or "*@g.us" (group). Look up via whatsapp_list_contacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesPhone digits for a person, or "*@g.us" for a group

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate readOnly and safe behavior. The description adds behavioral specifics: return shape depends on kind (person vs group) and lists included fields. Does not contradict annotations.

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?

The description is extremely concise with a clear structure: a one-line summary, bullet-style return details, and an args section. No wasted words.

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?

Given the simple single-parameter tool and lack of output schema, the description fully covers what the tool does, return shapes, and how to find the input. No missing context.

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 coverage is 100% with a description for contactId. The description enriches this by showing example formats and referencing a sibling tool to look up the ID, adding context beyond the schema pattern.

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 title and description clearly state the tool retrieves details for a single contact (person or group) by stable id. It distinguishes itself from siblings like 'whatsapp_list_contacts' by specifying it returns detailed info for one contact.

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?

The description provides guidance on how to obtain the contactId via 'whatsapp_list_contacts' and gives format examples. It implies usage for getting detail after listing, but does not explicitly state when not to use (e.g., for listing multiple contacts).

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

whatsapp_import_chatImport WhatsApp Chat ExportA
Idempotent

Import a WhatsApp chat export file (ZIP or TXT) into the message store.

Use this to backfill historical messages from WhatsApp's "Export Chat" feature. Only inserts new messages — won't overwrite or duplicate existing data.

The file should be a WhatsApp chat export:

  • ZIP file containing a .txt (standard WhatsApp export format)

  • Or a plain .txt file

The chat name is extracted from the filename (e.g., "Conversa do WhatsApp com NAME.zip"). You can override it with the chatName parameter.

Messages are matched to existing contacts by name. If a contact doesn't exist, it's created. If the chat already exists in the store (by name), messages are added to it.

Args:

  • filePath: Absolute path to the ZIP or TXT file on the server

  • chatName: Optional override for the chat name (extracted from filename if omitted)

Returns:

  • chat_name: Resolved chat name

  • total_parsed: Number of messages found in file

  • inserted: New messages added

  • skipped_duplicates: Messages already in store

  • senders: List of sender names found

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesAbsolute path to the WhatsApp export ZIP or TXT file on the server
chatNameNoOverride chat name (extracted from filename if omitted)

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (idempotent, non-destructive), the description details behavior: filename extraction for chat name, contact matching/creation, and duplicate skipping. It also lists return fields, which is not in the output schema. No contradictions with annotations.

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?

Every sentence earns its place. The description is organized with paragraphs, a bullet list for file format, and clear 'Args' and 'Returns' sections. No redundancy or fluff.

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?

Given the tool's complexity (handling ZIP/TXT, contact matching, idempotency), the description covers all essential aspects. The output schema is absent but the return fields are listed in the description. The sibling set is addressed by the unique purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds meaning: explains filePath is an absolute path, chatName is an optional override, and describes how the chat name is extracted. This enriches the schema's short descriptions.

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 description uses a specific verb ('Import') and resource ('WhatsApp chat export file'), clearly stating it inserts messages into the message store. It distinguishes from siblings like 'whatsapp_read_messages' and 'whatsapp_send_text' by being the only tool for backfilling historical exports.

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?

The description explicitly advises using the tool to 'backfill historical messages from WhatsApp's 'Export Chat' feature.' It notes it only inserts new messages, implying it's not for overwriting. While no direct alternatives are named, the sibling list makes the context clear.

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

whatsapp_list_chatsList WhatsApp ChatsA
Read-onlyIdempotent

List recent WhatsApp chats with last message preview and profile pictures.

Returns chat IDs, names, profile picture URLs, and a preview of the last message. Use the chat ID from results to read messages with whatsapp_read_messages.

Args:

  • limit: Number of chats to return (1-100, default 20)

  • offset: Pagination offset (default 0)

Returns array of chats with:

  • id: Chat ID (use this in other tools)

  • name: Contact or group name

  • picture: Profile picture URL (may expire)

  • lastMessage: Preview with body, from, fromMe, hasMedia, timestamp

  • lastMessageAt: ISO timestamp of last message

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of chats to return (1-100, default 20)
offsetNoPagination offset (default 0)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description doesn't need to restate safety. It adds value by noting that profile picture URLs may expire, describing the return structure including nullable fields, and specifying pagination behavior.

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?

The description is front-loaded with the purpose, uses bullet points for return fields, and is overall concise with no wasted words. Every sentence provides necessary information.

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?

Given the tool's simplicity, the description covers purpose, parameters, return structure, and usage guidance. It lacks an explicit output schema but compensates with a detailed textual description. The absence of error handling details is minor.

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 coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by explaining the output structure (id, name, picture, lastMessage, lastMessageAt) and how to use the returned chat ID in other tools. This contextualizes the parameters' purpose.

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 description clearly states the tool lists recent WhatsApp chats with last message preview and profile pictures, using a specific verb and resource. It distinguishes from siblings like whatsapp_list_contacts (contacts) and whatsapp_read_messages (reading after getting ID).

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?

The description explicitly tells when to use this tool: 'Use the chat ID from results to read messages with whatsapp_read_messages.' It provides clear context for a typical workflow, though it doesn't explicitly exclude alternatives like whatsapp_search_messages.

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

whatsapp_list_contactsList WhatsApp Contacts (people + groups)A
Read-onlyIdempotent

Unified address book — lists people you DM and groups you're in.

Use the returned 'id' as contactId in any chat-targeting tool (send_text, read_messages, etc.):

  • Person: id = phone digits (universal — survives @c.us↔@lid flips)

  • Group: id = group JID (e.g. "120363...@g.us")

Args:

  • kind: "person" | "group" | "all" (default "all")

  • search: Filter by name or id (optional)

  • limit: Maximum rows to return (1-100, default 20)

  • offset: Pagination offset for the persons section (default 0)

Returns array of contacts with:

  • kind: "person" | "group"

  • id: phone digits or group JID — pass to other tools

  • name: display name (Google Contact name → push name → phone/jid fallback)

  • messageCount, lastMessageAt: activity stats

  • For persons: pushName, googleName, email, organization

  • For groups: memberCount

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoFilter by contact type (default 'all')all
searchNoFilter by name or id (optional)
limitNoMaximum rows to return (1-100, default 20)
offsetNoPagination offset (default 0)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate read-only, non-destructive, idempotent. Description adds behavioral details about ID formats, name resolution fallback, and pagination, which is valuable beyond annotations.

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?

Description is well-structured with Args and Returns sections. It is concise but thorough, though slightly verbose in explaining ID formats and fallbacks.

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?

Given 4 parameters, no output schema, and strong annotations, the description fully explains return structure, ID usage, pagination, and filtering options. No gaps.

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 has 100% description coverage, so description adds only marginal value for parameters. It explains the kind enum and output context, but the schema already provides clear parameter descriptions.

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?

Title and description clearly state the tool lists WhatsApp contacts (people and groups). Description distinguishes from siblings like whatsapp_list_chats and whatsapp_get_contact. Uses specific verbs and resource types.

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?

Description explicitly explains how to use returned IDs for chat-targeting tools, but doesn't state when not to use or alternatives. Still provides clear usage context.

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

whatsapp_reactReact to WhatsApp MessageA
Idempotent

React to a WhatsApp message with an emoji.

Use an empty string for the reaction to remove an existing reaction.

Args:

  • contactId: Contact id: phone digits for a person (e.g. "5521986910666"; survives @c.us↔@lid flips), or a group JID "*@g.us". Look up via whatsapp_list_contacts.

  • messageId: Message ID to react to (get from whatsapp_read_messages)

  • reaction: Emoji to react with (e.g., "👍", "❤️", "😂"). Empty string removes reaction.

Returns confirmation of the reaction.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesContact id: phone digits for a person (e.g. "5521986910666"; survives @c.us↔@lid flips), or a group JID "*@g.us". Look up via whatsapp_list_contacts.
messageIdYesMessage ID to react to
reactionYesEmoji reaction (e.g., "👍", "❤️"). Empty string removes reaction.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate idempotent, destructive=false, readOnly=false, openWorld=true. The description adds important context: removal via empty string and return confirmation. No contradictions.

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?

Three concise paragraphs: first sentence states purpose, second gives special behavior, third explains args. Every sentence is necessary and no fluff.

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?

Given 3 required parameters, no output schema, the description covers all necessary aspects: purpose, parameter usage, special cases, and references to sibling tools for lookup. An agent can correctly invoke this tool.

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 coverage is 100%, but the description adds value by explaining the empty string removal for reaction and providing examples for contactId format. It also ties contactId and messageId to lookup tools.

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 description clearly states the verb 'React' and resource 'WhatsApp message', and distinguishes from siblings like delete or edit. It also specifies the empty string behavior for removing reactions, which is unique.

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?

Provides clear context on how to use the tool (e.g., refer to whatsapp_list_contacts and whatsapp_read_messages), and mentions the empty string for removal. However, it does not explicitly contrast with alternatives like whatsapp_send_text or whatsapp_edit_message.

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

whatsapp_read_messagesRead WhatsApp MessagesA

Read messages from a specific WhatsApp chat.

Returns messages with sender, text content, timestamp, and message ID. Use the message ID from results for whatsapp_react or reply_to in whatsapp_send_text.

Powered by Message Store — persistent full history with full-text search and sender filtering.

Args:

  • contactId: Phone digits for a person ("5521986910666"; survives @c.us↔@lid flips), or group JID "*@g.us". Look up via whatsapp_list_contacts.

  • limit: Number of messages to return (1-100, default 20)

  • offset: Skip N messages for pagination (default 0)

  • search: Full-text search within this chat's messages (optional)

  • sender: Filter by sender name or JID (optional)

  • type: Filter by message type: chat, image, album (optional)

  • since: ISO date — messages after this date (optional)

  • until: ISO date — messages before this date (optional)

  • fromMe: Filter sent (true) or received (false) messages (optional)

  • downloadMedia: Include media download URLs when falling back to live (default false)

  • markAsRead: Mark messages as read after fetching (default false)

Returns:

  • messages: Array with id, sender, body, timestamp, type, fromMe, hasMedia

  • total: Total matching messages

  • hasMore: Whether more results exist

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesPhone digits for a person, or "*@g.us" for a group
limitNoNumber of messages to return (1-100, default 20)
offsetNoSkip N messages for pagination (default 0)
searchNoFull-text search within this chat (optional)
senderNoFilter by sender name or JID (optional)
typeNoFilter by message type: chat, image, album (optional)
sinceNoISO date — only messages after this date (optional)
untilNoISO date — only messages before this date (optional)
fromMeNoFilter: true = sent, false = received (optional)
downloadMediaNoInclude media download URLs when falling back to live (default false)
markAsReadNoMark messages as read after fetching (default false)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations do not indicate readOnlyHint but description explains the markAsRead parameter (side effect). It also describes return fields and the 'hasMore' flag. No contradictions with annotations.

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?

The description is structured with a summary paragraph then bullet lists for args and returns, making it readable. A bit lengthy but well-organized.

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?

Given 11 parameters and no output schema, the description covers each parameter and outlines return fields. Examples and usage tips enhance completeness.

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 coverage is 100%, but description adds extra context for contactId (phone digits, group JID, format survival) and return fields, providing value 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?

The description clearly states 'Read messages from a specific WhatsApp chat,' specifying the action and resource. It also distinguishes from siblings like whatsapp_search_messages and provides context on returned fields.

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?

The description advises using message IDs from results for reacting or replying, and mentions looking up contactId via whatsapp_list_contacts. While it doesn't explicitly state when not to use this tool, the context is clear.

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

whatsapp_search_messagesSearch WhatsApp MessagesA
Read-onlyIdempotent

Search across all WhatsApp message history. Supports full-text search, date ranges, sender filtering, and message type filtering.

Args:

  • search: Text to search for (case insensitive, supports Portuguese/unicode)

  • contactId: Scope search to one contact (phone digits or "*@g.us") (optional)

  • sender: Filter by sender name or JID (optional)

  • since: ISO date string — messages after this date (optional)

  • until: ISO date string — messages before this date (optional)

  • type: Message type filter: chat, image, album, e2e_notification (optional)

  • fromMe: Filter sent (true) or received (false) messages (optional)

  • limit: Results per page (1-100, default 20)

  • offset: Pagination offset (default 0)

Returns:

  • messages: Array with id, chatJid, senderName, body, timestamp, messageType, fromMe

  • total: Total matching messages

  • has_more: Whether more results exist

Note: sender_name may be null for some messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchYesText to search for (case insensitive)
contactIdNoScope search to one contact: phone digits (person) or "*@g.us" (group). Optional.
senderNoFilter by sender name or JID (optional)
sinceNoISO date string — only messages after this date (optional)
untilNoISO date string — only messages before this date (optional)
typeNoMessage type filter: chat, image, album, e2e_notification (optional)
fromMeNoFilter: true = sent, false = received (optional)
limitNoResults per page (1-100, default 20)
offsetNoPagination offset (default 0)

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and idempotentHint=true. Description adds case-insensitive search, Portuguese/unicode support, and notes that sender_name may be null. This provides value beyond annotations.

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?

Description is well-structured with summary, Args, and Returns. Front-loaded with key purpose. Slightly lengthy but clear.

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?

Given high parameter count (9) and no output schema, description fully explains each parameter, return structure, and behavioral traits (case-insensitivity, null sender_name). Complete for agent use.

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 baseline is 3. Description repeats schema parameter descriptions almost verbatim, adding only case-insensitivity note and return format. Minimal added value.

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?

Title and description clearly specify the tool searches WhatsApp messages with full-text, date, sender, and type filters. It distinguishes from siblings like whatsapp_list_chats and whatsapp_read_messages.

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 or when-not-to-use instructions. Usage is implied through description, but no alternatives are mentioned.

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

whatsapp_send_textSend WhatsApp Text MessageA

Send a text message to a contact (person or group).

CORE tier supports text messages only (no images, video, audio, or documents). A rate limit delay is enforced between sends to avoid WhatsApp detection.

Args:

  • contactId: Contact id: phone digits for a person (e.g. "5521986910666"; survives @c.us↔@lid flips), or a group JID "*@g.us". Look up via whatsapp_list_contacts.

  • text: Message text to send

  • replyTo: Optional message ID to quote-reply to (get from whatsapp_read_messages)

Returns:

  • status: "sent"

  • messageId: The sent message's ID

  • contactId: Where it was sent

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesContact id: phone digits for a person (e.g. "5521986910666"; survives @c.us↔@lid flips), or a group JID "*@g.us". Look up via whatsapp_list_contacts.
textYesText message to send
replyToNoMessage ID to quote-reply to (from whatsapp_read_messages)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate it is not read-only (readOnlyHint=false) and not destructive (destructiveHint=false), which the description confirms by describing a send operation. The description adds transparency about rate limit delays and the CORE tier limitation, which goes beyond the annotations. No contradictions.

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?

The description is well-structured with clear sections for purpose, constraints, parameter details, and returns. It is efficient but not overly terse. Some information (e.g., parameter descriptions) partly duplicates schema, but overall it is concise and front-loaded with the main purpose.

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?

The description covers input, behavior (rate limit, tier restriction), and output (status, messageId, contactId). Since there is no output schema, the description fills that gap. It also references sibling tools for lookup, making the context complete for a simple send operation.

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 coverage is 100%, so the description partially overlaps with schema. However, the description adds value by explaining that contactId 'survives @c.us↔@lid flips' (not in schema) and clarifying replyTo's purpose. The schema already defines types and constraints, so the description enriches parameter understanding.

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 description clearly states the action ('send'), the resource ('text message'), and the target ('contact (person or group)'). It distinguishes itself from sibling tools by specifying 'CORE tier supports text messages only', implying that other tools handle media. It also provides context for finding contact IDs via whatsapp_list_contacts.

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?

The description gives clear usage context: send text messages, not media. It mentions rate limit delay, and provides guidance on how to obtain contactId and replyTo from other tools. It does not explicitly state when not to use, but the purpose is well-defined, and siblings like whatsapp_forward_message or whatsapp_download_media imply alternative use cases.

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

whatsapp_session_statusWhatsApp Session StatusA
Read-onlyIdempotent

Check if the WhatsApp session is connected and working.

Returns the session status (WORKING, STOPPED, etc.), the connected phone number, and display name. Use this to verify connectivity before sending messages.

No parameters required.

Returns:

  • name: Session name

  • status: "WORKING" if connected, "STOPPED" if disconnected

  • phone: Connected phone number (if authenticated)

  • pushName: Display name on WhatsApp

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds behavioral details beyond the annotations, such as the possible status values ('WORKING', 'STOPPED') and the meaning of each return field, which helps agents understand exactly what the tool reveals.

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?

The description is extremely concise, consisting of two short sentences and a structured list of return values. Every sentence adds value: the first states the purpose, the second explains when to use it, and the list clarifies the output. No redundancy or fluff.

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?

Given the tool's simplicity (no parameters, no output schema required), the description is fully complete. It explains the purpose, the scenario for use, and details the output fields with expected values. An agent can invoke this tool without any additional clarification.

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 has no parameters (input schema is empty), and the description explicitly states 'No parameters required.' According to guidelines, 0 parameters earns a baseline of 4, and the description correctly confirms this, leaving no ambiguity.

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 description clearly states the tool's purpose: 'Check if the WhatsApp session is connected and working.' It specifies the resource (WhatsApp session) and the action (check status), and lists the return values (status, phone, name) which distinguish it from siblings like sending or listing messages.

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?

The description provides clear usage context: 'Use this to verify connectivity before sending messages.' It explains when to use the tool but does not explicitly mention when not to use it or suggest alternatives among the many sibling tools.

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

whatsapp_statsWhatsApp StatsA
Read-onlyIdempotent

Overview dashboard of WhatsApp activity — message totals, top chats, top contacts, and group/DM breakdown.

No arguments needed. Returns:

  • Totals: messages, contacts, chats, groups, DMs

  • Activity: messages today, this week

  • Top 5 chats by message count (name may be null for groups — use whatsapp_get_contact to look up)

  • Top 5 contacts by message count

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds value by detailing the return structure (totals, top lists, null name for groups) and suggesting whatsapp_get_contact for group lookups. No contradictions with annotations.

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?

The description is concise and well-structured, starting with a summary sentence followed by bullet points for return fields. Every sentence adds value without redundancy or wordiness.

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?

Given there is no output schema, the description adequately explains the return values including totals, activity counts, top chats, and top contacts. It notes that group names may be null, providing useful context. Minor gap: not specifying the timeframe for 'this week' but overall complete for a simple stats tool.

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 has zero parameters, so schema coverage is 100%. The description explicitly states 'No arguments needed,' which adds clarity. No additional parameter information is necessary.

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 description clearly states the tool provides an overview dashboard of WhatsApp activity including message totals, top chats, top contacts, and breakdowns. It uses specific verbs ('Overview dashboard') and resource ('WhatsApp activity'), and distinguishes from siblings like whatsapp_chat_summary and whatsapp_list_chats.

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?

The description explicitly states 'No arguments needed,' making when to use clear. It provides context for the dashboard overview but does not explicitly mention when not to use or name alternatives among siblings. However, the zero-parameter nature makes usage straightforward.

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

whatsapp_transcribe_audioTranscribe WhatsApp AudioA

Transcribe a WhatsApp voice message or audio to text.

Server-side transcription via Speaches (Whisper). Optionally replies to the original message with the transcription text.

Args:

  • contactId: Phone digits or "*@g.us" — the contact whose chat contains the audio

  • messageId: Message ID of the audio to transcribe

  • replyWithTranscription: If true, sends the transcription as a WhatsApp reply to the audio message (default false)

Returns:

  • transcription: The transcribed text

  • language: Detected language (if available)

  • replyMessageId: ID of the reply message (if replyWithTranscription=true)

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesPhone digits or "*@g.us" — chat that contains the audio
messageIdYesMessage ID of the audio to transcribe
replyWithTranscriptionNoIf true, sends the transcription as a WhatsApp reply to the audio (default false)

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses server-side transcription via Speaches/Whisper and the optional reply behavior, which aligns with annotations (readOnlyHint=false, destructiveHint=false). No contradictions, and it provides useful context beyond annotations.

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?

The description is concise, front-loaded with the main purpose, and structured with Args/Returns sections. Every sentence adds value, and there is no redundant information.

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?

Given the moderate complexity and full parameter coverage, the description adequately explains the tool's behavior, including optional reply and language detection. It lacks error handling or input validation details, but is otherwise complete.

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 coverage is 100%, but the description adds value by clarifying the format for contactId (phone digits or *@g.us) and the default for replyWithTranscription. It enhances understanding beyond the schema descriptions.

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 description clearly states the verb 'Transcribe' and the resource 'WhatsApp audio', specifying it converts voice messages to text. It distinguishes from sibling tools by being the only transcription tool.

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 description explains what the tool does but does not explicitly state when to use it or when not to, nor does it mention alternatives. Usage context is implied through parameter descriptions but lacks clear guidance.

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

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, from account info to message operations to auto-reply management. No two tools appear to do the same thing, and descriptions clarify boundaries (e.g., chat_summary vs read_messages vs search_messages).

Naming Consistency4/5

All tools share the 'whatsapp_' prefix and mostly follow a verb_noun pattern (e.g., delete_message, send_text). A few deviate slightly (e.g., account_info, stats, session_status are noun_noun or noun only), but the overall pattern is clear and consistent.

Tool Count4/5

With 22 tools, the count is slightly above the ideal range but still well-scoped for a comprehensive WhatsApp server. Each tool covers a distinct operation, and none feel redundant or excessive.

Completeness4/5

The tool set covers most core WhatsApp operations: account management, contacts, chats, messages (send, read, edit, delete, forward, react, download media, transcribe), and auto-reply. Notable gaps include sending media (images, files) and group management, but the core workflow is well-supported.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Maheidem/waha-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server