MCP App Store
by KeenEthics
Education & Research
Synthetic Users icon

Synthetic Users

by Synthetic Users

Overview

Run exploratory research and evaluate concepts with AI-generated participants in your Synthetic Users workspace. Find projects, define audiences and studies, work with images and context documents, follow study progress, inspect interviews and insights, and download available exports. Connect an existing Synthetic Users account and choose a workspace. Access follows your workspace permissions and available entitlements. Synthetic user generation and interview runs require explicit confirmation. Create or regenerate reports when you need them. Available study types and features depend on the workspace. Interactive panels are available on hosts that support MCP Apps, with conversation or browser fallbacks where supported. Synthetic participants are AI simulations, not human research participants. Findings can inform hypotheses and research planning; they do not establish what real people will think or do.

Tools

ask_report_follow_up

ChatGPT
Save a question about a completed report and queue an answer. Read the persistent thread with list_report_follow_ups.

ask_summary_follow_up

ChatGPT
Save a question about a completed summary and queue its answer. Retrieve the persisted Q&A with list_summary_follow_ups.

attach_files_to_study

ChatGPT
Attach context documents selected in open_context_files to an existing draft. Preserves other attachments; enforces the project's RAG budget and setup lock.

clone_study

ChatGPT
Clone study setup into a new draft. Copies quick audiences, goals and concepts, reuses standard audiences/files, and remaps concept references. Does not copy participants, interviews, results or reports, and does not spend credits.

complete_file_upload

ChatGPT
Finish processing when the file bytes are already stored but still 'uploading'. The normal path is the POST to prepare_file_upload's upload.url, which stores the bytes and starts processing itself. Call this only to retry that step. Safe to retry: files that have left 'uploading' return their current status without processing again. read_file shows when the file is 'ready' for create_study.

confirm_interview_run

ChatGPT
App-only: start the exact interview run shown by the confirmation button. Requires its unexpired, single-use run token; uses interview credits.

create_audience

ChatGPT
Create a normal/free-text audience in this project. 'description' defines who the audience is; 'title' is an optional label (defaults to the description). Quick audiences support studies of up to 20 participants. create_crafted_audience creates an Audience Crafter (type="standard") audience with structured segments. generate_synthetic_users creates synthetic users from either kind.

create_crafted_audience

ChatGPT
Create a structured Audience Crafter audience (type="standard"). The description defines the audience. Optional attributes supply criteria, e.g. {"cities": ["New York state"], "age": [18, 80], "voting_eligibility": ["Eligible to vote in New York"]}. segment_by selects an attribute for grouping; "none" keeps one segment. The app's world model resolves geography, population estimates and research parameters in the background. read_audience reports crafting.status and the resulting segments. Once ready, create_study or edit_study(audience_ids) attaches this audience; generate_synthetic_users creates its participants separately. This preserves an existing study's questions and starts no interviews. Studies support up to 20 participants, or 50–300 with a custom script and large-study access; 21–49 participants are unsupported even with a crafted audience.

create_file_export

ChatGPT
Export an output_id from list_export_options in one of its offered formats. Returns immediately with export_id/status; read_file_export reports progress, with retry_after_seconds between checks. Each call exports one file and format. 'include' selects PDF sections only (use pdf_parts from the catalog); omitted means all. Each report or summary version has its own output_id. idempotency_key is optional: the same key retries the same request, and a new key makes a fresh file (for a failed or outdated one). Exports use the existing platform renderers, without spending interview credits or regenerating report content. Clients that render MCP Apps show the export in a card with its progress and a Download button. When ready, read_file_export returns the filename and size with a signed download_url and its expiry, or a 'download' note where the card holds the link. One failed export doesn't affect the others.

create_monadic_concept_plan

ChatGPT
Create a monadic plan: one study per concept, so each participant sees only one concept. Uses a Quick Audience and copies it to isolate this plan's participant pool. Returns total_interviews = concepts × interviews_per_concept. Creates no synthetic users or interviews and uses no credits. prepare_monadic_concept_plan generates participants; run_monadic_concept_plan opens the interview confirmation. Each concept's optional image_id is its ready media (uses='concepts'): an image, a video or a PDF/PPTX/DOCX document.

create_project

