[ Trusted by builders from ]NetflixServiceNowCiscoAdobePayPalAmazonDatadogJPMorgan ChaseDell
[ Trusted by builders from ]NetflixServiceNowCiscoAdobePayPalAmazonDatadogJPMorgan ChaseDell
Prior.Runprior.run

FIG · MCP— model context protocol integration, v1

Your agent
runs the simulation.

One config block plugs Prior.Run into Claude Desktop, Claude Code, Codex, Gemini CLI, Cursor, Windsurf, Cline, Zed — any MCP-compatible host. The agent calls tools, waits for synthesis, hands you back a verdict.

claude code · prior-run MCP↳ 17 tools connected
you

Run a Prior.Run compare on brand.com/landing-a vs brand.com/landing-b with my Gen Z skincare room.


tool callcreate_url_compare
{
  image_a: "~/desk/hero-a.png",
  image_b: "~/desk/hero-b.png",
  campaign_context: "Gen Z skincare, TikTok awareness.",
  run_platform: "tiktok",
  custom_audience_id: "aud_…"   // optional · saved audience
}

↳ running — synthesis phase ·····


result

Page A wins, 4–2. The four who picked it said B buried the price; the two who didn't said A's hero asked for too much, too early. Every walk is back in your room


01 · one-liner↳ fetches + runs on demand via uv
01uvx priorrun-mcp
02
03# no clone, no pip install. requires python 3.11+ and uv.
04# install uv: curl -LsSf https://astral.sh/uv/install.sh | sh

Claude Desktop↳ ~/Library/Application Support/Claude/claude_desktop_config.json
01{
02 "mcpServers": {
03 "prior-run": {
04 "command": "uvx",
05 "args": ["priorrun-mcp"],
06 "env": {
07 "PRIORRUN_API_KEY": "pr_live_xxxxxxxxxxxxxxxxxxxx"
08 }
09 }
10 }
11}
Claude Code↳ ~/.claude/mcp.json — or .mcp.json in a project root
01{
02 "mcpServers": {
03 "prior-run": {
04 "command": "uvx",
05 "args": ["priorrun-mcp"],
06 "env": { "PRIORRUN_API_KEY": "pr_live_..." }
07 }
08 }
09}
Codex (OpenAI)↳ ~/.codex/config.toml — TOML, not JSON
01[mcp_servers.prior-run]
02command = "uvx"
03args = ["priorrun-mcp"]
04
05[mcp_servers.prior-run.env]
06PRIORRUN_API_KEY = "pr_live_..."
Gemini CLI↳ ~/.gemini/settings.json
01{
02 "mcpServers": {
03 "prior-run": {
04 "command": "uvx",
05 "args": ["priorrun-mcp"],
06 "env": { "PRIORRUN_API_KEY": "pr_live_..." }
07 }
08 }
09}
Cursor↳ ~/.cursor/mcp.json (global) or .cursor/mcp.json (project)
01{
02 "mcpServers": {
03 "prior-run": {
04 "command": "uvx",
05 "args": ["priorrun-mcp"],
06 "env": { "PRIORRUN_API_KEY": "pr_live_..." }
07 }
08 }
09}
Windsurf / Cline / Zed↳ same JSON shape as above — check the host's docs for the config path
01# all modern MCP hosts share the "mcpServers" shape used by Claude Code.
02# drop the same block into the host's MCP config file and you're set.

I · Focus-group room — start here№ 01–11
01persona_audience_panelopen focus-group room
02persona_audience_askask the whole room (+ actions, images/videos, @-targeting)
03upload_room_imagestimulus upload · image or short video
04persona_audience_synthesistranscript → themes + advisory handoff hint
05dismiss_room_memberswap one seat for a fresh draw
06reset_roomclear | swap | new
07get_room_turnsserver-side transcript + field notes
08create_room_threadcampaign threads (+ rename_room_thread)
09interview_room_member1:1 with a single member
10get_member_interview_historymember 1:1 transcript + budget
11create_room_briefthread → ship-ready creative brief
II · Go deep — live URLs№ 13–14
13create_url_auditdeep-walk one live URL or design prototype · brief the panel with instructions
14create_url_comparetwo URLs head-to-head with your room's members
III · Mood of the Internet№ 15–21
15create_moodkick off Mood pipeline
16get_mood_jobpoll a pipeline job
17list_mood_reportslist caller's Mood reports
18get_moodfull corpus JSON
19list_mood_cohortscohort_ids for spawn
20regenerate_moodre-run same URL
21spawn_mood_audiencespanel → synthetic audiences
IV · Persona interview№ 22–24
22persona_interviewask one persona a follow-up
23persona_interview_historytranscript + budget
24upload_interview_imagestimulus upload · images only
V · Retrieval & audiences№ 25–29
25list_audience_templatesbuilt-in templates
26list_custom_audiencessaved custom audiences (id + name)
27rename_custom_audiencerename a saved audience
28delete_custom_audiencedelete a saved audience
29get_memoarchived memos · read-only

Room-first, two speeds — same as the web app's Fast/Deep toggle. Fast = persona_audience_ask: the whole room answers in seconds (conversation, structured actions). Deep = create_url_*: the same seated members walk a live page in a real browser and report what they did — journeys, reactions, hesitations, and a head-to-head vote on a compare (minutes, credits-charged). Every deep run needs custom_audience_id + panel_member_indices — the agent opens the room with persona_audience_panel and passes the seated members through. Image arguments accept local paths, https URLs, or base64; upload_room_imagealso takes short mp4 / mov / webm ad videos (≤ 100 MB, up to 5 per ask; 2 = A/B vote, 3-5 = ranked, same as creatives) — clips are prescanned at upload so the panel reacts to what's actually on screen. The URL tools block until the panel finishes walking, so the agent gets the result in one tool call.


Session transcript↳ abridged
you

Deep-test these two landing pages — /landing-a and /landing-b — with my Gen Z skincare room.

agent → tool

persona_audience_panel( audience_id="…" ) → 6 members seated

agent → tool

create_url_compare( custom_audience_id="…", panel_member_indices=[0,1,2,3,4,5] )

tool

waiting · 90s ·

agent

We prefer Page A · Moderate confidence. The hook lands — “feels like a real recommendation” came up across the room. But B's CTA scored higher for clarity. Full focus group

The agent picks the right tool from your wording: "ask my room" / "what do they think" → room tools. "live page" / "walk this URL" → URL tools. If it guesses wrong, say so explicitly: “use create_url_compare”.


rule i

Tool errors


The tool surfaces a clear message: 401 invalid key · 403 quota · 413 image too large · 429 slow down · 504 the walk outran the gateway (already billed — don't re-run).

rule ii

Rate limits


Per-key request rate and concurrent-job caps. The agent will see 429 with a retry hint — let it back off, don't loop manually.

rule iii

Waiting


create_* tools default to wait=true and block until status=complete. For Mood, poll get_mood_job — it's a long async pipeline.

rule iv

Keys


Same key as the REST API. Generate, rotate, revoke at /settings. Plaintext shown once. Old keys 401 instantly across both surfaces.


[ ready to plug in? ]

Simulate before
you ship.