lingtai-whatsapp
MCP server for interacting with the official Meta WhatsApp Business Platform/Cloud API, enabling sending messages, managing contacts, templates, and handling webhook callbacks.
README
lingtai-whatsapp
LingTai MCP server for the official Meta WhatsApp Business Platform / Cloud API.
This package intentionally targets the official WhatsApp Cloud API only. It does not implement or recommend unofficial WhatsApp Web bridges (Baileys/whatsmeow style), because those violate WhatsApp's Terms of Service and can ban numbers.
Install
pip install lingtai-whatsapp
For local development before the first PyPI release:
pip install -e .
src/lingtai_whatsapp/licc.py is vendored from the first-party LingTai MCP repos and implements the LICC v1 inbox callback contract. Keep it synchronized with sibling packages (lingtai-telegram, lingtai-feishu, lingtai-wechat, lingtai-imap) when the protocol changes.
What it provides
- MCP stdio server:
python -m lingtai_whatsapp - Omnibus
whatsapptool with actions:send,reply,react,check,read,search,contacts,add_contact,remove_contact,templates,accounts,status - LICC v1 inbox callback for inbound WhatsApp messages
- Local message/contact persistence under the hosted agent directory
- Optional stdlib HTTP webhook receiver for Meta GET verification + signed POST callbacks
- MCP resources for setup/onboarding/status:
lingtai://manifestlingtai://skills/whatsapplingtai://docs/configurationlingtai://docs/troubleshootinglingtai://statuslingtai://onboarding/whatsapplingtai://onboarding/html-template
Configuration
Set LINGTAI_WHATSAPP_CONFIG to a JSON file. LingTai normally wires this through init.json's mcp.whatsapp.env entry.
{
"accounts": [
{
"alias": "main",
"access_token": "EAAG...",
"phone_number_id": "123456789",
"waba_id": "987654321",
"app_secret": "...",
"verify_token": "choose-a-random-webhook-token",
"api_version": "v20.0",
"display_phone_number": "+1 555 0100",
"webhook": {
"public_url": "https://example.com/webhooks/whatsapp",
"host": "127.0.0.1",
"port": 8088,
"path": "/webhooks/whatsapp"
},
"templates": [
{"name": "hello_world", "language": "en_US"}
]
}
]
}
Required per account:
| Field | Purpose |
|---|---|
alias |
Local LingTai account name. Defaults to default if omitted. |
access_token |
Meta system-user/permanent access token with WhatsApp messaging permissions. |
phone_number_id |
Meta phone number id used by /{phone_number_id}/messages. |
waba_id or business_account_id |
WhatsApp Business Account id for operator reference/onboarding. |
app_secret |
Used to verify X-Hub-Signature-256 on webhook POST callbacks. |
verify_token |
Random operator-chosen token used for Meta webhook GET verification. |
Optional:
api_versiondefaults tov20.0.display_phone_numberis informational only.webhookstarts a local HTTP listener whenportis present.templatesis a local list of approved template names/languages the agent can inspect withwhatsapp(action="templates").
Secrets are plaintext by LingTai addon convention, but all tool/resource status results are redacted: access tokens, app secrets, and verify tokens are never echoed.
LingTai activation
When used as a curated LingTai MCP, the agent's init.json should include:
{
"addons": ["whatsapp"],
"mcp": {
"whatsapp": {
"type": "stdio",
"command": "/Users/<you>/.lingtai-tui/runtime/venv/bin/python",
"args": ["-m", "lingtai_whatsapp"],
"env": {
"LINGTAI_WHATSAPP_CONFIG": ".secrets/whatsapp.json"
}
}
}
}
Then create .secrets/whatsapp.json using the schema above and run system(action="refresh") from the agent.
Webhook setup
Meta requires a public HTTPS callback URL for inbound WhatsApp messages and delivery statuses. This MCP can run a local HTTP server if the first account's config includes webhook.port:
"webhook": {
"public_url": "https://example.com/webhooks/whatsapp",
"host": "127.0.0.1",
"port": 8088,
"path": "/webhooks/whatsapp"
}
Expose that local listener with your preferred HTTPS reverse proxy/tunnel (Cloudflare Tunnel, ngrok, Caddy, nginx, etc.), then configure Meta's callback URL to public_url and verify it with the same verify_token stored in config.
Webhook behavior:
GET <path>?hub.mode=subscribe&hub.verify_token=...&hub.challenge=...returns the challenge when the token matches.POST <path>validatesX-Hub-Signature-256whenapp_secretis present, stores incoming messages, and pushes LICC inbox events to the hosting LingTai agent.- For multi-account configs, inbound POSTs are routed by
metadata.phone_number_id; unknown phone ids fall back to the default account.
WhatsApp Cloud API constraints
- Free-form business replies are allowed only within the 24-hour customer-service window after a user's message.
- Outside the 24-hour window, use an approved message template.
- The Cloud API is for WhatsApp Business accounts; ordinary personal WhatsApp Web sessions are intentionally out of scope.
Development
python -m pytest -q
The tests avoid real network calls. The send path uses Meta's Graph API only when credentials are present and the tool action is invoked.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.