Skip to content

Connect Crisp to Claude: Automate Messages, Campaigns, and Articles

Learn how to dynamically generate a secure MCP server to connect Crisp to Claude. Automate live chat workflows, helpdesk articles, and user profile management.

Uday Gajavalli Uday Gajavalli · · 9 min read
Connect Crisp to Claude: Automate Messages, Campaigns, and Articles

If you need to connect Crisp to Claude to automate live chat support, deploy marketing campaigns, or manage helpdesk documentation, you need a Model Context Protocol (MCP) server. This MCP server acts as the translation layer between Claude's LLM tool calls and Crisp's REST API. You can either build and maintain this infrastructure from scratch, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL. If your team uses ChatGPT, check out our guide on connecting Crisp to ChatGPT or explore our broader architectural overview on connecting Crisp to AI Agents.

Giving a Large Language Model (LLM) read and write access to a high-volume support system like Crisp is an engineering challenge. You have to handle persistent authentication lifecycles, map complex nested JSON schemas to MCP tool definitions, and deal with Crisp's strict rate limits. Every time an endpoint behavior shifts, you have to update your server code, redeploy, and test the integration.

This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Crisp, connect it natively to Claude Desktop, and execute complex support and marketing workflows using natural language.

The Engineering Reality of the Crisp API

A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against Crisp's APIs is painful.

If you decide to build a custom MCP server for Crisp, you own the entire API lifecycle. Here are the specific challenges you will face:

The Session vs. People Identity Model Crisp fundamentally splits visitor identities. A visitor communicating via the chat widget generates a session_id. However, if you want to update their long-term CRM data, you must operate on a people_id. If you expose these raw disparate endpoints to Claude without context, the LLM will hallucinate ID types, attempting to use a session_id in a profile update payload. A properly configured MCP server must clearly define these schema requirements to guide the model.

Message Fingerprinting and Idempotency Crisp does not just use sequential integer IDs for messages. It relies on a fingerprint - a unique hash representing a specific message iteration. When you update or delete a message via the API, you must pass the exact fingerprint you received from a prior read request. If you fail to enforce this strict state-passing, Claude will generate random strings, resulting in 400 Bad Request errors.

Rate Limits and 429 Error Handling Crisp enforces rate limits based on your workspace tier. Because AI agents can execute loops at high velocity, they easily trigger HTTP 429 Too Many Requests errors.

It is critical to understand that Truto does not retry, throttle, or apply backoff on rate limit errors. If Crisp returns a 429, Truto passes that error directly back to the caller. However, Truto normalizes the upstream rate limit information into standard IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). This standardization allows your Claude agent (or your application code invoking Claude) to read a predictable reset window and execute its own exponential backoff logic before retrying the tool call.

How to Generate a Crisp MCP Server with Truto

Truto dynamically translates your authenticated Crisp connection into an MCP-compliant JSON-RPC server. You can generate this server either via the Truto UI or programmatically via the API.

Method 1: Via the Truto UI

For administrators setting up internal agent workflows, the UI is the fastest path.

  1. Navigate to the Integrated Accounts page in your Truto dashboard and select your connected Crisp account.
  2. Click the MCP Servers tab.
  3. Click Create MCP Server.
  4. Configure your server settings (assign a descriptive name, select specific tool tags, or set an optional expiration date).
  5. Copy the generated MCP server URL (e.g., https://api.truto.one/mcp/abc123def456...). This URL contains a securely hashed token tied exclusively to this account.

Method 2: Via the REST API

For engineering teams building multi-tenant AI products, you can provision Crisp MCP servers dynamically for each of your customers via the API.

Make a POST request to the /integrated-account/:id/mcp endpoint:

curl -X POST "https://api.truto.one/integrated-account/c_12345abcde/mcp" \
  -H "Authorization: Bearer <YOUR_TRUTO_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Claude Support Agent MCP",
    "config": {
      "methods": ["read", "write"],
      "tags": ["support", "campaigns"]
    }
  }'

The API provisions the infrastructure, verifies tool availability, and returns a payload containing the secure URL:

{
  "id": "mcp_890xyz",
  "name": "Claude Support Agent MCP",
  "url": "https://api.truto.one/mcp/a1b2c3d4e5f6...",
  "expires_at": null
}

How to Connect the MCP Server to Claude

