Local WhatsApp Web MCP server for the Codex WhatsApp plugin
Server has 11 tools with explicit schemas and descriptions. Naming follows verb_noun convention (whatsapp_status, configure_onboarding, send_whatsapp_message). All tools have descriptions (10-150 chars, within baseline 34-392 range). Input schemas present with type definitions and parameter descriptions. However, descriptions are terse (many under 100 chars) and lack WHEN/WHY context. No output schemas documented. Error handling is minimal, tools return text results without structured error guidance. Tool annotations present (readOnlyHint, destructiveHint, idempotentHint) but inconsistently applied. Missing recovery guidance in error cases.
Add a phone number to the whitelist of allowed message recipients.
Claim ownership of pending owner commands (wake-name text commands or voice notes) for processing by the LLM.
Choose the private bot wake name and a safe polling interval before QR authentication.
Enable or disable owner-command automation for processing wake-name text commands and voice notes in the owner's self-chat.
Start the local WhatsApp Web session and return a QR code when a phone scan is needed.
Check whether the bot wake name and polling interval are configured before authentication.
No output schemas documented. Tools return textResult() with unstructured text. LLMs cannot parse structured fields for downstream chaining (e.g., onboarding_status returns JSON string, not typed object). Violates pattern:response-shaper.
Descriptions lack WHEN/WHY context. E.g., 'Check connection state and a redacted summary of the enforced recipient policy' does not explain when to call this vs other status tools or what the LLM should do with the result. Baseline: 194 chars avg; most here are 60-100 chars.
No error recovery guidance. Tools throw errors (e.g., 'WhatsApp is not connected') but do not tell LLM what to do next. Missing pattern:recovery-guide. Should return 'WhatsApp is not connected. Call connect_whatsapp first and scan the QR code.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Remove a phone number from the whitelist of allowed message recipients.
Send a text message to a WhatsApp recipient, subject to the enforced privacy policy.
Restrict sending to the owner's own number only (default privacy mode).
Show the redacted send policy and the data this plugin can access.
Check connection state and a redacted summary of the enforced recipient policy.
Parameter descriptions lack format/constraint details. E.g., recipientNumber says 'International phone number with country code (8 to 15 digits)' but no regex pattern or validation example. LLMs may pass invalid formats. Violates pattern:constrained-input.
Tool annotations incomplete. readOnlyHint/destructiveHint/idempotentHint present but not all tools annotated consistently. E.g., configure_onboarding is WRITE but idempotentHint not set; claim_owner_commands is READ_ONLY but destructiveHint not set. Reduces clarity for agent planning.