A Model Context Protocol (MCP) server supporting multiple messaging platforms (WhatsApp, Microsoft Teams) with tools for contact search, message management, and chat operations
MultiChat MCP Server has significant quality gaps across naming, descriptions, and schema clarity. While tool names follow verb_noun conventions (search_contacts, list_messages, send_message), descriptions are inconsistent, some are adequate (10-15 words), others are vague or incomplete. Parameter schemas are visible and properly typed in the provided snippet, but descriptions for parameters are minimal. Critical issues: (1) Schema documentation is inferred rather than explicitly visible in the source (only partial whatsapp.go shown); (2) Output schemas are completely undocumented, we cannot see what list_messages, list_chats, or search_contacts actually return; (3) Error handling is absent from descriptions; (4) No pagination guidance beyond raw limit/page params; (5) Two tools (send_message and send_rich_message) mention optional webhook_url with fallback behavior, but this dependency and fallback logic is not formally documented; (6) Tool descriptions lack WHEN-to-use guidance required for agent disambiguation. Per-tool analysis: naming is generally acceptable (verb-first, clear intent), but 5 of 9 tools have vague or incomplete descriptions (<50 chars or missing detail), and none show documented output structure.
Get information about a specific chat
Get all chats involving a specific contact
Get direct chat with a specific contact by phone number
List available chats with metadata (name, JID, last message)
Retrieve messages with optional filters (e.g. time, sender) and context
Search for contacts by name or phone number
Send a simple message to a Microsoft Teams channel or chat via webhook URL
Output schemas completely undocumented. No visible definition of what list_messages, list_chats, search_contacts, or other read tools return. LLMs cannot predict field names or structure for downstream chaining.
Descriptions lack 'WHEN to use' guidance and are below ideal length. E.g., 'Get information about a specific chat' (5 words) does not explain when to call this vs. list_chats or get_direct_chat_by_contact.
Parameter descriptions are minimal or absent. E.g., 'phone_number' in get_direct_chat_by_contact has description 'Phone number of the contact' but does not specify format (E.164, local, with/without country code).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | <=2025-11-25 | v2 |
Send a rich adaptive card message with title, text, color, and structured facts to Teams
Validate a Teams webhook URL to ensure it's properly formatted
Webhook URL fallback behavior documented only in parameter description, not in tool description. send_message and send_rich_message state 'If not provided, uses the default webhook URL' but do not explain where that default comes from, when it's set, or what happens if neither is provided. Undocumented dependencies cause silent misuse.
No error handling guidance. None of the 9 tools include recovery hints in descriptions. E.g., search_contacts does not say what happens if query is empty, if no results match, or if the agent is not connected. Per pattern:recovery-guide, error responses must tell the LLM what to do next.
Pagination params (limit, page) lack constraints and guidance. No min/max values, no guidance on default behavior, no indication of whether page is 0-indexed or 1-indexed.
Tool composition risks. send_message (Teams) and send_rich_message (Teams) exist alongside WhatsApp tools, but it is unclear whether Teams and WhatsApp tools can be chained (e.g., get contact from WhatsApp, send to Teams). No documentation of which tools operate on which platform.
No documented permission or authentication model. Tools reference 'webhooks', 'contacts', and 'messages', but there is no indication of which tools require authentication, which are read-only, which are write-only, or what scope declarations apply. Per pattern:scope-declaration, each tool should declare permissions.