The ListenLabs MCP connector routes your AI agent's tool calls to ListenLabs's own MCP server through Scalekit. Each user signs in to ListenLabs once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 15 tools.
- Tools
- 15
- What they doRead · write · destructive
- 8 · 5 · 28 read5 write2 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the ListenLabs MCP connection
In AgentKit > Connections, create a ListenLabs MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for ListenLabs MCP server, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'listenlabsmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize ListenLabs MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'listenlabsmcp_list_creatable_orgs',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "listenlabsmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize ListenLabs MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="listenlabsmcp_list_creatable_orgs",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toollistenlabsmcp_get_reel_download_urlGet a direct MP4 download link for a reel, for handing the file to another workflow.Read-onlyGet Reel Download Url
Get a direct MP4 download link for a reel, for handing the file to another workflow. Take reelId from the `Reel ID` line of a reel section in get_study_analysis. Requires view access to the reel, and only works for organizations with video import enabled; other organizations get a 403. status `already_rendered`: `signedUrl` is a signed link that anyone holding it can use to download the MP4 for 24 hours. Treat it as sensitive and do not post it publicly unless the user asks. status `queued` or `already_requested`: the MP4 is not rendered yet. This call starts the render, and Listen Labs emails the user a link when it finishes. Tell the user that, and call this tool again later to get `signedUrl`.
Inputs
reelIdstringrequired- Reel UUID from the `Reel ID` line in get_study_analysis.
listenlabsmcp_get_responseDeep-dive into a single respondent's interview.Read-onlyGet Response
Deep-dive into a single respondent's interview. Returns a structured transcript with question tracking, input types, multiple choice data, and source URLs for each message. Paginated for large interviews.
Inputs
readable_idnumberrequired- Respondent number from get_study_responses
study_idstringrequired- Study identifier: the UUID from list_studies, the short link id from a Listen Labs study URL (e.g. zy4GuhxP), or the full pasted URL (e.g. https://listenlabs.ai/p/zy4GuhxP/).
cursorstring- Pagination cursor for long transcripts
listenlabsmcp_get_study_analysisGet the AI-generated analysis report for a study, rendered as markdown.Read-onlyGet Study Analysis
Get the AI-generated analysis report for a study, rendered as markdown. Use list_studies first to find studies where has_analysis is true. The report includes sourced respondent quotes with deep-links to the original transcript messages.
Inputs
study_idstringrequired- Study identifier: the UUID from list_studies, the short link id from a Listen Labs study URL (e.g. zy4GuhxP), or the full pasted URL (e.g. https://listenlabs.ai/p/zy4GuhxP/).
listenlabsmcp_get_study_responsesGet response transcripts for a study.Read-onlyGet Study Responses
Get response transcripts for a study. Returns formatted interview transcripts with pagination. Each respondent answer includes a source link to that exact message in the transcript.
Inputs
study_idstringrequired- Study identifier: the UUID from list_studies, the short link id from a Listen Labs study URL (e.g. zy4GuhxP), or the full pasted URL (e.g. https://listenlabs.ai/p/zy4GuhxP/).
cursorstring- Pagination cursor from previous response
max_responsesnumber- Maximum number of responses to return (default 10, max 50)default
10 question_numbersarray- Only include these question numbers in the transcript (1-indexed)
readable_idsarray- Filter to specific respondents by their readable ID numbers
listenlabsmcp_get_study_stateReturn the current state of a study — title, audience, study guide, questions, screener, and recruitment details.Read-onlyGet Study State
Return the current state of a study — title, audience, study guide, questions, screener, and recruitment details. Also includes launch eligibility, credit balance, and per-recruitment cost. Call before edit_study or launch_study to inspect the current study configuration.
Inputs
studyIdstringrequired- Study identifier: the UUID from list_studies, the short link id from a Listen Labs study URL (e.g. zy4GuhxP), or the full pasted URL (e.g. https://listenlabs.ai/p/zy4GuhxP/).
listenlabsmcp_list_creatable_orgsList organizations the user belongs to where they can create studies.Read-onlyList Creatable Orgs
List organizations the user belongs to where they can create studies. Returns org ID, name, and role. Supports pagination and case-insensitive name search. Call before create_study when the user has not specified an organization.
Inputs
cursorstring- Pagination cursor from a previous call's nextCursor
limitinteger- Page size (default 10, max 25)
textHintstring- Case-insensitive substring to filter org names by
listenlabsmcp_list_studiesList studies accessible to the authenticated user.Read-onlyList Studies
List studies accessible to the authenticated user. Returns study ID, name, status, creation date, response count, and whether analysis is available. Paginated (50 per page). Use textHint to filter by study title; use cursor for pagination.
Inputs
cursorstring- Pagination cursor from previous response
folderstring- List only studies inside this folder. Matched case-insensitively at any nesting depth; pass a "/"-separated path (e.g. "Research / Q3 2026") when several folders share a name. Not recursive: subfolder contents are excluded.
folderIdstring- Folder UUID from a previous folders[] entry. Use when a folder name was reported as ambiguous; takes precedence over folder.
orgIdstring- Organization UUID when known. Prefer orgName when the user gave a name.
orgNamestring- Organization name to scope studies and folders to. Use when the user names a workspace.
statusstring- Filter by study statusone of
openclosed textHintstring- Case-insensitive substring to filter study titles by. Use when the user mentions a study name.
listenlabsmcp_search_across_studiesSearch across study metadata using a text query.Read-onlySearch Across Studies
Search across study metadata using a text query. Returns matching studies with relevant context.
Inputs
querystringrequired- Search term to find across studies
max_resultsnumber- Maximum number of results to return (default 10)default
10
listenlabsmcp_create_studyStart a new guided user-interview study.WriteCreate Study
Start a new guided user-interview study. Provide a plain-language description of the study goals and target audience. The platform's creation agent walks through onboarding stages; subsequent turns must use edit_study with the returned studyId and chatId.
Inputs
promptstringrequired- Plain-language description of the study to create (goals, who to interview, what to learn).
folderIdstring- Folder UUID from a previous create_study error listing ambiguous matches. Use instead of folderName when selecting by ID.
folderNamestring- Existing folder to create the study in, matched case-insensitively. Accepts a "/"-separated path to pick between folders sharing a name (e.g. "Research / Q3 2026"). Rejected if no such folder exists. Omit to create the study on the main dashboard.
orgIdstring- Organization UUID when known (e.g. from list_creatable_orgs). Prefer orgName when the user gave a name.
orgNamestring- Organization name to create the study in. Required when the user belongs to multiple organizations and did not specify one in a prior list_creatable_orgs step.
listenlabsmcp_edit_studySend a natural-language edit instruction or structured button event to the study creation agent.WriteEdit Study
Send a natural-language edit instruction or structured button event to the study creation agent. Use after create_study (pass the chatId) for guided onboarding, or with a fresh chatId for direct edits to an existing study. Supply either prompt or buttonClick, not both.
Inputs
studyIdstringrequired- Study identifier: the UUID from list_studies, the short link id from a Listen Labs study URL (e.g. zy4GuhxP), or the full pasted URL (e.g. https://listenlabs.ai/p/zy4GuhxP/).
buttonClickobject- Structured button event from the guided onboarding flow. Use the values returned in the previous turn's nextActions field rather than hand-crafting these; all string enums use snake_case.
chatIdstring- Optional. Omit on the first turn. To continue a previous conversation, pass the chatId returned in the prior turn's response.
promptstring- Free-form instruction or user input. Use this for direct edits on an existing study ('remove Q3', 'switch panel to professionals and bump to 200 people', 'add a screener question for parents') or to answer the agent's last question during an in-progress creation flow.
listenlabsmcp_move_studyMove a study into a folder, or back out to the dashboard root.WriteMove Study
Move a study into a folder, or back out to the dashboard root. Pass folderName to move it into an existing folder; omit both folderName and folderId to move the study out of its folder and back to the dashboard root. The folder must already exist.
- Idempotent
Inputs
studyIdstringrequired- Study identifier: the UUID from list_studies, the short link id from a Listen Labs study URL (e.g. zy4GuhxP), or the full pasted URL (e.g. https://listenlabs.ai/p/zy4GuhxP/).
folderIdstring- Destination folder UUID from a previous move_study error. Use instead of folderName when selecting by ID.
folderNamestring- Existing destination folder name, or a "/"-separated path to pick between folders sharing a name (e.g. "Research / Q3 2026"). Rejected if no such folder exists. Omit to move the study to the dashboard root.
listenlabsmcp_publish_studyPublish the study's current draft revision so respondents see the latest version.WritePublish Study
Publish the study's current draft revision so respondents see the latest version. No-op when the draft is identical to prod. Does not start recruitments — use launch_study to begin sourcing respondents.
- Idempotent
Inputs
studyIdstringrequired- Study identifier: the UUID from list_studies, the short link id from a Listen Labs study URL (e.g. zy4GuhxP), or the full pasted URL (e.g. https://listenlabs.ai/p/zy4GuhxP/).
listenlabsmcp_launch_studyPublish the study's draft revision (if needed) and start all unlaunched recruitments that fit the organization's credit balance.DestructiveLaunch Study
Publish the study's draft revision (if needed) and start all unlaunched recruitments that fit the organization's credit balance. Recruitments are launched greedily in dashboard order. Returns launched and skipped recruitments with balance before/after. Safe to re-call — already-launched recruitments are skipped.
Inputs
studyIdstringrequired- Study identifier: the UUID from list_studies, the short link id from a Listen Labs study URL (e.g. zy4GuhxP), or the full pasted URL (e.g. https://listenlabs.ai/p/zy4GuhxP/).
listenlabsmcp_manage_folderCreate, rename, re-nest, or delete a dashboard folder.DestructiveManage Folder
Create, rename, re-nest, or delete a dashboard folder. Folders only: it never creates, moves, or deletes a study. Use move_study to file a study in a folder. Delete only removes an EMPTY folder, and only when the user explicitly asked to delete it.
- Idempotent
Inputs
actionstringrequired- create makes a new folder, rename changes a folder's name, move re-nests it under another folder, delete permanently removes an empty one.one of
createrenamemovedelete folderNamestringrequired- The folder to act on, or a "/"-separated path for nested folders (e.g. "Research / Q3 2026"). For create, this is the folder to make.
folderIdstring- Folder UUID from list_studies folders[] or a previous error. Takes precedence over folderName; use it when a name was reported as ambiguous.
newNamestring- New folder name. Required for action="rename", ignored otherwise.
orgIdstring- Organization UUID when known (e.g. from list_creatable_orgs). Prefer orgName when the user gave a name.
orgNamestring- Organization name. Required when the user belongs to multiple organizations and did not specify one.
parentFolderIdstring- Destination folder UUID for action="move". Takes precedence over parentFolderName; use it when the parent name was reported as ambiguous.
parentFolderNamestring- Folder to nest under, matched like folderName. Used by action="move"; omit it to move the folder to the dashboard root.
No tools match.