Once you have your Truto MCP URL, you need to register it with Claude so the model can discover and execute the Crisp tools.

Method A: Via the Claude UI

If you are using Claude for Web or the enterprise interface:

  1. Open Claude and navigate to Settings -> Integrations.
  2. Click Add MCP Server or Add Custom Connector.
  3. Paste the Truto MCP URL generated in the previous step.
  4. Click Add. Claude will perform a handshake, run the tools/list protocol, and immediately expose the Crisp capabilities to the chat interface.

Method B: Via Manual Config File (Claude Desktop)

If you are running Claude Desktop locally for development, you configure the server using standard SSE (Server-Sent Events) via the official MCP CLI tool.

Open your claude_desktop_config.json file (typically located in ~/Library/Application Support/Claude/ on macOS or %APPDATA%\Claude\ on Windows) and add the following:

{
  "mcpServers": {
    "crisp-truto": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "https://api.truto.one/mcp/a1b2c3d4e5f6..."
      ]
    }
  }
}

Restart Claude Desktop. The application will initialize the SSE connection to Truto, fetching the normalized Crisp schemas.

Hero Tools for Crisp Automation

Truto provides deep coverage of the Crisp API. Here are the highest-leverage tools available for your LLM frameworks.

1. list_all_crisp_conversations

Retrieves a paginated list of chat sessions for a specific workspace. Essential for finding open support tickets or triaging new inquiries.

Usage note: Requires website_id and page_number. The LLM can use this to iterate through the inbox to find unassigned or unread threads.

"Fetch the first page of conversations for website ID xyz-123. Identify any threads that have not received a reply from an operator in the last 24 hours."

2. get_single_crisp_conversation_by_id

Fetches the complete metadata object for a specific chat session, including user segments, geographic origin, and routing assignments.

Usage note: Requires website_id and session_id.

"Get the full details for session ID abc-456 on website xyz-123. Check if this conversation is currently assigned to the 'Billing' inbox."

3. create_a_crisp_message

Appends a new message to an existing conversation. This can be an internal note, a public reply, or a file attachment.

Usage note: Requires website_id, session_id, type, from, origin, and content. Claude must format the content payload strictly according to the message type (e.g., text vs. rich media).

"Send a text message to session ID abc-456 on website xyz-123 from 'operator' stating: 'We have received your bug report and our engineering team is investigating.'"

4. list_all_crisp_helpdesk_articles

Retrieves knowledge base articles configured for a specific language locale.

Usage note: Requires website_id, locale (e.g., 'en', 'fr'), and page_number. Perfect for Retrieval-Augmented Generation (RAG) tasks where Claude needs to cite official documentation before drafting a reply.

"List all English helpdesk articles for website xyz-123. Find the article discussing 'Password Reset' and summarize its steps."

5. create_a_crisp_campaign

Creates a new targeted marketing or proactive support campaign within Crisp.

Usage note: Requires website_id, type, and name. This tool initializes the campaign skeleton. The agent will typically follow up with a patch request to add the message payload and recipient filters.

"Create a new Crisp campaign named 'Q3 Feature Release' for website xyz-123. It should be an 'automated' type campaign."

6. update_a_crisp_people_profile_by_id

Overwrites the persistent CRM profile data for a specific user, enabling cross-session identity tracking.

Usage note: Requires website_id and people_id. The LLM can use this to sync external CRM data (like subscription tier or LTV) directly into the Crisp contact panel.

"Update the people profile for user ID 789-def on website xyz-123. Add a custom segment tag called 'enterprise-tier' and update their location to 'London'."

For the complete inventory of available Crisp operations, exact JSON schemas, and pagination mechanics, review the Crisp integration page.

Workflows in Action

Once connected, Claude transforms from a static chat interface into an active operator. Here are two concrete workflows showing how AI agents combine these tools to solve real business problems.

Workflow 1: Automated Triage and Draft Responses (Support Lead)

Instead of a human operator reading through overnight backlog, Claude can triage the queue, classify intent, and draft context-aware replies.

"Review the first page of conversations for website xyz-123. For any unread conversation, fetch the messages, determine if it is a billing issue or a technical bug. If it is a bug, draft a reply asking for OS version and browser details, but do not send it. Instead, leave an internal note."

