Connect Clari to ChatGPT: Analyze Sales Calls and Deal Pipelines
Learn how to connect Clari to ChatGPT using a managed MCP server. A complete engineering guide to automating sales calls, pipelines, and scorecards.
If you need to connect Clari to ChatGPT to automate pipeline reviews, analyze sales call transcripts, or update deal stages based on conversational intelligence, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between ChatGPT's tool calls and Clari's REST APIs. 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 Claude, check out our guide on connecting Clari to Claude or explore our broader architectural overview on connecting Clari to AI Agents.
Giving a Large Language Model (LLM) read and write access to a revenue platform like Clari is a complex engineering challenge. You have to handle dual API surfaces (CRM data vs. Copilot conversational data), map complex scorecard schemas to MCP tool definitions, and deal with strict rate limits. Every time a developer adds a new custom field to a deal or changes a scorecard template, your custom server code must be updated, redeployed, and tested.
This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Clari, connect it natively to ChatGPT, and execute complex revenue workflows using natural language.
The Engineering Reality of the Clari API
A custom MCP server is essentially a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools via JSON-RPC, implementing it against Clari's API requires dealing with domain-specific revenue data models.
If you decide to build a custom MCP server for Clari, you own the entire API lifecycle. Here are the specific integration challenges you will face:
Dual Data Surfaces: CRM vs Copilot
Clari operates as a unified revenue platform, but under the hood, its API surface is split between CRM synchronization (accounts, contacts, deals) and Copilot intelligence (call recordings, transcripts, scorecards). Your MCP server needs to expose tools for both, but the LLM must know how to join them. A deal might have a crm_id that maps back to Salesforce, while a call has a native Clari id. If an LLM needs to update a deal based on a call transcript, your tool schemas must clearly define which IDs go where, otherwise the LLM will hallucinate cross-references.
Heavy Transcripts and N+1 Query Patterns
When an LLM asks "Summarize yesterday's calls," the standard listing endpoint only returns metadata (participants, time, duration). The actual conversational transcript lives on the individual call detail endpoint. This forces an N+1 query pattern. Your MCP server must restrict the LLM from trying to fetch 50 transcripts simultaneously, which would blow up the LLM context window and hit API rate limits. The tool schemas must force the LLM to fetch a curated list of calls first, filter down to the most relevant one, and then request the heavy transcript payload.
Strict Rate Limits and Missing Automatic Retries
Clari enforces strict API rate limits to protect its infrastructure. A common mistake developers make is expecting the MCP server to magically absorb and retry these limit errors. Truto takes an explicit, transparent approach: Truto does not retry, throttle, or apply backoff on rate limit errors. When the upstream Clari API returns an HTTP 429 Too Many Requests, Truto passes that error directly back to the caller (ChatGPT).
To help the client handle this, Truto normalizes the upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF specification. The caller - in this case, ChatGPT or your agent orchestration framework - is responsible for reading these headers and executing its own retry and backoff logic. Do not build custom MCP servers assuming the network layer will hide 429s from your LLM.
Nested Scorecard Schemas
Scorecards in Clari are not flat objects. They rely on template_id relationships and deeply nested questions_score arrays. A generic JSON mapping will fail here if the schema isn't explicit about the payload hierarchy. Your MCP tool definitions must parse Clari's documentation into strict JSON Schema format so ChatGPT understands exactly how to construct the scoring array when evaluating a rep's performance.
Step 1: Create the Clari MCP Server
Truto derives MCP tools dynamically from the integration's resource definitions and documentation records. You do not have to write custom JSON-RPC handlers for every Clari endpoint. When you generate an MCP server, Truto packages these tools behind a secure, tokenized endpoint scoped to a single Clari account.
You can create this MCP server using either the Truto dashboard or the API.
Method A: Via the Truto UI
If you prefer a visual interface, you can generate the server directly from your Truto account:
- Log into your Truto dashboard and navigate to the integrated account page for your connected Clari instance.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration (name, allowed methods like
readorwrite, and specific tool tags likecallsordeals). - Copy the generated MCP server URL. It will look like
https://api.truto.one/mcp/<secure-token>.
Method B: Via the Truto API
For automated deployments, you can provision MCP servers programmatically. Make a POST request to the Truto API to generate the server. This validates that the Clari integration has tools available, generates a hashed secure token, and returns a ready-to-use URL.
curl -X POST https://api.truto.one/integrated-account/$INTEGRATED_ACCOUNT_ID/mcp \
-H "Authorization: Bearer $TRUTO_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Clari Revenue Agent",
"config": {
"methods": ["read", "write"],
"tags": ["calls", "deals", "scorecards"]
}
}'The API will return a JSON object containing the secure url.
{
"id": "mcp_12345abcde",
"name": "Clari Revenue Agent",
"config": { "methods": ["read", "write"] },
"expires_at": null,
"url": "https://api.truto.one/mcp/a1b2c3d4e5f67890"
}This single URL carries both the routing information and the authentication required to execute tools against that specific Clari account. Treat it like a sensitive credential.
Step 2: Connect the MCP Server to ChatGPT
Once you have your Truto MCP URL, connecting it to ChatGPT takes less than a minute. You can do this through the standard ChatGPT interface or via a local configuration file for custom desktop agents.
Method A: Via the ChatGPT UI
If you have a ChatGPT Plus, Pro, Team, or Enterprise account with Developer mode enabled, you can add the connector directly in the browser or desktop app.
- In ChatGPT, navigate to Settings -> Apps -> Advanced settings.
- Ensure Developer mode is toggled on.
- Under the MCP servers or Custom connectors section, click Add new server.
- Enter a recognizable name (e.g., "Clari Sales Agent").
- Paste the Truto MCP URL (
https://api.truto.one/mcp/<token>) into the Server URL field. - Click Save.
ChatGPT will immediately perform a handshake with the Truto MCP router, request the list of available Clari tools, and register their schemas. Your agent is now ready to interact with Clari.
Method B: Via Manual Configuration File
If you are running a custom agent framework, testing locally with an MCP inspector, or using a client that requires a file-based configuration, you can connect using a standard JSON config file. Because Truto MCP servers use HTTP POST for all communication, you use the standard Server-Sent Events (SSE) transport wrapper provided by the MCP community.
Create an mcp.json configuration file:
{
"mcpServers": {
"clari-agent": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"--url",
"https://api.truto.one/mcp/<your-secure-token>"
]
}
}
}When your local agent starts, it will use this configuration to connect to Truto's JSON-RPC 2.0 endpoint, downloading the Clari tool definitions dynamically.
Hero Tools for Clari
Truto automatically generates highly descriptive, snake_case tool names based on the underlying Clari endpoints. When ChatGPT lists available tools, it receives the tool name, a detailed description, and the required JSON schema for query and body parameters.
Here are the highest-leverage tools available for Clari workflows:
list_all_clari_calls
Fetches a paginated list of Clari Copilot calls. This is the starting point for conversation intelligence workflows. You can filter by user, attendee, topic, status, or time range. It returns heavy metadata (participants, calendar IDs, media URLs) but omits the full transcript to save bandwidth.
"Find all discovery calls hosted by Sarah in the last 48 hours that lasted longer than 30 minutes."
get_single_clari_call_by_id
Retrieves the full, deep payload for a specific call, including the raw transcript, the AI summary, competitor sentiments, and the live deal stage. This tool requires the id obtained from the list tool.
"Get the full transcript for call ID 84729 and list every time the prospect mentioned our competitor's pricing."
list_all_clari_scorecards
Retrieves rep performance scorecards for specific calls. You can filter by time range, rep, and scorer. This tool exposes the questions_score array, showing exactly where a rep succeeded or failed on their methodology rubric.
"Pull the recent scorecards for the account executive team. Are they consistently asking the MEDDPICC budget questions?"
list_all_clari_deals
Fetches the current status of a Clari deal by its ID. Returns crucial revenue data including amount, stage, close_date, and probability. Essential for checking deal health before making updates.
"Check the current stage and close probability for the Acme Corp deal."
clari_deals_bulk_update
Updates deal attributes in Clari. This is a high-leverage write operation that allows your AI agent to advance deal stages, adjust amounts, or push close dates based on signals extracted from calls.
"The prospect agreed to move forward with the pilot. Update the Acme Corp deal to the 'Commit' stage and set the close date to next Friday."
create_a_clari_call
Allows you to ingest external audio recordings into Clari Copilot for transcription and analysis. This is critical for bulk migrations from Zoom or Twilio, or for logging ad-hoc mobile calls. Requires source_id, type, call_time, and an audio_url.
"Upload this MP3 recording from my mobile phone to Clari Copilot and log it as an outbound cold call for today."
For a complete list of all available Clari endpoints, required parameters, and schema definitions, view the full inventory on the Clari integration page.
Workflows in Action
Giving ChatGPT access to these tools transforms it from a static chat interface into an active revenue operations agent. Here are two concrete ways teams use the Clari MCP server.
Scenario 1: Post-Call Deal Stage Update
Sales reps hate updating their CRM after a call. An AI agent can listen to the transcript, determine if the call was successful, and automatically update the deal stage in Clari.
"Review my last call with Initech. If they agreed to a technical evaluation, update their deal stage to 'POC' and increase the probability to 60%."
Step-by-step execution:
list_all_clari_calls: ChatGPT searches for the most recent call where the external participant matches "Initech".get_single_clari_call_by_id: ChatGPT extracts the call ID and pulls the full transcript.- Analysis Phase: The LLM reads the transcript, confirming the prospect explicitly agreed to a technical evaluation.
list_all_clari_deals: ChatGPT queries the CRM side of Clari to find the Initech deal ID and verify its current state.clari_deals_bulk_update: ChatGPT issues the write command, pushing the new stage and probability to the Clari database.
The user receives a confirmation: "I found the Initech call. The transcript confirms they agreed to a technical evaluation starting next week. I have updated the deal stage to POC and set the probability to 60%."
sequenceDiagram
participant Rep as Sales Rep
participant ChatGPT as ChatGPT Client
participant Truto as Truto MCP
participant Clari as Clari API
Rep->>ChatGPT: "Review Initech call and update deal if POC agreed."
ChatGPT->>Truto: tools/call (list_all_clari_calls)
Truto->>Clari: GET /api/v1/calls?search=Initech
Clari-->>Truto: Call Metadata (ID: 9912)
Truto-->>ChatGPT: JSON result
ChatGPT->>Truto: tools/call (get_single_clari_call_by_id)
Truto->>Clari: GET /api/v1/calls/9912
Clari-->>Truto: Full Transcript
Truto-->>ChatGPT: JSON result
ChatGPT->>Truto: tools/call (clari_deals_bulk_update)
Truto->>Clari: PUT /api/v1/deals (Stage: POC)
Clari-->>Truto: Success
Truto-->>ChatGPT: JSON result
ChatGPT-->>Rep: "Deal updated to POC (60%)."Scenario 2: Automated Rep Coaching
Sales managers spend hours reviewing calls to fill out scorecards. An AI agent can automatically audit calls against the company rubric and generate scorecard data.
"Analyze yesterday's discovery calls for the enterprise team. Did they successfully cover the BANT criteria? Generate a summary of missed questions."
Step-by-step execution:
list_all_clari_calls: ChatGPT filters calls by the "Enterprise" team ID and the "Discovery" call type for the previous day.get_single_clari_call_by_id: ChatGPT iterates through the top 3 calls, pulling their transcripts.list_all_clari_scorecards: ChatGPT checks if any scorecards have already been submitted for these calls.- Analysis Phase: The LLM evaluates the transcripts against the BANT (Budget, Authority, Need, Timeline) framework.
The user receives a detailed breakdown: "I reviewed 3 discovery calls. In 2 out of 3 calls, the reps successfully established Need and Timeline, but completely missed asking about Budget. I recommend coaching on early budget qualification."
Security and Access Control
When connecting an enterprise LLM to financial and revenue data, strict access control is mandatory. Truto MCP servers support multiple layers of configuration to limit what ChatGPT can do.
- Method Filtering: You can strictly limit the MCP server to read-only operations. By passing
"methods": ["read"]during server creation, ChatGPT can invokelist_all_clari_callsbut will be cryptographically blocked from callingclari_deals_bulk_update. - Tag Filtering: You can scope the server by business domain. Passing
"tags": ["calls"]ensures the LLM can only see conversational intelligence tools and cannot access the underlying CRM deal data. - Time-to-Live (TTL): For temporary audits or contractor access, you can set an
expires_atISO datetime. Truto automatically schedules a durable alarm to permanently delete the server token from the database and edge KV storage when time expires. - Extra Authentication: By default, possessing the MCP URL grants access to the tools. For higher security environments, you can enable
require_api_token_auth. This forces the ChatGPT client to pass a valid Truto API bearer token in the HTTP headers, ensuring only authenticated developers can execute tools.
Stop Writing Boilerplate Integrations
Connecting ChatGPT to a dynamic revenue platform like Clari shouldn't require weeks of reading API docs, mapping custom JSON schemas, and fighting with rate limit backoffs. By using a documentation-driven MCP architecture, you shift the burden of tool generation and maintenance to the infrastructure layer.
When Clari updates an endpoint, Truto updates the documentation record, and the MCP tool schema updates dynamically on the next client handshake. Your AI agents always have the correct payload structures, and your engineering team can focus on agent reasoning instead of API maintenance.
FAQ
- How does the Clari MCP server handle API rate limits?
- Truto does not retry or apply backoff on rate limit errors. If Clari returns an HTTP 429 error, Truto passes the error and the IETF-standard rate limit headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) back to ChatGPT. The calling client must handle the retry logic.
- Can I prevent ChatGPT from updating deal stages in Clari?
- Yes. When creating the MCP server via Truto, you can specify method filtering (e.g., config.methods: ['read']). This strictly prevents the LLM from executing write operations like clari_deals_bulk_update.
- How do I fetch a call transcript using the Clari MCP tools?
- Because transcripts are heavy, you must use a two-step process. First, use list_all_clari_calls to find the call metadata and its ID. Then, use get_single_clari_call_by_id to fetch the full transcript and AI summary for that specific call.