Connect UserTesting to Claude: Track UX Metrics & Session Results
Learn how to connect UserTesting to Claude using a managed MCP server. Execute UX workflows, analyze transcripts, and extract QX scores using AI agents.
If your team uses ChatGPT, check out our guide on connecting UserTesting to ChatGPT or explore our broader architectural overview on connecting UserTesting to AI Agents.
User research generates a massive volume of unstructured data. Between 60-minute recorded sessions, WebVTT transcripts, behavioral QX scores, and post-session Net Promoter Scores (NPS), UX researchers spend hours manually extracting insights. By connecting UserTesting directly to Claude, you can feed raw session data into a large context window and instantly extract themes, timestamped quotes, and usability bottlenecks.
To make this work securely, you need a Model Context Protocol (MCP) server. The MCP server translates Claude's natural language tool calls into standard REST API requests that UserTesting understands.
You can spend weeks building a custom MCP server, managing OAuth flows, and writing JSON schemas for every UserTesting endpoint, or you can use a managed platform like Truto. This guide explains exactly how to generate a secure, authenticated UserTesting MCP server with Truto and connect it to Claude to automate your UX research workflows.
The Engineering Reality of the UserTesting API
Building a custom integration for UserTesting exposes you to several domain-specific API constraints. If you try to expose UserTesting directly to Claude without an abstraction layer, your AI agent will frequently fail.
Here are the specific engineering hurdles you face when integrating UserTesting:
Complex Nested Data Models
UserTesting endpoints do not return flat records. When you fetch a study, the API returns a deeply nested object containing netPromoterScores (broken down by detractor, passive, and promoter percentages), testPlan arrays, and tasks with positional data and scale settings. LLMs struggle to navigate deeply nested JSON to find the fields they need. Truto handles the schema parsing, mapping the UserTesting documentation directly into clean JSON Schema definitions that Claude can easily comprehend.
WebVTT Transcript Formatting
The UserTesting API returns session transcripts in WebVTT format (e.g., 00:00:00.000 --> 00:00:02.000 followed by spoken text). Retrieving this requires specific session IDs tied to specific product types (LIVE_CONVERSATION and THINK_OUT_LOUD). If an LLM calls the transcript endpoint for the wrong test type, it will receive a cryptic error. Truto's MCP tools explicitly define these constraints in the tool description, ensuring Claude only attempts to fetch transcripts for valid session types.
Strict Rate Limiting and Backoff Requirements
UserTesting enforces API rate limits, especially when pulling heavy data like session lists and transcripts in bulk. When an AI agent loops through 50 sessions to pull transcripts, it will hit an HTTP 429 error. Truto does not retry, throttle, or apply backoff on rate limit errors. Instead, Truto normalizes the upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF specification and passes the 429 error directly to the caller. Your agent framework is responsible for implementing the retry and backoff logic using these standard headers.
How to Generate a UserTesting MCP Server with Truto
Truto creates MCP servers dynamically based on your connected UserTesting account using an auto-generated tool architecture. Every endpoint defined in the UserTesting integration is evaluated against its documentation record. If a documentation record exists, Truto generates a standardized JSON-RPC 2.0 tool for it.
You can generate the MCP server via the Truto UI or programmatically via the API.
Method 1: Via the Truto UI
If you prefer a click-ops approach, you can generate an MCP URL directly from your dashboard:
- Navigate to the Integrated Accounts page and select your connected UserTesting instance.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your configuration options (Name, allowed methods, allowed tags, and expiration).
- Copy the generated MCP server URL (e.g.,
https://api.truto.one/mcp/a1b2c3d4...).
Method 2: Via the Truto API
If you are provisioning infrastructure dynamically for multiple tenants, use the Truto API. Make a POST request to /integrated-account/:id/mcp with your desired configuration.
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": "UserTesting UX Research MCP",
"config": {
"methods": ["read", "list", "get"]
}
}'The API returns a database record and a unique, cryptographically hashed URL:
{
"id": "ut-mcp-892",
"name": "UserTesting UX Research MCP",
"config": { "methods": ["read", "list", "get"] },
"expires_at": null,
"url": "https://api.truto.one/mcp/a1b2c3d4e5f6..."
}This URL is self-contained. It encodes the tenant account, the configuration filters, and the target API.
How to Connect the MCP Server to Claude
Once you have your Truto MCP URL, you can plug it into Claude. You can do this visually using the Claude Desktop application or manually using the configuration file.
Method 1: Via the Claude UI
- Open Claude Desktop.
- Navigate to Settings -> Integrations.
- Click Add MCP Server (or "Add custom connector" depending on your tier).
- Paste your Truto MCP URL into the Server URL field.
- Click Add.
Claude will perform a JSON-RPC handshake (initialize) with Truto, fetch the tool capabilities (tools/list), and instantly make the UserTesting tools available in your chat interface.
Method 2: Via Manual Configuration File
For advanced users, you can configure Claude Desktop manually by editing the claude_desktop_config.json file. Truto provides an SSE (Server-Sent Events) wrapper to handle the remote connection.
Open your config file and add the server configuration:
{
"mcpServers": {
"usertesting": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/a1b2c3d4e5f6..."
]
}
}
}Save the file and restart Claude Desktop. The tools will load automatically.
Hero Tools for UserTesting
Truto automatically translates UserTesting endpoints into well-documented MCP tools. Here are 6 high-leverage hero tools your AI agents can use to automate research analysis.
list_all_user_testing_workspace_studies
Lists all studies available within a specific UserTesting workspace. This is typically the entry point for an agent to discover which tests have recently run. It returns the uuid, title, productType, and ordering metadata.
"List all the recent studies in our core product workspace. Filter down to only the tests created in the last 7 days."
get_single_user_testing_study_by_id
Fetches the complete, deeply nested metadata for a specific study. This tool is critical because it returns the netPromoterScores (detractor vs promoter percentages) and the exact testPlan (the specific tasks the user was asked to complete).
"Get the full study details for the 'Mobile Navigation Redesign' test. Show me the exact tasks the participants were asked to perform, and give me the overall Net Promoter Score breakdown."
list_all_user_testing_session_transcripts
Retrieves the full video transcript for a specific UserTesting session in WebVTT format. Because Claude has a massive context window, you can feed it multiple transcripts at once. The WebVTT format includes timestamps, allowing Claude to cite exactly when a user encountered a specific issue.
"Fetch the transcript for session ID 98234. Read through the text and extract any quotes where the user expressed frustration with the checkout process. Include the exact timestamps for each quote."
list_all_user_testing_test_qx_scores
Retrieves the QXscore results for an interaction test. QX scores are a composite metric measuring behavioral and attitudinal success. This tool returns the qxScore along with sub-components like usability, trust, appearance, and loyalty.
"Pull the QX scores for our recent onboarding test. Compare the usability score to the trust score, and tell me which area requires more immediate engineering attention."
list_all_user_testing_session_video_download_urls
Generates a pre-signed, temporary URL to download the raw video file of a session. If your agent is building a summary report in a markdown file, it can embed or link to these URLs so stakeholders can watch the actual session.
"Get the video download URL for the session where the user struggled with the password reset. I want to include the link in my final report."
list_all_user_testing_session_clips
Lists the video clips and highlight reels that researchers have already generated for a session. Returns the timeStartMs, timeEndMs, and descriptions of the clipped moments.
"List all the highlight clips associated with session ID 11223. Summarize the descriptions of these clips so I can understand the key takeaways without watching the full video."
For the complete list of UserTesting tools, schemas, and required parameters, visit the UserTesting integration page.
Workflows in Action
Exposing individual tools to Claude is useful, but the real power comes from chaining these operations together to automate multi-step research synthesis.
Workflow 1: UX Research Synthesis and Quote Extraction
Instead of watching hours of video and manually typing out quotes, an AI agent can synthesize the data and build a categorized report based on the WebVTT transcripts.
"Find the recent 'Checkout Flow' study. Look at the session results, pull the transcripts for all completed sessions, and list out the exact pain points users experienced during payment input. Include timestamped quotes to prove each point."
Execution Steps:
- Claude calls
list_all_user_testing_workspace_studiesto locate the study ID for "Checkout Flow". - Claude calls
list_all_user_testing_session_resultspassing the test ID to get the list of completed session IDs. - Claude loops through the sessions, calling
list_all_user_testing_session_transcriptsfor each one. - Claude processes the WebVTT text, extracting negative sentiment regarding the payment input.
- Claude returns a summarized markdown list of pain points, matched with exact
00:00:00.000WebVTT timestamps.
Workflow 2: QX Score Analysis & Benchmarking
QX scores give you a quantitative baseline. You can ask Claude to pull these metrics, combine them with the test plan tasks, and generate an executive summary.
"Pull the QX scores for our mobile nav test. Compare the usability vs trust components. Then, map those scores to the exact tasks the users were asked to perform, and generate a markdown table for the leadership team."
sequenceDiagram
participant User as User
participant Claude as Claude Desktop
participant MCP as Truto MCP Server
participant UT as UserTesting API
User->>Claude: "Pull QX scores for mobile nav test..."
Claude->>MCP: Call list_all_user_testing_workspace_studies
MCP->>UT: GET /v1/studies
UT-->>MCP: Return studies list
MCP-->>Claude: Return study UUID
Claude->>MCP: Call list_all_user_testing_test_qx_scores
MCP->>UT: GET /v1/tests/{id}/qx_scores
UT-->>MCP: Return QX behavioral/attitudinal data
MCP-->>Claude: Return QX JSON
Claude->>MCP: Call get_single_user_testing_study_by_id
MCP->>UT: GET /v1/studies/{id}
UT-->>MCP: Return test plan and task array
MCP-->>Claude: Return full study JSON
Claude->>User: Render Markdown table comparing scores to tasksExecution Steps:
- Claude calls
list_all_user_testing_workspace_studiesto find the correct test. - Claude calls
list_all_user_testing_test_qx_scoresto fetch the behavioral, usability, and trust components. - Claude calls
get_single_user_testing_study_by_idto retrieve thetestPlanandtasksarray to understand what actions resulted in those scores. - Claude generates a structured markdown table correlating the tasks with the quantitative QX data.
Security and Access Control
Giving an AI agent access to your enterprise UserTesting data requires strict security controls. Truto provides four layers of configuration to ensure your MCP servers adhere to the principle of least privilege:
- Method Filtering (
config.methods): You can restrict an MCP server to strictly read-only operations by passing["read"]during server creation. This prevents the LLM from accidentally mutating data or triggering new studies. - Tag Filtering (
config.tags): Integration resources in Truto are tagged by domain. You can restrict the MCP server to only expose tools tagged for specific workflows, keeping the context window small and focused. - Extra Authentication (
require_api_token_auth): By default, the cryptographically hashed MCP URL acts as the authentication vector. If you enablerequire_api_token_auth, clients must also pass a valid Truto API token in theAuthorizationheader. This prevents unauthorized access even if the URL is leaked in a log file. - Ephemeral Access (
expires_at): You can assign an ISO datetime toexpires_at. Truto sets a TTL on the underlying KV store and schedules a durable cleanup alarm. Once the timestamp passes, the server self-destructs automatically.
Stop Manually Scraping UX Insights
UX research is only valuable if the product team actually consumes the insights. Forcing product managers and engineers to watch hours of UserTesting footage guarantees that data will go ignored.
By deploying a Truto MCP server, you turn your entire UserTesting repository into an interactive, queryable database. Claude can instantly analyze WebVTT transcripts, extract quantitative QX scores, and summarize Net Promoter feedback without writing point-to-point integration code.
FAQ
- Can I restrict the UserTesting MCP server to read-only access?
- Yes. When creating the MCP server in Truto, you can pass `config.methods: ["read"]` to ensure the AI agent can only perform GET and LIST operations, preventing any data mutation.
- How does Truto handle UserTesting API rate limits?
- Truto does not retry, throttle, or absorb rate limits. When the UserTesting API returns a 429 Too Many Requests, Truto passes that 429 directly to the caller, along with standardized IETF rate limit headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) so your client can implement proper retry and backoff logic.
- How do I extract transcripts from UserTesting using Claude?
- You can use the `list_all_user_testing_session_transcripts` tool. This tool fetches the raw WebVTT format (with timestamps) for supported LIVE_CONVERSATION and THINK_OUT_LOUD sessions, allowing Claude to parse the text and extract specific quotes.
- Does Claude need to authenticate with UserTesting directly?
- No. The Truto MCP server URL handles the OAuth and token lifecycle. Claude simply connects to the MCP URL provided by Truto, which routes the JSON-RPC tool calls safely to the UserTesting API.