npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@manycontacts/mcp

v1.1.1

Published

MCP server for ManyContacts — WhatsApp Business CRM operations, messaging, campaigns, AI agents, and contact management via Model Context Protocol

Readme

smithery badge

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.json and the MCP server will pick it up automatically — no MC_CLI_TOKEN env var needed.


Available Tools (55 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_from and date_to together, 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) |


Available Prompts (6 total)

Pre-built prompts that guide AI agents through common workflows. Use these to quickly accomplish multi-step tasks.

contact-lookup

Look 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-campaign

Step-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-dashboard

Generates 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-contact

Reviews 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-funnel

Displays 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-contacts

Tags 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 |


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.json and 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