ChatGPT
Create a project in this connection's authorized workspace. Requires an active workspace owner or admin. 'name' must not be blank; 'description' is optional. No project_id or workspace_id is needed: the workspace is fixed by the connection. Project-locked connections cannot create projects. This creates an empty research project and spends no credits. Returns {id, name, description, type, workspace_id, created_at}; pass the returned id as project_id when creating audiences and studies.

create_report

ChatGPT
Create a study's report: the graph-rich report shown in the app's Report tab (executive summary, thematic sections and rendered charts). Pass either study_id or study_ids (for a combined report, including a monadic plan's child study IDs from read_monadic_concept_plan). Every study must be in this project. Set generate_now=false to review/edit the outline before calling generate_report. table_of_contents supplies a custom outline. By default, creating the report also starts building it: right away when the study analysis is ready, otherwise by itself once the analysis is ready (this call kicks it). read_report shows its status until 'done', and clients that render MCP Apps also follow it in a Study run card. generate_report is only for regenerating or retrying. The study must have finished its interviews (status 'done') before a report can be created. 'focus' optionally steers the report (e.g. "pricing objections"). For downloadable reports and charts, use list_export_options(report_id=...), create_file_export, then read_file_export, which returns signed download links; the platform renders the charts. Returns the created report with 'generation': 'started' or 'deferred'.

create_research_goal

ChatGPT
Create a research goal in this project. 'description' states the questions/learning objectives. Returns the created goal.

create_study

ChatGPT
Create a study in this project; creating it runs nothing. Studies run up to 20 synthetic users; 'custom_script' also runs 50–300. study_type (default 'research_goal_interview'): • 'research_goal_interview' — a Q&A interview for questions you'd like answered: the AI interviewer works through the research goal (research_goal_id), asking and probing; no concept is shown. The app's Research Goal interview ('dynamic_interview' is also accepted). • 'ethnographic_research' — an interview by an ethnographer who asks like a field observer, also driven by research_goal_id: what someone does, their settings, people and artifacts, workarounds, where actions differ from words. Fits day/week in the life, shadowing, or field observation requests. • 'solution_feedback' — one solution_descriptions entry (a product or message) tested for problem–solution fit against problem_descriptions. To compare options, or with no specific pain, 'concept_study' applies. The app calls it "Concept Testing" (not a study_type). • 'concept_study' — reactions to named concepts in solution_descriptions: one, or alternatives for one decision (for example three landing pages) that each synthetic user reacts to in one interview. Fit with a named pain is 'solution_feedback'. Monadic tests (one concept per synthetic user) use create_monadic_concept_plan. • 'custom_script' — script_questions asked in order, in place of the AI interviewer. With a create_crafted_audience audience it runs 50–300 synthetic users: the app's Quantitative Testing (large-study access), for survey-style questions such as multiple choice or 1–7 scales. • 'task_simulation' — live-URL user testing (the app's "User testing"; 'user_testing' is also accepted): each synthetic user works through the tasks in one browser session. Returns the created study; 'strategy' is the stored type code, 'study_type_label' the app's name.

delete_audience

ChatGPT
Delete your unused, unlocked audience. Fails while any study still uses it.

delete_research_goal

ChatGPT
Delete an unused research goal. Fails while a study still uses it.

detach_files_from_study

ChatGPT
Detach context documents from an existing draft without deleting their files.

edit_audience

ChatGPT
Edit an unlocked audience's description/title, preserving its other configuration. Shared published/generated audiences are immutable. Change study associations with edit_study.

edit_research_goal

ChatGPT
Edit a research goal while every study using it is still configurable.

edit_study

ChatGPT
Edit an existing study. Description/bookmark remain editable after a run. Setup changes require an empty participant pool, as in the app. Use clone_study when setup is locked. Pass research_goal_id=null to remove the goal. Questions are preserved individually in the structured guide. No interview is rerun.

generate_report

ChatGPT
Regenerate a report, or retry one that failed. Replaces its sections. create_report already starts generation; this is for a requested regeneration, or a report that failed or didn't start. It builds now when the study analysis is ready; otherwise it starts by itself once the analysis is ready ('generation': 'deferred') without another call. read_report shows status; once it is 'done', 'sections' hold the finished report. list_export_options(report_id=...) lists file downloads.

