ManyContacts MCP Server
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.
Quick Start
1. Get your CLI token
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
2. Configure in your MCP client
Claude Desktop / Claude Code
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"
}
}
}
}
Cursor
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.
Available Tools (47 total)
Account & Context
manycontacts_context
Get 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_get
Get WhatsApp Business organization/account information including name, timezone, and all configuration settings.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts_org_update
Update 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_get
Get 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_apikey
Get the organization's REST API key for direct API integrations.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts_channels_list
List 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 |
Contacts
All contact operations use phone numbers as identifiers (with country code, no + prefix, e.g. 34600000000).
manycontacts_contacts_list
List 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_get
Get 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_create
Create 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_update
Update 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_delete
Permanently delete a contact from the CRM.
| Parameter | Type | Required | Description |
|---|---|---|---|
phone |
string |
Yes | Phone number of the contact to delete |
manycontacts_contacts_assign
Assign 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_unassign
Remove 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_close
Close 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_open
Reopen 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_add
Add 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_remove
Remove 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_add
Add 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_remove
Remove 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_stage
Move 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_bulk
Perform 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. |
Messaging
manycontacts_messages_list
List 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_text
Send 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_note
Create 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_template
Send 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%"]') |
Templates
WhatsApp Business templates are pre-approved message formats required for outbound messaging outside the 24-hour conversation window.
manycontacts_templates_list
List 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_get
Get 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_sync
Sync 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
Campaigns allow bulk sending of WhatsApp template messages to a list of phone numbers at a scheduled time.
manycontacts_campaigns_list
List 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_create
Create 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_delete
Delete 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
Tags are colored labels used to categorize and filter WhatsApp Business contacts (e.g. "VIP", "Support", "Lead").
manycontacts_tags_list
List all available tags with their names, colors, and IDs.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts_tags_create
Create 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_update
Update 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_delete
Delete 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
Teams group users together for assignment routing and contact organization.
manycontacts_teams_list
List all teams in the organization.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts_teams_create
Create a new team.
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Team name |
manycontacts_teams_add_member
Add 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_member
Remove 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_delete
Delete a team. Team members are not deleted, only the team grouping.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | Team ID to delete |
Sales Funnels / Pipelines
Funnels allow you to track contacts through a multi-stage sales or support pipeline (e.g. "New Lead" -> "Qualified" -> "Proposal" -> "Won").
manycontacts_funnels_list
List all sales funnels/pipelines with their stages.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts_funnels_create
Create a new sales funnel/pipeline.
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Funnel name |
manycontacts_funnels_add_stage
Add 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_stage
Update 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_contacts
List 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_delete
Delete 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 |
Users / Team Members
Manage the team members who have access to the WhatsApp Business CRM.
manycontacts_users_list
List all team members/users in the organization with their roles and details.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts_users_get
Get details of a specific team member.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | User ID |
manycontacts_users_update
Update 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_invite
Invite 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_delete
Remove 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
AI agents auto-respond to incoming WhatsApp messages using configurable instructions and scenarios. Only active agents are listed.
manycontacts_ai_agents_list
List all active AI auto-reply agents with their configuration.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | — | — | No parameters needed |
manycontacts_ai_agents_get
Get 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_update
Update 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_feedback
Get 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) |
Environment Variables
| 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.
Authentication
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
Rate Limits
- Paying accounts: 60 requests/minute
- Free/trial accounts: 10 requests/minute
When rate limited, the server returns a 429 error with a link to upgrade.
License
MIT