loading…
Search for a command to run...
loading…
MCP server for ManyContacts WhatsApp Business CRM that enables AI agents to manage contacts, send messages, run campaigns, and configure auto-replies through co
MCP server for ManyContacts WhatsApp Business CRM that enables AI agents to manage contacts, send messages, run campaigns, and configure auto-replies through comprehensive CRM operations.
MCP (Model Context Protocol) server for ManyContacts — the WhatsApp Business CRM. Enables AI agents (Claude, Cursor, Windsurf, etc.) to manage contacts, send WhatsApp messages, run campaigns, configure AI auto-replies, and perform all CRM operations programmatically.
npm install -g @manycontacts/cli
Already have an account? Log in:
mc auth login --email [email protected] --password mypassword
mc auth whoami # verify it works
New to ManyContacts? Create an account and connect your WhatsApp channel:
# Register a new account
mc auth register --email [email protected] --name "My Company"
# Connect a WhatsApp Business channel (choose one method):
mc channels connect whatsapp-api # WhatsApp Cloud API (recommended)
mc channels connect coexistence # ManyContacts coexistence mode
mc channels connect qr # QR code pairing
# Verify everything is set up
mc auth whoami
mc channels list
Add to your MCP settings (~/.claude/claude_desktop_config.json or similar):
{
"mcpServers": {
"manycontacts": {
"command": "npx",
"args": ["@manycontacts/mcp"],
"env": {
"MC_CLI_TOKEN": "your-cli-token-here"
}
}
}
}
Add to .cursor/mcp.json:
{
"mcpServers": {
"manycontacts": {
"command": "npx",
"args": ["@manycontacts/mcp"],
"env": {
"MC_CLI_TOKEN": "your-cli-token-here"
}
}
}
}
Tip: If you've already logged in via the CLI (
mc auth login), the token is stored in~/.manycontacts/config.jsonand the MCP server will pick it up automatically — noMC_CLI_TOKENenv var needed.
manycontacts.contextGet a full overview of your ManyContacts account: connected WhatsApp Business channels, contact/user/tag counts, active AI agents, and enabled features. Use this first to understand the account state before performing other operations.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts.org.getGet WhatsApp Business organization/account information including name, timezone, and all configuration settings.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts.org.updateUpdate organization-level settings such as timezone, auto-reply messages, auto-close behavior, and webhook configuration.
| Parameter | Type | Required | Description |
|---|---|---|---|
timezone |
string |
No | Timezone identifier (e.g. Europe/Madrid, America/New_York) |
auto_reply_open |
boolean |
No | Enable auto-reply when a new chat is opened |
auto_reply_open_text |
string |
No | Auto-reply message text when chat opens |
auto_reply_close |
boolean |
No | Enable auto-reply when a chat is closed |
auto_reply_close_text |
string |
No | Auto-reply message text when chat closes |
auto_reply_close_minutes |
number |
No | Minutes of inactivity before auto-close |
auto_reply_away |
boolean |
No | Enable away/out-of-hours auto-reply |
auto_reply_away_text |
string |
No | Away auto-reply message text |
webhooks_forward |
boolean |
No | Enable webhook forwarding to an external URL |
webhooks_forward_url |
string |
No | External URL to forward webhook events to |
manycontacts.org.schedule.getGet the business hours schedule. Returns the configured working hours for each day of the week, used to determine when the "away" auto-reply activates.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts.org.apikeyGet the organization's REST API key for direct API integrations.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts.channels.listList all connected WhatsApp Business and Instagram channels. For WhatsApp channels, shows the phone number and connection status. For Instagram channels, shows the username.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
All contact operations use phone numbers as identifiers (with country code, no + prefix, e.g. 34600000000).
manycontacts.contacts.listList WhatsApp Business contacts with advanced filters. Returns paginated results with has_more indicator. Filters can be combined freely.
| Parameter | Type | Required | Description |
|---|---|---|---|
page |
number |
No | Page number (default: 1) |
limit |
number |
No | Results per page, max 200 (default: 50) |
open |
"true" | "false" |
No | Filter by conversation open/closed status |
assigned_to |
string |
No | Filter by assigned user ID |
tags |
string |
No | Comma-separated tag IDs — contacts must have all specified tags |
team |
string |
No | Filter by team ID |
stages |
string |
No | Comma-separated funnel stage IDs |
date_from |
string |
No | Filter contacts updated after this date (YYYY-MM-DD) |
date_to |
string |
No | Filter contacts updated before this date (YYYY-MM-DD) |
unread |
"true" |
No | Only contacts with unread messages |
blacklist |
"true" |
No | Only blacklisted contacts |
scheduled |
"true" |
No | Only contacts with pending scheduled messages |
Note: When using
date_fromanddate_totogether, the range cannot exceed 90 days.
Response:
{
"ok": true,
"data": [
{
"name": "John Doe",
"number": "34600000000",
"open": true,
"last_user_id": "uuid-of-assigned-user",
"source": "whatsapp",
"notes": "VIP customer",
"customFields": {},
"createdAt": "2026-01-15T10:30:00Z"
}
],
"pagination": { "page": 1, "limit": 50, "has_more": true }
}
manycontacts.contacts.getGet detailed information about a specific contact including their tags, teams, funnel stages, and custom fields.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number with country code (e.g. 34600000000) |
manycontacts.contacts.createCreate a new WhatsApp Business contact in the CRM. The phone number will be normalized automatically (leading + removed).
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number with country code (e.g. 34600000000) |
name |
string |
No | Contact display name |
notes |
string |
No | Free-text notes for the contact |
manycontacts.contacts.updateUpdate an existing contact's name, notes, or custom fields.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact to update |
name |
string |
No | New contact name |
notes |
string |
No | New contact notes |
customFields |
string |
No | Custom fields as a JSON string (e.g. '{"company":"Acme"}') |
manycontacts.contacts.deletePermanently delete a contact from the CRM.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact to delete |
manycontacts.contacts.assignAssign a contact to a specific team member. The assigned user will see this contact in their personal inbox.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact |
userId |
string |
Yes | User ID to assign the contact to (use manycontacts.users.list to get IDs) |
manycontacts.contacts.unassignRemove the current user assignment from a contact. The contact returns to the general unassigned inbox.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact |
manycontacts.contacts.closeClose a WhatsApp conversation. Closed conversations are archived and won't appear in the active inbox.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact |
manycontacts.contacts.openReopen a previously closed WhatsApp conversation. The contact will appear again in the active inbox.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact |
manycontacts.contacts.tag.addAdd a tag to a contact. Use manycontacts.tags.list to get available tag IDs.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact |
tagId |
string |
Yes | Tag ID to add |
manycontacts.contacts.tag.removeRemove a tag from a contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact |
tagId |
string |
Yes | Tag ID to remove |
manycontacts.contacts.team.addAdd a team to a contact. Use manycontacts.teams.list to get available team IDs.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact |
teamId |
string |
Yes | Team ID to add |
manycontacts.contacts.team.removeRemove a team from a contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact |
teamId |
string |
Yes | Team ID to remove |
manycontacts.contacts.set_stageMove a contact to a specific stage within a sales funnel/pipeline. Use manycontacts.funnels.list to get funnel and stage IDs.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact |
funnel_id |
string |
Yes | Funnel ID |
stage_id |
string |
Yes | Target stage ID within the funnel |
manycontacts.contacts.bulkPerform bulk operations on multiple contacts at once. Supports closing, opening, assigning, tagging, and team assignment.
| Parameter | Type | Required | Description |
|---|---|---|---|
action |
"close" | "open" | "assign" | "add_tag" | "add_team" |
Yes | Bulk action to perform |
phones |
string |
Yes | Comma-separated phone numbers (e.g. "34600000000,34600000001") |
value |
string |
No | Value required by the action: user ID for assign, tag ID for add_tag, team ID for add_team. Not needed for close or open. |
manycontacts.messages.listList WhatsApp conversation messages for a contact. Returns messages in a conversation-friendly format with timestamps, status, and sender information.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact |
page |
number |
No | Page number (default: 1) |
limit |
number |
No | Messages per page (default: 50) |
manycontacts.messages.send.textSend a WhatsApp text message to a contact. Only works within the 24-hour conversation window. Use manycontacts.messages.send.template to initiate conversations outside this window.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number to send the message to |
body |
string |
Yes | Message text content |
manycontacts.messages.send.noteCreate an internal note on a contact's conversation. Notes are only visible to team members and are not sent to the WhatsApp contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact |
body |
string |
Yes | Internal note text |
manycontacts.messages.send.templateSend a WhatsApp Business template message. Templates are required to initiate conversations outside the 24-hour window or for bulk outbound messaging. Templates must be pre-approved by Meta.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number to send the template to |
templateId |
string |
Yes | Template ID (use manycontacts.templates.list to get IDs) |
variables |
string |
No | Template variables as a JSON array string (e.g. '["John","20%"]') |
WhatsApp Business templates are pre-approved message formats required for outbound messaging outside the 24-hour conversation window.
manycontacts.templates.listList all WhatsApp Business message templates. Shows template name, code, status, components, and media flags.
| Parameter | Type | Required | Description |
|---|---|---|---|
status |
"approved" | "pending" | "rejected" |
No | Filter templates by approval status |
manycontacts.templates.getGet full details of a specific template including its components (header, body, footer, buttons), configuration, and media attachments.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | Template ID |
manycontacts.templates.syncSync WhatsApp Business templates from Meta Cloud API. Fetches the latest templates from the connected WhatsApp Business account. Useful after creating or modifying templates in the Meta Business Manager.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
Campaigns allow bulk sending of WhatsApp template messages to a list of phone numbers at a scheduled time.
manycontacts.campaigns.listList all WhatsApp Business bulk messaging campaigns with statistics (sent, delivered, read, and failed counts), template names, and scheduled dates.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts.campaigns.createCreate a new WhatsApp Business bulk messaging campaign. The campaign will send a template message to the specified phone numbers at the scheduled time.
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Campaign name |
templateId |
string |
Yes | WhatsApp template ID to use (must be approved) |
phones |
string |
Yes | Comma-separated phone numbers (e.g. "34600000000,34600000001,34600000002") |
date |
string |
Yes | Scheduled send date in ISO format (e.g. "2026-12-01T09:00:00") |
variables |
string |
No | Template variables as a JSON array string (e.g. '["John","20%"]') |
manycontacts.campaigns.deleteDelete a WhatsApp Business campaign. Only pending (not yet sent) campaigns can be deleted.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | Campaign ID to delete |
Tags are colored labels used to categorize and filter WhatsApp Business contacts (e.g. "VIP", "Support", "Lead").
manycontacts.tags.listList all available tags with their names, colors, and IDs.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts.tags.createCreate a new tag for categorizing contacts.
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Tag name |
color |
string |
No | Tag color as hex code (e.g. "#ff0000"). Defaults to #fab1a0 |
manycontacts.tags.updateUpdate an existing tag's name or color.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | Tag ID to update |
name |
string |
No | New tag name |
color |
string |
No | New tag color as hex code |
manycontacts.tags.deleteDelete a tag. The tag will be removed from all contacts that have it.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | Tag ID to delete |
Teams group users together for assignment routing and contact organization.
manycontacts.teams.listList all teams in the organization.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts.teams.createCreate a new team.
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Team name |
manycontacts.teams.add_memberAdd a user to a team.
| Parameter | Type | Required | Description |
|---|---|---|---|
teamId |
string |
Yes | Team ID |
userId |
string |
Yes | User ID to add to the team |
manycontacts.teams.remove_memberRemove a user from a team.
| Parameter | Type | Required | Description |
|---|---|---|---|
teamId |
string |
Yes | Team ID |
userId |
string |
Yes | User ID to remove from the team |
manycontacts.teams.deleteDelete a team. Team members are not deleted, only the team grouping.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | Team ID to delete |
Funnels allow you to track contacts through a multi-stage sales or support pipeline (e.g. "New Lead" -> "Qualified" -> "Proposal" -> "Won").
manycontacts.funnels.listList all sales funnels/pipelines with their stages.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts.funnels.createCreate a new sales funnel/pipeline.
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Funnel name |
manycontacts.funnels.add_stageAdd a new stage to an existing funnel.
| Parameter | Type | Required | Description |
|---|---|---|---|
funnelId |
string |
Yes | Funnel ID |
name |
string |
Yes | Stage name (e.g. "Qualified", "Proposal Sent") |
order |
number |
Yes | Stage position in the pipeline (0-based) |
manycontacts.funnels.update_stageUpdate a stage's name within a funnel.
| Parameter | Type | Required | Description |
|---|---|---|---|
funnelId |
string |
Yes | Funnel ID |
stageId |
string |
Yes | Stage ID to update |
name |
string |
No | New stage name |
manycontacts.funnels.contactsList contacts currently in a specific funnel, optionally filtered by stage. Returns paginated results.
| Parameter | Type | Required | Description |
|---|---|---|---|
funnelId |
string |
Yes | Funnel ID |
stage_id |
string |
No | Filter by specific stage ID |
page |
number |
No | Page number |
limit |
number |
No | Results per page |
manycontacts.funnels.deleteDelete a sales funnel/pipeline and all its stages. Contacts in the funnel are not deleted.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | Funnel ID to delete |
Manage the team members who have access to the WhatsApp Business CRM.
manycontacts.users.listList all team members/users in the organization with their roles and details.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts.users.getGet details of a specific team member.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | User ID |
manycontacts.users.updateUpdate a team member's profile information.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | User ID to update |
name |
string |
No | New user display name |
manycontacts.users.inviteInvite a new team member to the organization by email. They will receive an invitation email to join.
| Parameter | Type | Required | Description |
|---|---|---|---|
email |
string |
Yes | Email address to send the invitation to |
manycontacts.users.deleteRemove a team member from the organization. Their assigned contacts will become unassigned.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | User ID to remove |
AI agents auto-respond to incoming WhatsApp messages using configurable instructions and scenarios. Only active agents are listed.
manycontacts.ai_agents.listList all active AI auto-reply agents with their configuration.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts.ai_agents.getGet full details of a specific AI agent including its scenarios (conversation flows), instruction blocks, and configuration.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | AI Agent ID (UUID) |
manycontacts.ai_agents.updateUpdate an AI agent's configuration. You can enable/disable the agent or modify its instruction blocks.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | AI Agent ID (UUID) |
active |
boolean |
No | Enable (true) or disable (false) the agent |
block_1 |
string |
No | Agent instructions — block 1 |
block_2 |
string |
No | Agent instructions — block 2 |
block_3 |
string |
No | Agent instructions — block 3 |
manycontacts.ai_agents.feedbackGet feedback and conversation logs for an AI agent. Shows how the agent has been responding and user satisfaction data.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | AI Agent ID (UUID) |
Pre-built prompts that guide AI agents through common workflows. Use these to quickly accomplish multi-step tasks.
contact-lookupLook up a WhatsApp contact and get a complete summary of their profile, tags, funnel stage, and recent messages.
| Argument | Required | Description |
|---|---|---|
phone |
Yes | Phone number in international format (e.g. +34612345678) |
send-campaignStep-by-step guide to creating a WhatsApp bulk campaign: lists available templates, asks for recipients and schedule, then creates the campaign.
| Argument | Required | Description |
|---|---|---|
| (none) | — | Interactive guided workflow |
daily-dashboardGenerates a complete overview of your ManyContacts account including channels, open conversations, team structure, and sales funnels.
| Argument | Required | Description |
|---|---|---|
| (none) | — | No arguments needed |
reply-to-contactReviews recent conversation history with a contact, then sends a WhatsApp message with full context.
| Argument | Required | Description |
|---|---|---|
phone |
Yes | Phone number in international format (e.g. +34612345678) |
message |
Yes | The message text to send |
manage-funnelDisplays all sales funnels with their stages and contact counts per stage, giving a visual pipeline overview.
| Argument | Required | Description |
|---|---|---|
| (none) | — | No arguments needed |
bulk-tag-contactsTags multiple contacts at once — finds or creates the tag, then applies it in bulk.
| Argument | Required | Description |
|---|---|---|
phones |
Yes | Comma-separated phone numbers (e.g. +34612345678,+34698765432) |
tagName |
Yes | Name of the tag to apply |
| Variable | Required | Description |
|---|---|---|
MC_CLI_TOKEN |
Yes* | ManyContacts CLI authentication token. Get one via mc auth login. |
MC_API_URL |
No | API base URL (default: https://api.manycontacts.com) |
*If you've logged in via the CLI, the token is stored locally at
~/.manycontacts/config.jsonand the MCP server reads it automatically.
The MCP server authenticates using CLI tokens. Each token is scoped to an organization and has configurable permissions.
# Login to get a token
mc auth login --email [email protected] --password mypassword
# The token is stored at ~/.manycontacts/config.json
# Or set it explicitly via environment variable:
export MC_CLI_TOKEN=your-token-here
When rate limited, the server returns a 429 error with a link to upgrade.
MIT
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"manycontacts-mcp-server": {
"command": "npx",
"args": []
}
}
}