generate_study_knowledge_graph

ChatGPT
Build a graph from completed study evidence. Set rebuild=true to retry/rebuild an existing graph. Does not regenerate interviews. Monadic child studies use their interviews and combined reports instead of the graph pipeline.

generate_study_summary

ChatGPT
Generate a new saved summary from completed interview evidence, optionally with a focus such as pricing objections. read_summary shows it once done. Does not rerun interviews.

generate_synthetic_users

ChatGPT
Create quantity synthetic users from a Quick or ready Audience Crafter audience. Creating synthetic users uses no interview credits; run_study_interviews bills the interviews. create_audience creates Quick audiences; create_crafted_audience creates structured audiences. Quick studies support up to 20 participants; crafted custom-script studies support 50–300 with large-study access. Counts of 21–49 are unsupported. With study_id, participants draw on its context files (create_study's rag_file_ids), which must have finished analyzing. Generating them locks the study's setup; clone_study copies it. Monadic plan studies use prepare_monadic_concept_plan, and studies whose interviews have started are rejected. Returns generated_synthetic_user_ids with status 'generating'; they become 'ready' in the background. wait_for_study_run(synthetic_user_ids=[these ids]) returns once they have, list_synthetic_users shows their status, and clients that render MCP Apps show a Study run card that updates itself. These synthetic users are available for review before run_study_interviews(synthetic_user_ids=[these ids]). This operation starts no interviews.

get_project

ChatGPT
Return one project's context (id, name, description, type). Pass 'project_id' (from list_projects) on a workspace-scoped connection; everything else (audiences, studies, interviews, summaries) is then scoped to it.

get_study_report_toc

ChatGPT
Get a study's canonical report outline, generating it if absent. Review the sections before creating a report; update_report customizes an individual report.

interview_follow_up

ChatGPT
Ask a participant another question in a completed interview. Saves the question and queues an answer; read_interview retrieves the updated conversation. For a browser-testing session use task_simulation_follow_up with its simulation ID.

list_audiences

ChatGPT
List the audiences (synthetic users) in this project. Output: {"audiences": [{id, title, description, type, status, created_at}]}. Use read_audience for full segments/attributes.

list_export_options

ChatGPT
List every file a study or a standalone report can produce; takes exactly one of the two ids. Returns output_ids, formats, readiness, source ids and PDF section choices. Also returns recent export_ids so downloads can resume later. Reports: PDF/PPTX/CSV/XLSX/JSON/TXT; full studies: PDF; transcripts and annotations: TXT; video findings: PDF/CSV; charts/cards: PNG; graphs: PNG/SVG. Availability depends on the source. A report CSV and a video-verbatims CSV contain different data. A report that doesn't exist yet comes from create_report, and then appears here. Exports never rerun interviews. Multiple output_ids can be different versions of a report. This call is read-only: no export starts from it.

list_files

ChatGPT
List uploaded files in this project (id, filename, uses, status, tokens). Filter by 'uses' — e.g. 'rag' for context documents, 'concepts' for concept images, videos and documents. Use this to check a file's processing 'status': it must be 'ready' before a study that attaches it can run (a freshly uploaded RAG file stays 'processing' for a while), and to discover ids of files uploaded through the connector or web app to pass to create_study.

list_monadic_concept_plans

ChatGPT
List this project's monadic concept plans and their child studies.

list_projects

ChatGPT
List the projects you can access in the bound workspace: ids and names. The entry point for a workspace-scoped (OAuth) connection: project tools take one of these ids as 'project_id'; create_project adds a new project. Returns {"projects": [{id, name}]}; audiences and other data are read inside a specific project. include_studies=true adds each project's studies in the same call, as {id, name, status, type, interviews, created}, newest first and at most 50 per project; 'studies_total' counts them all and list_studies has full rows. These results come in pages of about 40,000 characters with 'total', and 'next_offset' when more projects remain.

list_report_follow_ups

ChatGPT
Read a report's saved question-and-answer thread in chronological order.

list_reports

ChatGPT
List standalone reports in this project, optionally filtered by a study. Includes combined reports. read_report retrieves their body and current outline.

list_research_goals

ChatGPT
List the research goals in this project. Output: {"research_goals": [{id, description, project_id, ...}]}.

list_studies

ChatGPT
List the studies in this project. Output: {"studies": [{id, description, status, interview_count, strategy, ...}]}. Poll a study's 'status' to track a run started with run_study_interviews — it is the same status read_study reports. Each study carries 'study_type_label' — the study type as the app names it (e.g. "Research Goal Interview") — and 'strategy', the code the tools accept.

list_study_summaries

ChatGPT
List all saved/generated summaries for a study. Use read_summary for full content.

list_summary_follow_ups

ChatGPT
Read the saved question-and-answer thread for a summary, in chronological order.

list_synthetic_users

ChatGPT
List the generated synthetic users in this project, with their 'status' ('generating' → 'ready'). Pass study_id for one study's participants, as the app shows them, or audience_id to filter to one audience. Deleted synthetic users, including ones whose generation failed, are left out, as in the app. Each ready synthetic user carries a short 'profile' (name, age, location, profession), so you can say who the participants are before any interview; read_synthetic_user returns one in full. Use this to confirm synthetic users are 'ready' before running — e.g. a 'task_simulation' study, or run_study_interviews(synthetic_user_ids=...).

open_context_files

ChatGPT
Open the interactive Context files panel in this conversation. For when the user wants synthetic users and interviews to draw on their own documents (research, reports, data). Uploads go into the project's files, with or without a study: a study created later takes them as create_study's rag_file_ids (that study_id then goes to generate_synthetic_users), and study_id adds them to an existing editable study. The user picks the original files in the panel, and the panel uploads them and shows analysis progress; their 'Use these files' message carries the verified file ids. A file already attached in a ChatGPT chat can go to prepare_file_upload's file input instead, with nothing to pick. Opening or using this panel does not create a study, generate synthetic users or spend credits. Clients that cannot render MCP Apps use prepare_file_upload(uses='rag') and its browser_upload_url instead.

open_study_image_upload

ChatGPT
Open the interactive Concept media panel in this conversation. For when the user wants to supply the media concepts show participants: images, videos, or PDF/PPTX/DOCX documents such as brochures (videos and documents where the account has them). The user selects the original files in the panel; no code execution, platform login or chat attachment transfer is needed. A video longer than 60 seconds gets a window of up to 60 seconds to analyse in the panel. Their 'Use these concepts' message carries the verified file ids and labels in order, matching create_study's concept_image_ids and solution_descriptions positions. Opening or using this panel does not create a study, generate synthetic users or spend credits. Pass study_id and solution_id to select replacement media for an existing draft concept; set_study_concept_image then applies the selected file ID. Clients that cannot render MCP Apps use prepare_file_upload, which returns a standalone browser_upload_url for each file. A file is uploaded once read_file shows it 'ready'.

prepare_context_file_upload

ChatGPT
App-only: prepare original document bytes; refresh a pending id on retry.

prepare_file_upload

ChatGPT
Upload a user-provided file to this project's files, with or without a study. 'concepts' is the media a concept shows participants: PNG/JPEG/GIF/WebP images, MP4/MOV/WebM/AVI/MKV videos, or PDF/PPTX/DOCX documents such as a brochure, deck or one-pager (office files become PDFs). 'rag' is research context: PDF, Word, PowerPoint, Excel, CSV and OpenDocument documents. Audio is not supported. Concept documents are limited to the plan's page cap (50 pages by default). Size limits: 500 MB for videos, 75 MB for concept documents, 10 MB otherwise. The original bytes arrive one of three ways: 1. file: in ChatGPT, a file attached in this chat. The connector downloads it and returns the stored file, with no upload step after. 2. Without file, this returns a file id, upload.url (this API, never S3), upload.file_field, upload.max_bytes and browser_upload_url, valid for 15 minutes. A code/file environment that has the file and can reach upload.url (ChatGPT's code sandbox can't) sends a multipart POST with the binary in the 'file' field, no Authorization header and no other form fields. A 200 means the bytes are stored and processing has started, so complete_file_upload isn't needed. 3. browser_upload_url: a page where the user picks the same file in their browser, for environments that can't reach upload.url. read_file reports status: images are 'ready' at once, while videos and documents are 'processing' first. Once 'ready', the id goes to create_study as 'concept_image_ids' (concept media) or 'rag_file_ids' (context documents). Tool arguments can't carry file contents, and a file counts as uploaded only once read_file shows it. The connector cannot read a client-local path, or a chat attachment outside ChatGPT.

prepare_monadic_concept_plan

ChatGPT
Generate a monadic plan's participants for review, with no interviews or credit spend. Returns the same participant batch on repeated calls. wait_for_study_run with generated_synthetic_user_ids tracks readiness; run_monadic_concept_plan opens the plan's interview confirmation once they are ready.

prepare_study_image_upload

ChatGPT
App-only: prepare original concept media bytes; refresh a pending id on retry.

read_audience

ChatGPT
Read an audience's segments and attributes. For create_crafted_audience, crafting.status is generating, ready or error (with an error explanation). A ready crafted audience supports generate_synthetic_users.

read_context_files

ChatGPT
App-only: analysis status and progress of the selected files, and the context space they use.

read_file

ChatGPT
Read a single uploaded file's metadata and processing status.

read_file_export

ChatGPT
Poll one export for progress, failure, or the finished file's filename, MIME type and size. Wait retry_after_seconds between polls. A ready response supplies a fresh signed download_url and its expiry, so an expired chat link can be renewed, or a 'download' note where the File export card holds the link. Jobs continue when chat stops; resume with the same export_id. This connector does not send unsolicited messages after a study finishes.

read_interview

ChatGPT
Read the full transcript of a single interview (the conversation between the AI interviewer and the synthetic user). Use this to extract quotes and analyze what a participant actually said — discover interview ids via read_study_interviews. Set include_profile=true to also get that participant's profile (demographics, traits, backstory). Reading every full transcript in a study with more than 20 interviews can add substantial context. Total size also depends on interview length. read_study_insights provides synthesized findings when available. Output: an Interview object with 'conversations' (the messages), plus 'profile' when include_profile is set. Task-simulation sessions have no conversation turns; for those the transcript is returned as 'session_log' — the per-task interaction log (actions + think-aloud reasoning + outcomes) and answered follow-ups.

read_monadic_concept_plan

ChatGPT
Read a monadic plan, child study IDs, per-concept counts and execution status.

read_report

ChatGPT
Read a standalone report in full: status, table_of_contents, sections (the report body), focus, progress, and the ids of its studies. Use this to poll a report you created: it generates by itself once the study analysis is ready, so poll until 'status' is 'done'; the 'sections' then hold the finished report. Use list_export_options(report_id=...) to download the report or its charts.

read_research_goal

ChatGPT
Read a single research goal in this project.

read_study

ChatGPT
Read a study in full: status, audiences, research goal, scripts (guides), progress, and the ids of its interviews and summaries. 'strategy' is the stored study-type code, which for historical reasons can differ from the app's name for it ('dynamic_interview' is a Research Goal interview); 'study_type_label' is that name. 'study_type' parameters always accept the 'strategy' code, and most labels. Next steps from here: read_study_insights (synthesized findings), read_summary (a specific summary), read_interview (a single transcript). analysis_ready/analysis_status describe usable results; post_processing_status separately tracks background work. Analysis is saved automatically without a report.

read_study_analysis

ChatGPT
Read cached study analysis: themes, sentiment, drivers, quotes and ranking, plus freshness/status. Analysis is saved automatically; no summary or report is required to save it. analysis_ready describes usable results, while post_processing_status tracks remaining background work. Does not trigger generation.

read_study_insights

ChatGPT
Return the synthesized findings for a study — its most recent summary (content + sections). This is the fastest way to "explain the insights" of a study without reading every transcript. Without a summary, returns the automatically saved study analysis (themes, sentiment, drivers and quotes). It is already persisted; creating a summary or report is not necessary to save it. analysis_ready and analysis_status describe its readiness; post_processing_status tracks other background work. If neither is available, read_study_interviews + read_interview provides raw transcripts. create_report creates a separate narrative report and starts generation automatically once the study analysis is ready.

read_study_interviews

ChatGPT
List interview metadata for a study (status, ids, timestamps), without the transcripts; read_interview(interview_id) returns a transcript. Output: {"interviews": [{id, status, synthetic_user_id, ...}]}.

read_study_knowledge_graph

ChatGPT
Read a study's knowledge graph and generation status, including its graph data.

read_study_run

ChatGPT
App-only: progress of a study's synthetic users, interviews, analysis and report.

read_study_task_simulations

ChatGPT
List a study's user-testing sessions: tasks, participants, status, observations and recording links. Use read_task_simulation for steps, screenshots and follow-ups.

read_summary

ChatGPT
Read a specific summary by id (content + sections + linked study).

read_synthetic_user

ChatGPT
Read one generated synthetic user in full, as the app's participant card shows it: 'personal_information' (name, age, location, profession), 'personality_traits', 'miscellaneous' (the audience's attributes), 'backstory' and the raw 'description'. Find ids with list_synthetic_users.

