Skip to content

Connect Chameleon to Claude: Manage Onboarding and Audience Segments

Roopendra Talekar Roopendra Talekar 10 min read AI & Agents
Elaichi from the team behind Truto

Chameleon in Claude, in about a minute.

The best way to connect Chameleon to Claude is Elaichi: connect Chameleon to Elaichi once, then add Elaichi to Claude as a connector. Two steps, about a minute, with a 14‑day free trial and no credit card required.

  • No credit card required
  • 500+ connectors
  • Credentials vaulted, never read back
  1. Start your free trial

    14 days free, no credit card required.

  2. Connect Chameleon

    Once, in Elaichi. Claude never gets more access than you have.

  3. Add Elaichi to Claude

    In Claude, open Customize, then Connectors, press Add and paste the URL. Sign in and approve.

    https://api.elaichi.ai/mcp
TrutoFor product teams

Building Chameleon into your own product? This guide is for you.

Learn how to build a managed MCP server for Chameleon, connect it to Claude Desktop, and automate product adoption workflows like user progress resets and targeted tour deliveries using natural language.

The developer guide

A complete engineering guide to connecting Chameleon to Claude using Truto's managed MCP servers. Automate onboarding, analyze NPS surveys, and sync user segments.

If your team needs to connect Chameleon to Claude to manage user onboarding flows, analyze Microsurvey responses, or segment product audiences, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's tool-calling capabilities and Chameleon's REST API. You can either build and maintain this infrastructure yourself, 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 /connect-chameleon-to-chatgpt-analyze-user-journeys-and-survey-data/ or explore our broader architectural overview on /connect-chameleon-to-ai-agents-automate-user-events-and-deliveries/.

Giving a Large Language Model (LLM) read and write access to a product adoption platform like Chameleon is an engineering challenge. You have to handle API authentication, map complex JSON schemas to MCP tool definitions, and deal with domain-specific payload requirements. Every time Chameleon updates an endpoint or adds a new parameter, 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 Chameleon, connect it natively to Claude Desktop, and execute complex onboarding workflows using natural language.

The Engineering Reality of the Chameleon 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 specialized B2B APIs is painful. Chameleon is built to orchestrate product tours, surveys, and launchers across fragmented user bases. Its API reflects that deep domain complexity.

If you decide to build a custom Chameleon MCP server, here are the specific integration challenges you will face:

Destructive Operations Require Context Chameleon maintains two entirely different concepts of deletion for a user profile, and an LLM must understand the difference to avoid catastrophic data loss. The standard delete operation (chameleon_profiles_delete_id) actually just clears a user's state - resetting their browser properties, removing event history, and reverting their tour progress so they can experience onboarding again. The profile itself remains. Conversely, the forget operation is a permanent, irreversible GDPR/CCPA purge. If you expose a generic "Delete User" tool to an LLM without strict schema descriptions, the model will inevitably trigger the wrong endpoint.

Prefix-Based Mutation Logic Many Chameleon resources, such as Tours and Tooltips, use highly specific string manipulation to handle relationships. For example, if you want to attach a Tour to a specific Environment (a url_group_id), you must patch the tour record and prefix the ID with a + (e.g., +env_123). To remove it, you use a - (e.g., -env_123). LLMs struggle with these non-standard REST patterns unless the tool descriptions are explicitly engineered to explain this exact syntax.

Complex Segmentation Filters Querying users or companies in Chameleon isn't a matter of simple query string parameters. The chameleon_profiles_search endpoint requires nested Segmentation filter expressions. You must pass JSON objects defining match conditions on custom properties (e.g., role, plan), experience interactions (e.g., completed a tour), combined with nested AND/OR operators. Translating a natural language request like "Find admins who abandoned the new dashboard tour" into Chameleon's specific filter schema requires incredibly detailed MCP tool definitions.

Generating a Managed MCP Server for Chameleon

Instead of building a Node.js or Python server from scratch to wrap these API quirks, you can use Truto to dynamically generate a compliant MCP server scoped specifically to your connected Chameleon account.

