Chatwoot MCP Server
Provides tools for integrating with the Chatwoot API to manage customer conversations and messages, including listing and retrieving conversations, reading message history, sending messages or internal notes, and toggling conversation status.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Chatwoot MCP Servershow me all open conversations in account 3"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Chatwoot MCP Server
Model Context Protocol (MCP) server for Chatwoot API integration. Enables AI assistants to manage customer conversations, messages, and contacts in Chatwoot.
Features
Conversations Management: List, filter, and retrieve conversation details
Message Operations: Read message history and send new messages
Type-Safe: Built with TypeScript using OpenAPI-generated types
Flexible Auth: Supports both API token (recommended) and JWT authentication
Related MCP server: @indica-facil/mcp-chatwoot
Tools Provided
Conversations
chatwoot_list_conversations- List conversations with filtering (status, assignee, inbox)chatwoot_get_conversation- Get detailed info for a specific conversation
Messages
chatwoot_list_messages- List all messages in a conversationchatwoot_create_message- Send a message or create an internal note
Installation
npm install
npm run buildConfiguration
Recommended: API Access Token
The simplest method using your Chatwoot API token (no expiration).
Get your API token:
Log in to your Chatwoot account
Click your avatar → Profile Settings
Scroll to bottom → Copy your "Access Token"
Configure .env:
CHATWOOT_BASE_URL="https://your-chatwoot-instance.com"
CHATWOOT_API_TOKEN="your_api_token_here"Alternative: JWT Authentication
Use email/password if API tokens don't work on your instance (requires password for token refresh).
CHATWOOT_BASE_URL="https://your-chatwoot-instance.com"
CHATWOOT_EMAIL="your@email.com"
CHATWOOT_PASSWORD="your_password"Note: JWT tokens expire and require the password for auto-refresh.
Important for Self-Hosted Instances
If using nginx as reverse proxy (e.g., CapRover), add this to nginx config to support API tokens:
server {
...
underscores_in_headers on; # Required for api_access_token header
...
}Usage
Running the Server
npm startDevelopment Mode (with auto-reload)
npm run devUsing with Claude Code
claude mcp add chatwoot \
-e CHATWOOT_BASE_URL="https://your-instance.com" \
-e CHATWOOT_API_TOKEN="your_token" \
-- node /path/to/chatwoot-mcp-server/dist/index.jsUsing with Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"chatwoot": {
"command": "node",
"args": ["/path/to/chatwoot-mcp-server/dist/index.js"],
"env": {
"CHATWOOT_BASE_URL": "https://your-chatwoot-instance.com",
"CHATWOOT_API_TOKEN": "your_api_token"
}
}
}
}Example Queries
Once connected, you can ask Claude things like:
"Show me all open conversations in account 3"
"What are the details of conversation #123?"
"List all messages in conversation #456"
"Send a reply to conversation #789 saying 'Thank you for contacting us!'"
"Add an internal note to conversation #101 about the customer's issue"
Testing
Run integration tests:
npm testWatch mode:
npm run test:watchProject Structure
chatwoot-mcp-server/
├── src/
│ ├── index.ts # Main server entry point
│ ├── constants.ts # Shared constants
│ ├── chatwoot-types.ts # Generated OpenAPI types
│ ├── services/
│ │ ├── chatwoot-client.ts # API client with auth
│ │ ├── chatwoot-auth.ts # JWT authentication
│ │ ├── token-cache.ts # JWT token caching
│ │ └── error-handler.ts # Error handling utilities
│ ├── schemas/
│ │ └── common.ts # Shared Zod schemas
│ └── tools/
│ ├── conversations.ts # Conversation tools
│ └── messages.ts # Message tools
├── test/ # Integration tests
├── swagger.json # Chatwoot OpenAPI spec
└── package.jsonDevelopment
Regenerating Types
If the Chatwoot API changes, regenerate types:
npm run generate-typesAdding New Tools
Create a new file in
src/tools/Define Zod schemas for input validation
Implement the tool function
Register the tool in
src/index.ts
Building
npm run buildBuilds TypeScript to JavaScript in the dist/ directory.
Troubleshooting
API Token Returns 401
If using a self-hosted instance with nginx, ensure underscores_in_headers on; is set in your nginx config. This is required because api_access_token contains underscores.
JWT Tokens Expire
If using JWT authentication, tokens expire (typically after 2 weeks). Keep CHATWOOT_PASSWORD in .env for automatic refresh, or switch to API token authentication.
Tech Stack
TypeScript - Type-safe development
openapi-fetch - Type-safe API client
openapi-typescript - Generate types from OpenAPI spec
Zod - Runtime input validation
@modelcontextprotocol/sdk - MCP server framework
Vitest - Testing framework
License
MIT
Contributing
Contributions are welcome! Additional tools that could be added:
Contact management (create, update, search)
Team and agent operations
Inbox configuration
Labels and custom attributes
Reports and analytics
Bulk operations
Fork: local build for github.com/vivernet/chatwoot-mcp
This copy is a fork of chatwoot-mcp-server@1.0.0 (see UPSTREAM.md),
run from source instead of via npx, with one added tool.
Changes in this fork
New tool
chatwoot_toggle_status— changes a conversation status (open/resolved/pending/snoozed), including optionalsnoozed_until(Unix timestamp in seconds) for scheduled snooze. Implemented indist/tools/conversations.js+ registered indist/index.js; uses the stock ChatwootPOST /api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_statusendpoint (already present in the generated OpenAPI types).Version bumped to
1.1.0;startscript runsnode dist/index.js.
Running locally (no npx)
node dist/index.jsNeeds the same env vars as upstream: CHATWOOT_BASE_URL plus either
CHATWOOT_API_TOKEN or CHATWOOT_EMAIL/CHATWOOT_PASSWORD.
Smoke test
python3 tests/mcp_smoke.py # stub HTTP backend, no real Chatwoot neededHermes Agent wiring
Hermes config.yaml → mcp_servers.chatwoot:
mcp_servers:
chatwoot:
command: node
args: ["/absolute/path/to/chatwoot-mcp-server/dist/index.js"]
env:
CHATWOOT_BASE_URL: ${env:CHATWOOT_BASE_URL}
CHATWOOT_EMAIL: ${env:CHATWOOT_EMAIL}
CHATWOOT_PASSWORD: ${env:CHATWOOT_PASSWORD}Companion approval plugin (guards chatwoot_create_message and
chatwoot_toggle_status behind the human-approval gate): see the
chatwoot-approval Hermes plugin.
Available Tools
5 toolschatwoot_create_messageCreate Message in ConversationA
Create a new message in a Chatwoot conversation.
This tool sends a message in an existing conversation. Can be used for outgoing messages to customers or private internal notes.
Args:
account_id (number): The numeric ID of the Chatwoot account (required)
conversation_id (number): The ID of the conversation (required)
content (string): The message content (required)
message_type (string): Type of message - "outgoing" or "incoming" (default: "outgoing")
private (boolean): Whether this is a private internal note (default: false)
Returns: Created message details including ID and confirmation
Examples:
Send a reply: { account_id: 1, conversation_id: 123, content: "Thank you for contacting us!" }
Add internal note: { account_id: 1, conversation_id: 123, content: "Customer called for follow-up", private: true }
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | The message content | |
| private | No | Whether the message is private (internal note) | |
| account_id | Yes | The numeric ID of the account | |
| message_type | No | The type of message | outgoing |
| conversation_id | Yes | The ID of the conversation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true. The description adds that messages reach customers externally or stay as internal notes, which is real behavioral context, but it never warns that retries may duplicate messages (non-idempotent) and does not disclose permission requirements or whether a sent message can later be edited or deleted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and the Args/Returns/Examples structure is easy to scan. There is some redundancy since the Args block repeats schema descriptions verbatim, costing lines without adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description helpfully includes a Returns line covering the created message ID and confirmation, and it covers every input with examples. Remaining gaps are edge behavior: error cases (e.g., nonexistent conversation_id) and whether the account/conversation must be accessible to the caller's token.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema, including the message_type enum and the private flag. The description's Args block largely restates those same definitions; the only added value is the paired worked examples, which is baseline-level supplementation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a new message in a Chatwoot conversation") plus the key subtype distinction (outgoing customer message vs. private internal note). This clearly separates it from the read-oriented siblings such as chatwoot_list_messages and chatwoot_get_conversation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"This tool sends a message in an existing conversation" establishes the precondition and the two usage modes, and the two examples make the outgoing-vs-private-note choice concrete. It never states when not to use it (e.g., use chatwoot_list_messages to read existing messages instead), so it falls short of explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatwoot_get_conversationGet Chatwoot Conversation DetailsARead-onlyIdempotent
Get detailed information about a specific Chatwoot conversation.
This tool retrieves full details for a single conversation including contact info, assignee, labels, and custom attributes.
Args:
account_id (number): The numeric ID of the Chatwoot account (required)
conversation_id (number): The ID of the conversation to retrieve (required)
response_format (string): Output format - "markdown" or "json" (default: "markdown")
Returns: Full conversation details including:
Status, inbox, and metadata
Complete contact information
Assignee details
Labels and custom attributes
Message statistics
Examples:
Get conversation details: { account_id: 1, conversation_id: 123 }
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | The numeric ID of the account | |
| conversation_id | Yes | The ID of the conversation | |
| response_format | No | Output format: 'markdown' for human-readable or 'json' for machine-readable | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and openWorld, so the safety profile is handled. The description adds genuine context beyond that by enumerating what the response contains (contact info, assignee, labels, custom attributes, message statistics), which helps the agent decide whether one call suffices.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by sharply organized sections. There is mild redundancy in restating Args and Returns that the schema and annotations partly cover, but nothing is padded with filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, describing the returned fields is the right use of space, and the description does that. It stops short of covering error behavior or what happens for a nonexistent conversation ID, but otherwise an agent has what it needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema, including the response_format enum. The Args block restates them without adding format, constraint, or failure-mode detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get detailed information about a specific Chatwoot conversation') and implicitly contrasts with chatwoot_list_conversations by scoping to a single conversation with full details. An agent can select it without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'a specific conversation' implies when to use it versus the list sibling, but there is no explicit when-to-use/when-not guidance, no prerequisites, and no named alternatives such as chatwoot_list_messages for message data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatwoot_list_conversationsList Chatwoot ConversationsARead-onlyIdempotent
List conversations from a Chatwoot account with filtering options.
This tool retrieves conversations from Chatwoot, allowing you to filter by status, assignee, and inbox. Supports pagination for large result sets.
Args:
account_id (number): The numeric ID of the Chatwoot account (required)
page (number): Page number for pagination, starts at 1 (default: 1)
status (string): Filter by conversation status - "open", "resolved", "pending", "snoozed", or "all" (default: "open")
assignee_type (string): Filter by assignee - "me", "unassigned", or "all" (optional)
inbox_id (number): Filter by specific inbox ID (optional)
response_format (string): Output format - "markdown" or "json" (default: "markdown")
Returns: A list of conversations with details including:
Conversation ID, status, and inbox
Contact information (name, email)
Assignee details
Message count and unread count
Last activity timestamp
Examples:
List all open conversations: { account_id: 1, status: "open" }
List unassigned conversations: { account_id: 1, assignee_type: "unassigned" }
List conversations in specific inbox: { account_id: 1, inbox_id: 5 }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (starts at 1) | |
| status | No | Filter conversations by status | open |
| inbox_id | No | Filter conversations by inbox ID | |
| account_id | Yes | The numeric ID of the account | |
| assignee_type | No | Filter by assignee type | |
| response_format | No | Output format: 'markdown' for human-readable or 'json' for machine-readable | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive and open-world. The description adds genuinely useful behavioral detail beyond that: the default status filter is 'open' (easy to miss and materially affects results), pagination is supported, and the returned fields are enumerated. It does not mention page size or total-count behavior, which keeps it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then Args/Returns/Examples in a predictable structure. The Args section duplicates every field already fully described in the schema, which is avoidable bloat, but the Returns and Examples sections earn their space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description steps in with a useful summary of returned fields (ID, status, inbox, contact, assignee, counts, timestamp). Pagination metadata and page size are the remaining unknowns, but nothing an agent needs to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with enums on status, assignee_type and response_format, so the schema already carries all parameter semantics. The Args block largely restates the schema, adding only example value combinations, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List conversations from a Chatwoot account') with the scope of filtering options. It is clearly distinguishable from siblings like chatwoot_get_conversation and chatwoot_list_messages by resource, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The filtering narrative plus three concrete examples ('List unassigned conversations', 'List conversations in specific inbox') give clear context for when to use it. No explicit when-not-to-use guidance or contrast with chatwoot_get_conversation, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatwoot_list_messagesList Messages in ConversationARead-onlyIdempotent
List all messages in a Chatwoot conversation.
This tool retrieves all messages from a specific conversation, including message content, sender information, timestamps, and attachments.
Args:
account_id (number): The numeric ID of the Chatwoot account (required)
conversation_id (number): The ID of the conversation (required)
response_format (string): Output format - "markdown" or "json" (default: "markdown")
Returns: List of messages with:
Message ID and content
Message type (incoming/outgoing)
Sender information (name, type)
Timestamp
Attachment information
Private flag (for internal notes)
Examples:
List all messages: { account_id: 1, conversation_id: 123 }
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | The numeric ID of the account | |
| conversation_id | Yes | The ID of the conversation | |
| response_format | No | Output format: 'markdown' for human-readable or 'json' for machine-readable | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds useful behavioral context by listing the returned message fields, including sender information, attachments, timestamps, and private-note flags, though it does not discuss pagination or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with Args, Returns, and Examples sections, and the main purpose is front-loaded. However, the Args section largely duplicates the fully documented schema, and the Returns section is somewhat verbose for a simple read operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with complete schema coverage and annotations, the description gives sufficient context about inputs and returned fields. The absence of pagination or volume-limit details is a minor gap, but it is otherwise complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema. The description repeats the arguments and clarifies the response_format options, but adds little meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: "List all messages in a Chatwoot conversation." It clearly distinguishes this from message creation and conversation-level retrieval by focusing on messages within a specific conversation, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied by "retrieves all messages from a specific conversation" and an example is provided. However, there is no explicit guidance on when to use this instead of sibling tools such as chatwoot_get_conversation or chatwoot_create_message, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatwoot_toggle_statusChange Conversation StatusADestructive
Change the status of a Chatwoot conversation (open/resolved/pending/snoozed).
This tool updates the conversation status. Use "snoozed" together with snoozed_until to schedule a reopen.
Args:
account_id (number): The numeric ID of the Chatwoot account (required)
conversation_id (number): The ID of the conversation (required)
status (string): Target status: open, resolved, pending or snoozed (required)
snoozed_until (number): Optional Unix timestamp (seconds) when a snoozed conversation reopens
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | Target conversation status: open, resolved, pending or snoozed | |
| account_id | Yes | The numeric ID of the account | |
| snoozed_until | No | When status is snoozed, Unix timestamp (seconds) to reopen the conversation; omit to snooze until the next customer reply | |
| conversation_id | Yes | The ID of the conversation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is carried by structured data. The description adds the snoozed/snoozed_until interaction, but says nothing about what the destructive behavior actually entails — whether resolving notifies the customer, whether the change is reversible, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded correctly in one sentence. But the second sentence ('This tool updates the conversation status') is pure restatement, and the Args section duplicates a schema that is already fully documented, so a meaningful share of the text does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with no output schema, an agent still lacks the side effects of each status transition and the shape of the response. Parameter coverage is complete, so this is adequate but with a clear gap around mutation consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The Args block largely restates the schema; notably it omits the schema's useful nuance that snoozing without snoozed_until lasts until the next customer reply, so it adds no meaning beyond the schema and slightly loses some.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change the status of a Chatwoot conversation') and enumerates the four target statuses. The mutation framing makes it trivially distinguishable from the list/get/create-message siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is the pairing rule 'use snoozed together with snoozed_until to schedule a reopen', which is genuinely useful. There is no when-to-use vs. alternatives, no prerequisite/permission context, and no statement of when not to use it (e.g., vs. merely reading or replying to a conversation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.1.0- First observed
chatwoot_create_message - First observed
chatwoot_get_conversation - First observed
chatwoot_list_conversations - First observed
chatwoot_list_messages - First observed
chatwoot_toggle_status
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: listing conversations, getting one conversation, changing status, listing messages, and creating a message. The list/get and message read/write pairs are cleanly separated by scope and action.
All tools use the same chatwoot_ prefix and snake_case verb_noun pattern. The convention is predictable throughout, with only minor semantic looseness in 'toggle_status' since it sets rather than toggles.
Five tools is a compact, well-scoped set for conversation-centric Chatwoot workflows. Each tool earns its place without redundancy or excessive surface area.
The core conversation read/reply/status workflow is covered, but notable Chatwoot operations are absent: creating conversations, assigning agents, managing labels, and listing contacts or inboxes. These gaps will limit common support workflows.
Maintenance
Related MCP Connectors
- UserportOAuthio.userport
Read and answer support conversations, and run outbound email and chat sequences, from your AI.
Give AI agents secure access to RevDesk calling, SMS, phone numbers, caller IDs, and usage.
Access your Callin.io AI phone agents, call history and transcripts from any AI assistant.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI assistants to manage contacts, send messages, handle conversations, and manage workspace via the Respond.io API.28100 npmMIT
- AlicenseNot gradedqualityBmaintenanceExposes the full Chatwoot API as 129 tools for AI assistants, enabling account, contact, conversation, message, inbox, team, report, help center, automation, and custom attribute management, plus exclusive Kanban and scheduled message features.5 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to read conversations, send messages, and manage members in Microsoft Teams via the Teams Chat Service REST API.75 npm8MIT
- AlicenseBqualityCmaintenanceProvides AI assistants with read-only access to Chatwoot analytics and operational data, including conversations, agents, inboxes, teams, CSAT, and real-time metrics.301MIT