read_task_simulation

ChatGPT
Read a user-testing session's ordered actions, reasoning, screenshots, video timestamps, observations and persisted follow-up answers. Also polls pending answers.

regenerate_study_post_processing

ChatGPT
Rebuild analysis and annotations from existing interviews, for example after follow-ups. The worker deduplicates concurrent analysis runs. No interviews run.

run_monadic_concept_plan

ChatGPT
Open confirmation for a prepared monadic plan's entire interview run. Shows its ready participants, concepts, total interview count and credit cost. Starts no interviews; the card's Run button or signed-in confirmation_url does. confirm=true prepares this confirmation; it cannot start interviews. A new confirmation replaces the plan's earlier unused one.

run_study_interviews

ChatGPT
Prepare a confirmation card for interviews with ready synthetic_user_ids. Starts no interviews. The card shows the study, participants and credit cost; its Run button starts that exact run. confirmation_url is the signed-in web fallback. confirm=true prepares the card; it cannot start interviews. A new confirmation replaces the study's earlier unused one. If every selected participant already has an interview in this study, returns the existing run's progress without another confirmation or charge. The legacy quantity shortcut is rejected; generate_synthetic_users creates participants separately. Includes user-testing browser sessions, except for sites behind a sign-in, which run from the Synthetic Users app. Monadic plans use run_monadic_concept_plan.