Truto's architecture is dynamic and documentation-driven. It reads the integration's configuration and instantly compiles a complete JSON-RPC 2.0 endpoint. You can provision this server in two ways.

Method 1: Via the Truto UI

For internal workflows, IT admins, and quick prototyping, the easiest way to generate your server is directly through the dashboard:

  1. Navigate to the Integrated Accounts page in your Truto environment and select your active Chameleon connection.
  2. Click the MCP Servers tab.
  3. Click Create MCP Server.
  4. Select your desired configuration. You can optionally restrict the server to specific HTTP methods (like read only) or specific functional tags.
  5. Copy the generated MCP Server URL (e.g., https://api.truto.one/mcp/a1b2c3d4e5f6...).

Method 2: Via the Truto REST API

If you are building an AI agent platform and need to programmatically provision MCP servers for your own customers, you can use the Truto API. This validates the integration, provisions a hashed token in Cloudflare KV for edge authentication, and returns a ready-to-use URL.

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

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

Example Response:

{
  "id": "mcp-789-xyz",
  "name": "Chameleon Support Agent MCP",
  "config": {
    "methods": ["read", "write"]
  },
  "expires_at": null,
  "url": "https://api.truto.one/mcp/a1b2c3d4e5f6..."
}

This URL is fully self-contained. It encodes the tenant routing and the authentication credentials required to execute actions against Chameleon.

Connecting the Chameleon MCP Server to Claude

Once you have your Truto MCP URL, you can connect it directly to your LLM framework of choice. Because Truto standardizes the JSON-RPC communication, no additional backend code is required.

Method A: Via the Claude Desktop UI (or ChatGPT)

If your organization uses Claude Desktop (or ChatGPT Enterprise/Pro), you can add the server directly through the application settings.

For Claude Desktop/Web:

  1. Open Claude and navigate to Settings.
  2. Go to Integrations (or Connectors in the Enterprise view).
  3. Click Add MCP Server or Add custom connector.
  4. Paste the Truto MCP URL and click Add.

For ChatGPT (Developer Mode):

  1. In ChatGPT, navigate to Settings -> Apps -> Advanced settings.
  2. Enable the Developer mode toggle.
  3. Under MCP servers / Custom connectors, add a new server.
  4. Name it (e.g., "Chameleon via Truto") and paste the URL.

Method B: Via Manual Configuration File

If you are running Claude Desktop locally or managing configurations via MDM, you can directly edit the claude_desktop_config.json file.

Because Truto exposes an HTTP endpoint, you will use the official @modelcontextprotocol/server-sse package to act as a transport bridge between Claude's stdio requirements and Truto's Server-Sent Events/HTTP interface.

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

Restart Claude Desktop. The model will automatically send an initialize request to the server, negotiate protocol versions, and ingest all available Chameleon tools.

High-Leverage Chameleon Tools for AI Agents

Truto automatically generates tools for every documented Chameleon endpoint. When the LLM requests the tool list (tools/list), Truto formats the integration's query and body schemas into standard JSON Schema format, injecting necessary LLM instructions (like explicit cursor handling for pagination).

Here are 6 high-leverage hero tools your agents can use immediately.

This tool allows the LLM to search for specific user profiles using Chameleon's complex Segmentation filter expressions. It is vital for identifying cohorts based on behavior or custom attributes.

"Find all users in the 'Enterprise' plan segment who have not been seen in the last 30 days and list their email addresses."

2. update_a_chameleon_tour_by_id

This tool allows agents to modify existing product tours. Crucially, the Truto schema instructs the LLM on how to use the + and - prefix logic to attach or detach environments and tags, or how to publish the tour by passing a timestamp.

"Publish the 'Dashboard 2.0 Walkthrough' tour and attach it to the staging environment using the environment ID env_8829."

3. list_all_chameleon_survey_responses

Customer support and product AI agents can use this tool to pull raw feedback data from Microsurveys. It returns the button clicked, text inputs, and associated profile IDs.

"Get the latest responses for our Q3 NPS survey. Summarize the text comments from anyone who gave a score of 6 or below."

4. create_a_chameleon_delivery

Deliveries allow you to bypass standard segmentation and force an Experience (a tour or survey) to trigger for one specific user. This is excellent for support workflows where an agent wants to manually push a tutorial to a confused user.

"Trigger the 'Advanced Analytics Tutorial' delivery for user ID 99281 so it appears the next time they log in."

5. chameleon_profiles_delete_id

As detailed earlier, this tool resets a user profile's state without permanently deleting their record. It clears browser properties, event history, and tour progress.

"Reset the onboarding progress for user profile ID 5519 so they can go through the initial product setup flow again."

6. chameleon_search_items_upsert

This tool interacts with the Chameleon HelpBar. Agents can use it to dynamically index new help center articles or knowledge base entries so they appear in the in-app search.

"Add a new search item to the HelpBar titled 'Configuring SSO' with the URL to our new documentation page."

To view the complete inventory of available endpoints and their exact JSON schemas, visit the Chameleon integration page.

Workflows in Action

Connecting tools to an LLM is only half the battle. The real value of an MCP server is enabling the model to orchestrate multi-step workflows autonomously. Here are two real-world scenarios showing how Claude navigates the Chameleon API via Truto.

Scenario 1: Resetting User State for Support

Customer support teams frequently need to reset a user's product tour progress if the user got stuck or skipped the tutorial by accident. Instead of logging into the Chameleon dashboard and manually finding the user, a support agent can ask Claude to handle it.

"A user emailed us from jdoe@example.com saying they accidentally closed the onboarding tour and don't know how to set up their account. Can you reset their Chameleon progress?"

Execution Steps:

  1. Claude calls chameleon_profiles_get_number passing { "email": "jdoe@example.com" } to retrieve the internal Chameleon Profile ID.
  2. Claude extracts the id from the response (e.g., 10482).
  3. Claude calls chameleon_profiles_delete_id passing { "profile_id": "10482" } to reset the user's state metrics.
  4. Claude confirms to the support agent that the progress has been cleared.
sequenceDiagram
    participant User as Support Agent
    participant Claude as Claude Desktop
    participant Truto as Truto MCP Server
    participant Chameleon as Chameleon API

    User ->> Claude: "Reset the onboarding tour for jdoe@example.com"
    Claude ->> Truto: Call chameleon_profiles_get_number(email="jdoe@example.com")
    Truto ->> Chameleon: GET /profiles?email=jdoe@example.com
    Chameleon -->> Truto: Profile ID: 10482
    Truto -->> Claude: Return Profile data
    Claude ->> Truto: Call chameleon_profiles_delete_id(profile_id="10482")
    Truto ->> Chameleon: DELETE /profiles/10482
    Chameleon -->> Truto: 200 OK (State Reset)
    Truto -->> Claude: Confirmation
    Claude -->> User: "The user's tour progress has been reset."

Scenario 2: Analyzing NPS and Triggering Follow-ups

Product Managers often want to analyze Microsurvey responses and take immediate action on detractors.

"Look at the recent responses for the 'Q4 NPS' survey. Find anyone who left a score of 4 or lower, summarize their complaints, and trigger the 'Book a call with PM' delivery for them."

Execution Steps:

  1. Claude calls list_all_chameleon_surveys to search for the ID of the 'Q4 NPS' survey.
  2. Claude calls list_all_chameleon_survey_responses using the survey ID it found.
  3. Claude parses the returned JSON array, filtering the data in memory to identify users who scored 4 or lower.
  4. For each matching user, Claude extracts their profile_id.
  5. Claude loops through the detractors, calling create_a_chameleon_delivery for each profile_id, setting model_kind to "survey" and model_id to the ID of the "Book a call" microsurvey.
  6. Claude outputs a formatted summary of the complaints to the Product Manager.

Security and Access Control

Exposing an internal product adoption tool to an AI model requires strict governance. Truto MCP servers enforce security at the token level, ensuring the LLM can only act within the boundaries you define.

  • Method Filtering: When creating the server via the UI or API, you can specify config.methods: ["read"]. Truto evaluates this at tool-generation time. Any endpoint that isn't a GET or LIST operation is completely hidden from the LLM, making accidental deletions impossible.
  • Tag Filtering: You can restrict the MCP server to specific functional areas using config.tags. For example, setting tags: ["surveys"] will generate a server that can only interact with Microsurveys, hiding all Tour and HelpBar endpoints.
  • Temporary Access: You can define an expires_at timestamp when provisioning the server. Once the timestamp is reached, Truto automatically purges the authentication token from Cloudflare KV and deletes the database record via a scheduled Durable Object alarm. This is ideal for granting a contractor temporary AI access to Chameleon data.
  • Enforced API Token Auth: By default, possession of the Truto MCP URL grants access. For higher security environments, you can enable require_api_token_auth: true. This forces the client to pass a valid Truto API bearer token in the headers alongside the connection request, adding a secondary layer of authentication.

Handling Rate Limits and API Performance

It is critical to understand how Truto handles Chameleon's API quotas. Truto acts as a transparent proxy layer; it does not automatically retry, throttle, or apply backoff on rate limit errors.

When Chameleon returns an HTTP 429 Too Many Requests error, Truto passes that error directly back to the calling client (Claude). However, to make this easier for your agent framework to handle, Truto normalizes the upstream rate limit information into standardized HTTP headers per the IETF specification:

  • ratelimit-limit: The total requests allowed in the current window.
  • ratelimit-remaining: The number of requests left.
  • ratelimit-reset: The timestamp when the quota resets.

The orchestrating client or agent framework is entirely responsible for reading these headers, pausing execution, and retrying the tool call.

Furthermore, all MCP tool execution routes through Truto's proxy API infrastructure. This means that all query and body parameters supplied by the LLM correspond exactly to Chameleon's native schemas—there is no artificial data mapping layer in between. If Chameleon expects a specific nested object for a Segmentation filter, that is exactly what the LLM will generate and send.

Unblocking Agentic Workflows

Building a custom MCP server for Chameleon forces your engineering team to become experts in Chameleon's specific implementation of JSON schemas, nested filters, and prefix-based environment updates. You inherit the technical debt of maintaining that integration layer indefinitely.

By leveraging Truto's dynamically generated MCP servers, you offload the infrastructure management entirely. Your LLM gets immediate, documented, and secure access to Chameleon's API, allowing your product and support teams to automate onboarding adjustments, analyze survey feedback, and trigger targeted user experiences entirely through natural language.

Two ways to put Chameleon to work

Elaichifrom the team behind Truto

For you and your team

Use Chameleon in Claude yourself

Connect Chameleon once, add Elaichi to Claude, and ask. Every call is checked against your own permissions and logged.

Start free, 14 days No credit card required
Truto

For product teams

Ship Chameleon to your customers

Your customers connect their own Chameleon accounts. Your product gets one API and MCP tools for Chameleon, through Truto.

FAQ

What is the easiest way to connect Chameleon to Claude?
The best way to connect Chameleon to Claude is Elaichi: connect Chameleon to Elaichi once, then add Elaichi to Claude as a connector. Two steps, about a minute, with a 14-day free trial and no credit card required.
How do I handle Chameleon API rate limits through the MCP server?
Truto passes upstream HTTP 429 errors directly to the caller. Truto normalizes the rate limit information into standard headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset), but the MCP client or agent framework is responsible for implementing retry and backoff logic. Truto does not absorb or automatically retry rate-limited requests.
Can I limit Claude to read-only access for Chameleon data?
Yes. When creating the Truto MCP server, you can pass a configuration object with methods: ["read"]. This restricts the LLM to only GET and LIST operations, preventing any accidental mutations to tours, surveys, or user profiles.
How does Claude know which Chameleon user ID to target?
Truto provides lookup tools like chameleon_profiles_get_number, which allows Claude to retrieve a Chameleon Profile ID using a standard email address or custom UID. The LLM can sequence this lookup tool before executing a mutation.
Chameleon Chameleon in Claude14 days free Start free

More from our Blog