Step-by-step Execution:

  1. Claude calls list_all_crisp_conversations to fetch the inbox state.
  2. It identifies sessions marked as unread.
  3. For each unread session, it loops through list_all_crisp_messages to read the user's input.
  4. Claude evaluates the text locally. Upon classifying an issue as a bug, it formats an internal note.
  5. It calls create_a_crisp_message with type: "note" to leave the drafted response securely visible only to operators.
sequenceDiagram
    autonumber
    Claude->>Truto MCP: list_all_crisp_conversations
    Truto MCP-->>Claude: JSON Array (Conversations)
    Claude->>Truto MCP: list_all_crisp_messages (for Session A)
    Truto MCP-->>Claude: JSON Array (Messages)
    Note over Claude: Evaluates intent (Bug vs Billing)
    Claude->>Truto MCP: create_a_crisp_message (type: note)
    Truto MCP-->>Claude: Success (Fingerprint returned)

Workflow 2: Helpdesk Audits and Updates (Documentation Team)

Knowledge bases decay quickly. You can use Claude to audit existing Crisp Helpdesk articles against an external source of truth (like your codebase or product specs) and push updates.

"Fetch all English helpdesk articles for website xyz-123. Identify any article mentioning the 'V1 Dashboard'. Update those specific articles to replace 'V1 Dashboard' with 'Unified Analytics Hub', and unpublish them pending human review."

Step-by-step Execution:

  1. Claude calls list_all_crisp_helpdesk_articles with locale: "en".
  2. It reads the markdown content of the returned articles.
  3. It identifies articles containing deprecated terminology.
  4. It calls update_a_crisp_helpdesk_article_by_id to push the new text payload.
  5. Finally, it calls crisp_helpdesk_articles_unpublish on those IDs to force a manual review cycle.

Security and Access Control

Giving an LLM write access to your support infrastructure requires strict boundaries. Truto's MCP servers provide enterprise-grade access control mechanisms derived from the underlying database and edge infrastructure.

  • Method Filtering: Limit an MCP server to read-only operations. By setting methods: ["read"] during server creation, tools like create_a_crisp_message or delete_a_crisp_website are stripped from the manifest entirely. The LLM simply cannot execute them.
  • Tag Filtering: Group tools by functional domain. You can restrict a server to only expose tools tagged with "campaigns", completely blinding the LLM to Helpdesk or Billing endpoints.
  • API Token Authentication (require_api_token_auth): By default, an MCP URL acts as a bearer token. For higher security, enable this flag to require the connecting client to pass a valid Truto API token in the Authorization header. This ensures only authenticated developers or systems can interact with the server.
  • Automatic Expiry (expires_at): Schedule background alarms to auto-revoke access. Supply an ISO datetime, and the underlying storage and routing rules will securely destroy the MCP token at the exact minute requested. Perfect for granting temporary audit access to contractors.

Moving Past Manual Integration Boilerplate

Connecting an LLM to Crisp should be an exercise in prompt engineering and workflow design, not a battle against rate limits, nested schemas, and OAuth lifecycles.

By leveraging Truto's managed MCP architecture, you offload the entire integration burden. Truto translates Claude's tool calls into perfectly formatted REST payloads, normalizes the IETF rate limit headers so your agent can implement smart backoff, and secures the perimeter with declarative filtering.

Stop writing custom integration scripts for your AI agents.

FAQ

Does Truto automatically retry failed requests if Crisp hits rate limits?
No. Truto passes HTTP 429 Too Many Requests errors directly back to the caller. However, Truto normalizes Crisp's rate limit data into standard IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). Your Claude agent or application logic must handle the exponential backoff.
Can I limit the Claude agent to only read Crisp data?
Yes. When generating the MCP server via Truto, you can configure method filtering by specifying 'methods: ["read"]'. This ensures the LLM can list conversations or fetch helpdesk articles, but cannot send messages or delete data.
How do I deal with Crisp message fingerprinting via Claude?
Truto automatically maps the expected query and body schemas into the MCP tool definition. When Claude retrieves messages, it sees the fingerprint property in the schema. In your system prompt, explicitly instruct Claude to pass the received fingerprint back unchanged when updating or deleting a message.
Is the Truto MCP URL secure?
Yes. The URL contains a securely hashed token scoped specifically to one integrated Crisp account. You can further secure it by setting an expiration date (expires_at) or requiring an additional API token (require_api_token_auth).

More from our Blog