set_study_concept_image

ChatGPT
Replace a draft study concept's media using a verified panel file ID; null clears it. The file can be an image, a video or a PDF/PPTX/DOCX document, and has to be 'ready'. Isolates a shared concept before editing and updates guide bindings and attachments.

task_simulation_follow_up

ChatGPT
Ask a simulated participant about a completed browser session or specific step. Persists the question and queues its answer; read_task_simulation retrieves it. Does not reset or rerun the interview/browser session.

update_report

ChatGPT
Change a report's outline while it is idle. Saved sections remain until the user requests generate_report; updating the outline alone does not rebuild it.

use_context_files

ChatGPT
App-only: verify files for a new study or attachment to an existing draft.

use_study_images

ChatGPT
App-only: verify the selected ordered concept media before adding them to the conversation.

wait_for_study_run

ChatGPT
Wait up to 25 seconds for a study run to settle, then return its progress. Requires study_id or synthetic_user_ids (or both). project_id alone only selects the project and cannot identify which run to follow. Follows the synthetic users from generate_synthetic_users (synthetic_user_ids) until each is ready or failed, and a study's interviews (study_id) along with the analysis that runs after them. Returns as soon as nothing is left to wait for, with 'done' true and the ready synthetic user ids. Otherwise it returns after 25 seconds with 'done' false, 'waiting_on' naming the stage still running ("synthetic_users", "interviews" or "analysis"), and counts of how far it got. That response is a snapshot, not a completion notification. Repeated calls continue observing an unfinished run without starting work or using credits. The live Study run card refreshes separately while open; chat text is static. 'stalled' is true once that stage has run far longer than usual (20 minutes for synthetic users, 90 for interviews and analysis). 'done' describes the stage being followed, not permission to start another. 'awaiting_interview_confirmation' marks ready participants awaiting review and the confirmation button; this read never starts interviews. 'confirmation_pending' is true while a confirmation card prepared for this study is still unused. 'interviews_started' describes the study; 'selected_interviews_started' is null unless both a study and participant ids were supplied. Analysis ready means the results are usable; post_processing_status separately tracks remaining background work. Reports are separate from automatically saved analysis.

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

App Stats

72

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily