Skip to content

Connect Crisp to ChatGPT: Manage Support & Helpdesk via MCP

Learn how to connect ChatGPT to Crisp using Truto's MCP server. Automate customer support, update helpdesk articles, and manage user profiles dynamically.

Uday Gajavalli Uday Gajavalli · · 6 min read
Connect Crisp to ChatGPT: Manage Support & Helpdesk via MCP

Customer support workflows are heavily fragmented. Your agents are switching between live chat sessions, helpdesk article editors, and backend CRM databases just to resolve a single ticket. By connecting Crisp to ChatGPT using Truto's SuperAI Model Context Protocol (MCP) server, you can turn OpenAI's models into autonomous support engineers capable of reading conversation states, updating user profiles, and dispatching helpdesk articles dynamically.

This guide covers the technical implementation of connecting Crisp to ChatGPT via Truto's MCP server. If your team uses Claude, check out our guide on connecting Crisp to Claude, or if you are orchestrating multi-agent frameworks, read our guide on connecting Crisp to AI Agents.

Creating the Crisp MCP Server

Truto dynamically generates MCP tools based on the active Crisp integration's resource definitions. To expose Crisp to ChatGPT, you first need to create an MCP server scoped to a specific integrated account.

You can generate the MCP server either through the Truto dashboard or programmatically via the API.

Option 1: Via the Truto UI

  1. Navigate to the Integrated Accounts section in your Truto dashboard.
  2. Select your connected Crisp account.
  3. Click the MCP Servers tab.
  4. Click Create MCP Server.
  5. Configure your optional parameters (such as tag filters or expiration dates) and click Create.
  6. Copy the generated MCP URL (e.g., https://api.truto.one/mcp/a1b2c3d4...).

Option 2: Via the Truto API

For DevOps teams automating provisioning, you can generate the MCP server directly using the Truto REST API. This POST request validates that the integration has tools available, generates a secure token, stores it in Cloudflare KV, and returns the ready-to-use URL.

curl -X POST https://api.truto.one/integrated-account/{integrated_account_id}/mcp \
  -H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ChatGPT Support Agent",
    "config": {
      "methods": ["read", "write", "custom"]
    }
  }'

The response will contain the url required by ChatGPT.

Connecting the MCP Server to ChatGPT

Once you have your Truto MCP URL, you can plug it directly into ChatGPT. ChatGPT's desktop app natively supports external MCP servers.

Via the ChatGPT UI:

  1. Open ChatGPT and navigate to Settings > Apps > Advanced settings.
  2. Toggle on Developer mode (MCP support requires this to be active).
  3. Under MCP servers / Custom connectors, click to add a new server.
  4. Enter a name (e.g., "Crisp Production").
  5. Paste the Truto MCP URL into the Server URL field.
  6. Click Save.

ChatGPT will immediately connect to the server, execute the initialize handshake, and request the tools/list endpoint. Truto parses the Crisp integration schemas on the fly and returns the formatted tools to ChatGPT.

Engineering Reality: Navigating the Crisp API

When exposing Crisp to an LLM, there are a few specific API paradigms you must account for in your prompts:

  • The Three-Tiered Identity Model: Crisp relies heavily on website_id as the root parameter for almost all operations. When interacting with conversations, you deal with a session_id. However, to interact with specific messages inside that conversation, you need a fingerprint. ChatGPT must retain and pass all three identifiers correctly across tool calls.
  • Pagination Limitations: Crisp returns flat arrays for many list operations and relies on strict page_number query parameters rather than cursor-based offsets. Truto normalizes this into next_cursor strings under the hood, but the LLM must be instructed to return the exact pagination string it receives. For tips on managing these tokens, see our guide on feeding paginated results to AI agents.
  • Rate Limits and 429 Handling: Crisp enforces strict rate limits on helpdesk and chat endpoints to prevent spam. Truto does not retry, throttle, or apply backoff on rate limit errors. If the upstream Crisp API returns an HTTP 429, Truto passes that error directly to ChatGPT. Truto normalizes the upstream headers into standard IETF formats (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The caller (ChatGPT or your custom agent framework) is entirely responsible for implementing retry and backoff logic when it encounters a 429.

Crisp MCP Tool Inventory

Truto automatically maps Crisp's endpoints into clear, descriptive JSON-RPC tools. Below is the two-tier breakdown of the available tools.

Hero Tools

These are the high-value operations you will use to build automated support workflows in ChatGPT.

1. List Conversations

  • Tool: list_all_crisp_conversations
  • Description: Retrieves a paginated list of conversations for a specific website. Useful for finding unassigned or active tickets.
  • Required parameters: website_id, page_number
  • Prompt example: "Fetch page 1 of active conversations for website ID 12345 to see if there are any unassigned tickets."

2. Get Conversation State

  • Tool: get_single_crisp_conversation_state_by_id
  • Description: Retrieves the exact state (open, resolved, pending) of a specific session.
  • Required parameters: website_id, session_id
  • Prompt example: "Check the state of session ID 9876. If it is resolved, ignore it. If it is open, let me know."

3. Send a Message

  • Tool: create_a_crisp_message
  • Description: Dispatches a new message into a conversation. Returns the fingerprint of the sent message.
  • Required parameters: website_id, session_id, type, from, origin, content
  • Prompt example: "Send a text message from 'operator' to session 9876 saying: 'I am looking into your billing issue right now.'"

4. Update Conversation Routing

  • Tool: crisp_conversations_update_routing
  • Description: Reassigns a conversation to a specific operator or team inbox.
  • Required parameters: website_id, session_id
  • Prompt example: "Assign session 9876 to the technical support inbox."

5. Search Helpdesk Articles

  • Tool: list_all_crisp_helpdesk_articles
  • Description: Lists existing helpdesk articles for a given locale. Crucial for RAG setups where ChatGPT needs to answer queries using official documentation.
  • Required parameters: website_id, locale, page_number
  • Prompt example: "List the helpdesk articles for the 'en' locale so I can find documentation on resetting passwords."

6. Update User Profile Data

  • Tool: update_a_crisp_people_datum_by_id
  • Description: Replaces custom data stored on a Crisp user profile. Excellent for tracking external subscription statuses.
  • Required parameters: website_id, people_id, payload object
  • Prompt example: "Update the custom data for user profile ID 444 to include { 'plan': 'enterprise', 'churn_risk': true }."

For the complete tool inventory and full schema details, visit the Crisp integration page.

Workflows in Action

How does this look in practice? Here are a couple of specific support use cases leveraging the tools defined above.

Scenario 1: Support Triage and Routing

"Find all unassigned conversations, check the user profile for each, and if they have the 'Enterprise' tag, assign them to the priority technical support inbox."

Execution Steps:

  1. ChatGPT invokes list_all_crisp_conversations (with website_id and page_number) to retrieve pending chat sessions.
  2. For each session, ChatGPT extracts the people_id and invokes get_single_crisp_people_datum_by_id to read the user's custom profile data.
  3. When it finds an Enterprise user, ChatGPT invokes crisp_conversations_update_routing to reassign the session to the designated priority inbox.

Scenario 2: Automated Helpdesk Resolution

"The customer in session ID 555-abcd is asking about our API rate limits. Find the relevant helpdesk article and send them a message with the link."

Execution Steps:

  1. ChatGPT invokes get_single_crisp_conversation_by_id to read the context of the user's inquiry.
  2. ChatGPT calls list_all_crisp_helpdesk_articles and parses the article list to locate the specific article ID covering API rate limits.
  3. ChatGPT invokes crisp_helpdesk_articles_resolve_page to retrieve the public URL for the selected article.
  4. Finally, ChatGPT calls create_a_crisp_message to dispatch a response back to the user with the resolved URL included in the content.

Security and Access Control

Truto MCP servers provide granular controls to ensure ChatGPT cannot perform destructive actions unintentionally. To understand how to manage credentials across teams, read about handling auth and tool sharing in multi-agent frameworks via MCP.

  • Method Filtering: By passing config: { methods: ["read"] } during creation, you restrict the MCP server entirely to GET and LIST methods. No messages can be sent, and no profiles can be mutated.
  • Tag Filtering: You can restrict the MCP server to only expose tools tied to specific resources, such as isolating the server to only the helpdesk scope.
  • Authentication Requirements: The require_api_token_auth flag forces clients to provide a valid Truto API token in the Authorization header, preventing unauthorized access even if the MCP URL is leaked.
  • Automatic Expiration: You can provision ephemeral MCP servers with an expires_at timestamp. Once the datetime passes, Truto's background Durable Object alarms automatically clean up the KV stores and database records, terminating LLM access.

FAQ

How does Truto handle Crisp rate limits?
Truto does not retry or absorb rate limit errors. If the upstream Crisp API returns an HTTP 429, Truto passes that error directly to the caller, normalizing the headers to standard IETF formats. Your client framework must handle the backoff.
How are Crisp MCP tools generated?
Truto derives tools dynamically from the integration's documented API resources. A tool is only exposed if it has a corresponding documentation entry, ensuring LLMs receive high-quality context and schemas.
Can I prevent ChatGPT from sending messages or deleting data?
Yes. When provisioning the MCP server, you can apply method filtering (e.g., methods: ["read"]) to enforce a read-only state for the AI agent.

More from our Blog