Skip the install. Get this working in under 2 minutes.
Start a free trial on cloud.anythingmcp.com, add the Chatwoot in one click, then point your AI client (Claude, ChatGPT, Copilot or Cursor) at the generated MCP endpoint. No Docker, no git clone, zero engineering experience required.
Summary
Chatwoot omnichannel support inbox, Cloud or self-hosted: conversations and messages across WhatsApp, e-mail, web chat and social channels, contacts, labels, agents, teams, canned responses and support reports (first response, resolution and reply times). Replies, private notes and new conversations are included, installed switched off.
Try asking
Example prompts for Chatwoot
Click any prompt to copy it. Paste into Claude, ChatGPT, Cursor, Gemini, Copilot or OpenClaw to run it against this connector.
Claude is AI and can make mistakes. Please double-check responses.
💡 No install? Use cloud.anythingmcp.com directly. Sign in, click Connectors → Chatwoot, paste your credentials, mint an MCP API key and you're done. No Docker, no
git clone, no local server.
Chatwoot + Gemini
Chatwoot omnichannel support inbox, Cloud or self-hosted: conversations and messages across WhatsApp, e-mail, web chat and social channels, contacts, labels, agents, teams, canned responses and support reports (first response, resolution and reply times). Replies, private notes and new conversations are included, installed switched off.
Prerequisites
See the full setup instructions baked into the connector (visible in the in-app store when you select the connector). The required environment variables for this connector are:
CHATWOOT_URL, CHATWOOT_API_TOKEN, CHATWOOT_ACCOUNT_ID
Step 1 — Get credentials
Setting up takes about 2 minutes. You need a Chatwoot account, on Chatwoot Cloud or self-hosted, and the access token of the user the AI should act as.
- Sign in to Chatwoot with that user. Agents only see conversations of the inboxes they belong to and cannot read reports, so use an administrator for the full picture.
- Click your avatar, then Profile Settings, and copy the Access Token at the bottom of the page into
CHATWOOT_API_TOKEN. It does not expire; you can reset it on the same page. - Set
CHATWOOT_URLto the address you open Chatwoot at:https://app.chatwoot.comon Chatwoot Cloud, or your own domain such ashttps://chat.example.comwhen self-hosted. No path, no/app, no/api. - Set
CHATWOOT_ACCOUNT_IDto the number after/app/accounts/in the browser address bar:https://app.chatwoot.com/app/accounts/3/dashboardmeans 3. - Install the connector and run
chatwoot_get_profile: it shows the user behind the token, their role, and every account the token can reach with its id.
Account token, not Platform API: the token of a self-hosted super admin's Platform App (/platform/api) does not work here. The connector uses the Chatwoot Application API of one account.
Self-hosted behind nginx: the token travels in the api_access_token header, and nginx drops headers with an underscore unless underscores_in_headers on; is set. That shows up as 401 on every call although the token is right. On AnythingMCP Cloud, a self-hosted Chatwoot that only lives in a private network cannot be reached; run a self-hosted AnythingMCP inside that network instead.
What it reads: the account and the user behind the token; your inboxes (WhatsApp, e-mail, web widget, API, Instagram, Telegram and so on) with their members; agents and administrators with their availability; teams and their members; labels, canned responses and custom attribute definitions; conversations with status, priority, inbox, labels, contact, assignee and team, as lists, counts or with filters such as created after a date and assigned to one agent; the messages of a conversation including private notes and attachments; contacts by name, e-mail, phone number or identifier, with all their conversations across inboxes; and the support reports: totals for a period next to the previous period, a metric over time, agents, inboxes or teams compared side by side, and what is open and unattended right now. Inbox channel secrets and the user's own access token are removed from responses.
Times and figures: conversation and message times and report periods are Unix timestamps in seconds (UTC), and the AI converts them before quoting a time. First response, resolution and reply times in reports are seconds.
Asks before every change: chatwoot_set_conversation_labels. Chatwoot replaces the whole label list of a conversation, so the AI first reads the current labels and sends them together with the new one (or without the one to remove). Labels must already exist in the account. The AI shows you the conversation and the new label list and waits for your yes.
Switched off at install: chatwoot_send_message (a reply, or a private note only agents see) and chatwoot_create_conversation. A reply or a first message reaches the customer at once on WhatsApp, e-mail or chat, so an administrator turns them on deliberately. Even then the AI shows you the text and the recipient and waits for your yes. On WhatsApp Cloud API inboxes, free text only reaches a contact within 24 hours of their last message; outside that window Chatwoot needs an approved template, which this connector does not send.
Limits: conversation lists come 25 per page, contacts 15 per page and messages 20 at a time, so the AI pages through them; for a plain number it counts instead of listing. Reports and live stats need an administrator token.
Common errors: 401 means a wrong or reset token, or nginx dropping the header. 404 on every call usually means a wrong CHATWOOT_URL or CHATWOOT_ACCOUNT_ID; 404 on one conversation means an id this user cannot see. Reports answer 401 or 403 for agents who are not administrators.
The connector does not use the Platform API, send WhatsApp templates, resolve, reassign or delete existing conversations, or edit or delete contacts.
Step 2 — Install the adapter
curl -fsSL https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml -o docker-compose.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d
Step 3 — Add the connector in Gemini
Your server URL: in AnythingMCP, open MCP Servers → the server this connector is on, and copy its URL (
https://cloud.anythingmcp.com/mcp/…). Use it wherever this guide showsYOUR_SERVER_ID.
Gemini CLI reads MCP servers from ~/.gemini/settings.json (on Windows %USERPROFILE%\.gemini\settings.json). Add:
{
"mcpServers": {
"anythingmcp": {
"httpUrl": "https://cloud.anythingmcp.com/mcp/YOUR_SERVER_ID",
"headers": { "X-API-Key": "YOUR_MCP_API_KEY" }
}
}
}
- Create an MCP API key in AnythingMCP under MCP Servers → your server → API keys, and paste it in place of
YOUR_MCP_API_KEY. - Save the file and restart
gemini. - Run
/mcpinside Gemini CLI (orgemini mcp listin your shell):anythingmcpshould show as connected. - Start prompting: Gemini CLI can now call the
Chatwoottools.
Available tools
| Tool | What it does |
|---|---|
chatwoot_get_profile | Get the user behind the access token: id, name, email, role, availability and every account the token can reach (accounts[].id and name) |
chatwoot_get_account | Get the Chatwoot account configured in CHATWOOT_ACCOUNT_ID: name, locale, domain, support e-mail, status, enabled features and custom… |
chatwoot_list_inboxes | List the inboxes (channels) of the account: id, name, channel type (WhatsApp, API, web widget, e-mail, Instagram, Telegram...), phone… |
chatwoot_list_inbox_agents | List the agents who are members of one inbox (id, name, email, role, availability) |
chatwoot_list_agents | List the agents and administrators of the account: id, name, email, role (agent or administrator), availability (online, busy, offline) and… |
chatwoot_list_teams | List the teams of the account (id, name, description, whether auto-assignment is on) |
chatwoot_list_team_members | List the agents in one team (id, name, email, role, availability) |
chatwoot_list_labels | List the labels defined in the account: id, title, description and color |
chatwoot_list_canned_responses | List the canned responses (saved replies) of the account: id, short code and content |
chatwoot_list_custom_attributes | List the custom attribute definitions of the account for conversations (attribute_model 0) or contacts (1): key, display name, type and… |
chatwoot_list_conversations | List conversations, 25 per page, newest activity first, with counts (mine, assigned, unassigned, all) |
chatwoot_count_conversations | Count conversations without listing them: mine_count, assigned_count, unassigned_count and all_count for a status, inbox, team or label |
chatwoot_filter_conversations | Filter conversations with Chatwoot's advanced filter, 25 per page: a list of conditions on status, assignee_id, inbox_id, team_id… |
chatwoot_get_conversation | Get one conversation by its id (the number shown in the Chatwoot URL): status, priority, inbox, labels, contact, assignee, team, custom and… |
chatwoot_list_messages | List the messages of a conversation, oldest first: the latest 20 by default, or 20 older than before. message_type 0 = incoming (from the… |
chatwoot_list_contacts | List contacts with an e-mail, phone number or identifier, 15 per page: id, name, e-mail, phone, identifier, custom and additional… |
chatwoot_search_contacts | Search contacts by name, e-mail, phone number or identifier (case-insensitive, partial), 15 per page. meta.has_more tells whether another… |
chatwoot_get_contact | Get one contact: name, e-mail, phone, identifier, custom and additional attributes, last activity and the inboxes the contact is reachable… |
chatwoot_list_contact_conversations | List the conversations of one contact across all inboxes, with status, labels, assignee and last message |
chatwoot_get_report_summary | Get the totals of a period for the account, an agent, an inbox, a label or a team: conversations, incoming and outgoing messages… |
chatwoot_get_report_timeseries | Get one metric over time as [{value, timestamp}] buckets, for the account, an agent, an inbox, a label or a team, grouped by hour, day… |
chatwoot_get_summary_by | Compare agents, inboxes or teams over a period, one row each: conversations, resolved and handled conversations, average resolution, first… |
chatwoot_get_live_conversation_stats | Right now: how many conversations are open, unattended (no reply yet) and unassigned for the whole account (type account), or open and… |
chatwoot_send_message | Send a reply in an existing conversation, or add a private note that only agents see (private true) |
chatwoot_set_conversation_labels | Set the labels of a conversation |
chatwoot_create_conversation | Start a new conversation with an existing contact in an inbox, optionally with a first message, status, assignee and team |
Example prompts
- "How many open conversations are unassigned right now, and which agents have unattended chats?"
- "Read conversation 1284 and summarise what the customer wants and what we already promised."
- "Find the contact [email protected] and list all her conversations across WhatsApp and e-mail."
- "Compare our agents over the last 30 days: conversations handled, first response time and resolution time."
- "Add the label refund to conversation 1284 and keep its other labels. Show me the new list first."
FAQ
Where does Gemini CLI look for MCP servers? In ~/.gemini/settings.json for your user, or in .gemini/settings.json inside a project. gemini mcp list shows each server and whether it connects.
Next steps
Was this guide helpful?