Connect Chameleon to Claude: Manage Onboarding and Audience Segments
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
-
Start your free trial
14 days free, no credit card required.
-
Connect Chameleon
Once, in Elaichi. Claude never gets more access than you have.
-
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
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:
- Navigate to the Integrated Accounts page in your Truto environment and select your active Chameleon connection.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration. You can optionally restrict the server to specific HTTP methods (like
readonly) or specific functional tags. - 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:
- Open Claude and navigate to Settings.
- Go to Integrations (or Connectors in the Enterprise view).
- Click Add MCP Server or Add custom connector.
- Paste the Truto MCP URL and click Add.
For ChatGPT (Developer Mode):
- In ChatGPT, navigate to Settings -> Apps -> Advanced settings.
- Enable the Developer mode toggle.
- Under MCP servers / Custom connectors, add a new server.
- 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.
1. chameleon_profiles_search
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:
- Claude calls
chameleon_profiles_get_numberpassing{ "email": "jdoe@example.com" }to retrieve the internal Chameleon Profile ID. - Claude extracts the
idfrom the response (e.g.,10482). - Claude calls
chameleon_profiles_delete_idpassing{ "profile_id": "10482" }to reset the user's state metrics. - 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:
- Claude calls
list_all_chameleon_surveysto search for the ID of the 'Q4 NPS' survey. - Claude calls
list_all_chameleon_survey_responsesusing the survey ID it found. - Claude parses the returned JSON array, filtering the data in memory to identify users who scored 4 or lower.
- For each matching user, Claude extracts their
profile_id. - Claude loops through the detractors, calling
create_a_chameleon_deliveryfor eachprofile_id, settingmodel_kindto "survey" andmodel_idto the ID of the "Book a call" microsurvey. - 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, settingtags: ["surveys"]will generate a server that can only interact with Microsurveys, hiding all Tour and HelpBar endpoints. - Temporary Access: You can define an
expires_attimestamp 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.
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.