Skip to content

Stunt Double

io.stuntdouble/mcp-serverstuntdouble.iostreamable-httpv1.16.0Scanned

Deploy AI user personas to validate user journeys at scale. Find UX friction before real users do.

69 tools: 17 can delete or cancel things, 20 change things and 32 only read.

Tools: 17 delete, 0 irreversible, 20 write, 32 read.
  • Reads private data · 8
  • Reads text others write · 26
  • Can send data out · 3
  • 3 findings

Sign-in required, OAuth metadata published. Remote posture

Anlyon alternative

37 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

69 tools

Deletes or cancels 17Claude Code: deny
  • connect_workflow_stepsWire a step's output handle to another step, to build or repair a branch (adding and removing steps keeps the plain chain on their own).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Wire a step's output handle to another step, to build or repair a branch (adding and removing steps keeps the plain chain on their own). A condition's 'false' handle starts unconnected, so a failing condition ends the run. Connecting a connected handle replaces its edge; target_step_id: null disconnects it.

    Annotations the server declares

    • title: Connect workflow steps
    • idempotentHint: true
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • delete_checklistDelete a checklist and its checks and runs.No findings

    Why it is in this group

    • The name "delete_checklist" says "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Delete a checklist and its checks and runs. This permanently discards run history; prefer update_checklist, or simply not running a checklist, unless the user asks for deletion.

    Annotations the server declares

    • title: Delete checklist
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • delete_workflowDelete a workflow and its steps and runs, and remove its schedule.Reads text others writeNo findings

    Why it is in this group

    • The name "delete_workflow" says "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Delete a workflow and its steps and runs, and remove its schedule. This discards run history; prefer toggle_workflow to pause unless the user asks for deletion.

    Annotations the server declares

    • title: Delete workflow
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: true
  • flag_check_verdictCorrect a wrong passed or failed verdict on one check: pass the result_id from get_checklist_run and a note on what was actually true.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Correct a wrong passed or failed verdict on one check: pass the result_id from get_checklist_run and a note on what was actually true. Later runs use it as calibration and re-record any code-run script; the run's own score is unchanged. Set clear to withdraw a correction.

    Annotations the server declares

    • title: Flag a wrong verdict
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • remove_actor_knowledgeRemove a knowledge entry from an actor permanently, so future runs no longer use it.No findings

    Why it is in this group

    • The name "remove_actor_knowledge" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Remove a knowledge entry from an actor permanently, so future runs no longer use it. Find the entry's id with list_actor_knowledge.

    Annotations the server declares

    • title: Remove actor knowledge
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • remove_workflow_stepRemove a step and close the gap: whatever led into it is repointed at whatever it led to, so the rest of the automation still runs.No findings

    Why it is in this group

    • The name "remove_workflow_step" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Remove a step and close the gap: whatever led into it is repointed at whatever it led to, so the rest of the automation still runs.

    Annotations the server declares

    • title: Remove workflow step
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • remove_workspace_guidelineRemove a rule from the workspace library permanently.No findings

    Why it is in this group

    • The name "remove_workspace_guideline" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Remove a rule from the workspace library permanently. This detaches it from every project holding it, so prefer `update_workspace_guideline` with `enabled: false` when the rule may come back.

    Annotations the server declares

    • title: Remove workspace guideline
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • reorder_workflow_stepsSet the order a workflow runs its steps in, as one linear sequence.No findings

    Why it is in this group

    • The description's first verb is "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Set the order a workflow runs its steps in, as one linear sequence. Pass every step id: a list that leaves a step out is refused, since that step would be disconnected from the run (remove it with remove_workflow_step instead). This rewires the whole automation, so a branch built on the canvas (a condition with both a True and a False path) does not survive it; use connect_workflow_steps to rebuild a fork.

    Annotations the server declares

    • title: Reorder workflow steps
    • idempotentHint: true
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • set_project_guidelineAttach a library rule to a project, detach it, or switch it off for this project alone.No findings

    Why it is in this group

    • The name "set_project_guideline" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Attach a library rule to a project, detach it, or switch it off for this project alone. Attaching is how one workspace rule comes to hold for several projects without being retyped. `enabled: false` keeps the attachment but stands the rule down here, leaving every other project untouched. Safe to repeat: setting the state the project is already in changes nothing.

    Annotations the server declares

    • title: Set project guideline
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • toggle_workflowActivate or pause a workflow.Reads text others writeNo findings

    Why it is in this group

    • The name "toggle_workflow" says "toggle": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Activate or pause a workflow. Scheduled workflows have their Trigger.dev schedule activated/deactivated to match. Activating a workflow that runs on a schedule, webhook or event needs the mcp:run scope, since it then starts runs on its own; pausing never does. Pausing keeps the steps and run history; prefer it to delete_workflow.

    Annotations the server declares

    • title: Toggle workflow
    • idempotentHint: true
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: true
  • update_actorUpdate an actor's name, description, system prompt, capabilities, or status.No findings

    Why it is in this group

    • The name "update_actor" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update an actor's name, description, system prompt, capabilities, or status. Only the fields you pass change; at least one is required. Set status to "archived" to soft-delete.

    Annotations the server declares

    • title: Update actor
    • idempotentHint: true
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • update_checklistUpdate a checklist.1 finding

    Why it is in this group

    • The name "update_checklist" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    Findings

    • Info

      The input schema at properties.carry_over_notes.description mentions "credentials".

      Matched text

      inputSchema.properties.carry_over_notes.description: "...t behind. Notes never carry verdicts or credentials. On by default; turn it off when the pr..."

      What this check looks for
    Description, as the server wrote it
    Update a checklist. Only the fields you pass change. Pass `checks` to replace the full set of checks, sending each existing check with the `id` from get_checklist so it keeps its run history. Changing the checks, instructions or url retires the recorded script, so the next run drives the agent afresh.

    Annotations the server declares

    • title: Update checklist
    • idempotentHint: true
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • update_feedback_statusUpdate a feedback widget comment's status: "reviewed" once assessed, "resolved" when confirmed fixed (ideally after a checklist run proves it), "dismissed" sparingly.No findings

    Why it is in this group

    • The name "update_feedback_status" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update a feedback widget comment's status: "reviewed" once assessed, "resolved" when confirmed fixed (ideally after a checklist run proves it), "dismissed" sparingly. The dashboard reflects the change immediately.

    Annotations the server declares

    • title: Update comment status
    • idempotentHint: true
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • update_interviewUpdate an interview’s name, target_url, research brief, status or usability questionnaire.No findings

    Why it is in this group

    • The name "update_interview" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update an interview’s name, target_url, research brief, status or usability questionnaire. Only the fields you pass change; pass at least one. To start a round use launch_interview rather than setting status to running.

    Annotations the server declares

    • title: Update interview
    • idempotentHint: true
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • update_workflowUpdate a workflow's name, description, or trigger.Reads text others writeNo findings

    Why it is in this group

    • The name "update_workflow" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Update a workflow's name, description, or trigger. Only the fields you pass change. Syncs the Trigger.dev schedule when the cron or trigger type changes. The trigger fields edit the workflow's one trigger; a workflow with several triggers has them edited in the dashboard instead. Changing the trigger of an active workflow that runs on a schedule, webhook or event needs the mcp:run scope; pause it first otherwise. To change steps use the step tools; to pause or resume use toggle_workflow.

    Annotations the server declares

    • title: Update workflow
    • idempotentHint: true
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: true
  • update_workflow_stepChange a step's type or config in place, leaving its connections alone (move it with reorder_workflow_steps).No findings

    Why it is in this group

    • The name "update_workflow_step" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Change a step's type or config in place, leaving its connections alone (move it with reorder_workflow_steps). Only stores the change. Config shapes are as in add_workflow_step.

    Annotations the server declares

    • title: Update workflow step
    • idempotentHint: true
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • update_workspace_guidelineUpdate a rule in the workspace library, or switch it off.No findings

    Why it is in this group

    • The name "update_workspace_guideline" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update a rule in the workspace library, or switch it off. Every project holding it is held to the new wording, so prefer editing the shared rule over adding a near-duplicate. Pass only the fields to change; at least one is required.

    Annotations the server declares

    • title: Update workspace guideline
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
Changes things 20Claude Code: ask
  • add_actor_knowledgeAdd knowledge to an actor.No findings

    Why it is in this group

    • The name "add_actor_knowledge" says "add": a word for a change.
    Description, as the server wrote it
    Add knowledge to an actor. Choose the kind: expertise for a skill or standard it judges by in every run (brand, tone of voice, design system, compliance, accessibility), process for steps it follows, reference for facts it looks up when relevant (product docs, FAQs, policies), account for test account details. Never pass real passwords, API keys or one-time codes; actors sign in with email codes. Check list_actor_knowledge first to avoid duplicates.

    Annotations the server declares

    • title: Add actor knowledge
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • add_interview_itemAdd a question or task to an interview section (create the section first with add_interview_section).No findings

    Why it is in this group

    • The name "add_interview_item" says "add": a word for a change.
    Description, as the server wrote it
    Add a question or task to an interview section (create the section first with add_interview_section). Tasks are concrete jobs to attempt in the product ("Find the annual plan price and compare it with monthly"); questions probe comprehension and sentiment. Set expected_evidence on tasks so the report can judge success.

    Annotations the server declares

    • title: Add interview item
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • add_interview_participantAttach a participant to an interview.No findings

    Why it is in this group

    • The name "add_interview_participant" says "add": a word for a change.
    Description, as the server wrote it
    Attach a participant to an interview. Provide either actor_id (existing actor) or persona_spec (ad-hoc persona: name, bio, traits), not both. Vary personas and devices across participants (expertise, motivation, scepticism, mobile vs desktop) for richer findings, and use behaviour to dial scepticism, technical literacy and frustration up or down. Call once per participant, then launch_interview.

    Annotations the server declares

    • title: Add interview participant
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • add_interview_sectionAdd a section to an interview’s discussion guide.No findings

    Why it is in this group

    • The name "add_interview_section" says "add": a word for a change.
    Description, as the server wrote it
    Add a section to an interview’s discussion guide. Sections group related items (e.g. "First impressions", "Checkout"); add questions and tasks to it next with add_interview_item, using the returned id as section_id.

    Annotations the server declares

    • title: Add interview section
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • add_project_guidelineAdd a standing rule and hold this project to it (a design-system rule, a tone-of-voice rule, a compliance obligation, or shared knowledge).No findings

    Why it is in this group

    • The name "add_project_guideline" says "add": a word for a change.
    Description, as the server wrote it
    Add a standing rule and hold this project to it (a design-system rule, a tone-of-voice rule, a compliance obligation, or shared knowledge). Every checklist run, design review, interview and triage for the project is then held to it. The rule joins the workspace library, so check list_workspace_guidelines first and attach an existing rule with `set_project_guideline` rather than adding a second copy.

    Annotations the server declares

    • title: Add project guideline
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • add_workflow_stepAdd a step to a workflow and connect it into the run.No findings

    Why it is in this group

    • The name "add_workflow_step" says "add": a word for a change.
    Description, as the server wrote it
    Add a step to a workflow and connect it into the run. Only stores it: nothing executes until the workflow runs. Appends by default; `sort_order` splices it in at a position. In a run, run_checklist drives a real browser; notification emails or messages members on Slack; github_comment and actor_pr_review post on the triggering pull request; crawl_topology crawls a topology in a real browser to make a new version of its map; condition and delay only steer or pause. Config per step type: run_checklist: { checklist_id, use_deployment_url? } runs a checklist and passes its pass/fail counts to the next step. condition: { field, operator, value } continues down its True branch when it holds and ends the run otherwise. `field` is 'previous_step.status', another 'previous_step.<key>' off the last step's output, or 'trigger.<key>' off the event that started the run. `operator` is eq, neq, gt or lt. notification: { channel, recipients, template, subject?, body?, slack_channel_id? }. channel is 'email' or 'slack'; recipients is { type: 'all_members' } or { type: 'members', member_ids: [...] }; template is 'completed', 'failed' or 'custom' (custom uses subject and body). delay: { duration_seconds } waits before the next step. Waits are checkpointed, so a long one is free. github_comment: { body_template } comments on the pull request that triggered the run (GitHub App or Cursor Origin, depending on the trigger). The template may use {{passed}}, {{failed}} and {{summary}}. actor_pr_review: { actor_id, review_focus? } has an actor review the triggering pull request. crawl_topology: { topology_id } crawls a topology again and passes the new version's status, page count and what changed since the last version (added, changed, removed) to the next step.

    Annotations the server declares

    • title: Add workflow step
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • add_workspace_guidelineAdd a standing rule to the workspace library.No findings

    Why it is in this group

    • The name "add_workspace_guideline" says "add": a word for a change.
    Description, as the server wrote it
    Add a standing rule to the workspace library. Call list_workspace_guidelines first so you do not add a near-duplicate. Attach it to the projects it applies to with `project_ids` here or `set_project_guideline` later, or set `apply_to_design_reviews` so every design review in the workspace is held to it, including the Slack and Linear ones that have no project. Codify a standard here once rather than repeating it in each checklist.

    Annotations the server declares

    • title: Add workspace guideline
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • comment_on_prPost a comment on a GitHub pull request via the workspace GitHub connection.Reads text others writeNo findings

    Why it is in this group

    • The name "comment_on_pr" says "comment": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Post a comment on a GitHub pull request via the workspace GitHub connection. Use it to report checklist or interview results where engineers already look: a short verdict, then per-check outcomes with evidence highlights. Needs the Stunt Double GitHub App installed on the repository; call get_pull_request first to confirm the PR is reachable.

    Annotations the server declares

    • title: Comment on pull request
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: true
  • create_actorCreate an actor: a persistent AI user persona with its own browser, email inbox (for OTP and magic-link flows), and memory.No findings

    Why it is in this group

    • The name "create_actor" says "create": a word for a change.
    Description, as the server wrote it
    Create an actor: a persistent AI user persona with its own browser, email inbox (for OTP and magic-link flows), and memory. The description shapes who the persona is, so describe a person (background, goals, tech comfort), not a job title. Call list_actors first and reuse a matching actor; afterwards, add_actor_knowledge gives it context or standards to enforce. Fails when the plan's actor limit is reached.

    Annotations the server declares

    • title: Create actor
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • create_checklistCreate a browser checklist: an actor exercises the product at a URL and judges each check with evidence.Can send data outNo findings

    Why it is in this group

    • The name "create_checklist" says "create": a word for a change.

    What it can reach

    • outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    Create a browser checklist: an actor exercises the product at a URL and judges each check with evidence. Checks can verify flows ("a new user can complete signup") or assert standards ("headlines use sentence case"), for brand, compliance and design-system audits. Any reachable URL works, including previews and prototypes; actors handle email sign-in (OTP, magic links) through their own inboxes, but not other auth walls. Needs project_id or url, an actor (list_actors), instructions and at least one check. Search or list_checklists first to reuse one; run with run_checklist.

    Annotations the server declares

    • title: Create checklist
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • create_interviewCreate a user interview: AI persona participants complete tasks and answer questions against target_url, and results are synthesised into a report.Can send data outNo findings

    Why it is in this group

    • The name "create_interview" says "create": a word for a change.

    What it can reach

    • outboundThe input takes a URL (input.target_url): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    Create a user interview: AI persona participants complete tasks and answer questions against target_url, and results are synthesised into a report. target_url can be any reachable URL, including prototypes (Figma Make publish links, Claude design artifacts, v0) and preview deployments. Build the guide with add_interview_section / add_interview_item, add participants, then launch_interview.

    Annotations the server declares

    • title: Create interview
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • create_projectCreate a project (a product to track with checklists, workflows, interviews and feedback).Can send data outNo findings

    Why it is in this group

    • The name "create_project" says "create": a word for a change.

    What it can reach

    • outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    Create a project (a product to track with checklists, workflows, interviews and feedback). Call list_projects first and reuse a matching project rather than creating a duplicate.

    Annotations the server declares

    • title: Create project
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • create_workflowCreate a workflow (multi-step automation) that runs checks without anyone asking.Reads text others writeNo findings

    Why it is in this group

    • The name "create_workflow" says "create": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Create a workflow (multi-step automation) that runs checks without anyone asking. Triggers: manual, schedule (cron), webhook, or vercel_event / github_event / cursor_event / linear_event / slack_event / figma_event so checklists re-run on deploys, pull requests, or design updates. Add steps with add_workflow_step (each one is wired to the step before it). A workflow with any trigger but manual starts runs on its own, so a connection without the mcp:run scope creates it paused; activate it with toggle_workflow over a connection holding mcp:run, or from the dashboard.

    Annotations the server declares

    • title: Create workflow
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: true
  • launch_interviewLaunch an interview round (async): every participant runs the discussion guide against the target URL in a real browser, and may call the allowed tools of MCP servers attached to t…Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Launch an interview round (async): every participant runs the discussion guide against the target URL in a real browser, and may call the allowed tools of MCP servers attached to the project (list_project_mcp_servers); then a report is synthesised. Requires at least one section with items and one participant. Poll get_interview / get_interview_report for progress (runs take several minutes).

    Annotations the server declares

    • title: Launch interview
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: true
  • regenerate_interview_reportRegenerate the synthesized report from existing participant transcripts (async), e.g.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Regenerate the synthesized report from existing participant transcripts (async), e.g. after adding participants. Returns the trigger run ID; poll get_interview_report until report_status is completed or failed.

    Annotations the server declares

    • title: Regenerate interview report
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • request_index_rerunRe-score a site on the Index after it ships changes for agents: fresh probes, then about 24 agent sessions over a few minutes.Reads text others writeNo findings

    Why it is in this group

    • The name "request_index_rerun" says "request": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Re-score a site on the Index after it ships changes for agents: fresh probes, then about 24 agent sessions over a few minutes. Owner only (whoever claimed it, a work email on that domain while unclaimed, or a platform admin), once every 10 minutes. Poll list_index_sessions with the run_id about every 60 seconds, then read get_index_report.

    Annotations the server declares

    • title: Request Index re-run
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: true
  • request_index_scoreAdd a site the Stunt Double Index does not track yet and give it a first score.Reads text others writeNo findings

    Why it is in this group

    • The name "request_index_score" says "request": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Add a site the Stunt Double Index does not track yet and give it a first score. Runs light HTTP probes (robots.txt, llms.txt, structured data, sitemaps) in under a minute; include_agent_sessions also starts live agent sessions, which may queue behind a shared daily budget. The site becomes public on the leaderboard. Public domains only; robots.txt opt-outs are respected; a tracked site is not rescored (use request_index_rerun). Then read get_index_report, and poll list_index_sessions with the run_id if sessions started.

    Annotations the server declares

    • title: Request Index score
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: true
  • run_checklistRun a checklist (async): the actor drives a real browser through the product and judges each check, and may use the project's attached MCP servers (list_project_mcp_servers).Reads text others writeNo findings

    Why it is in this group

    • The name "run_checklist" says "run": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Run a checklist (async): the actor drives a real browser through the product and judges each check, and may use the project's attached MCP servers (list_project_mcp_servers). Returns a run_id; poll get_checklist_run (runs take a few minutes). Counts against the workspace's plan and budget. Results reach the actor's knowledge only with retain_memory.

    Annotations the server declares

    • title: Run checklist
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: true
  • run_workflowTrigger a workflow run now (async), whatever its trigger type: it executes the stored steps (see get_workflow), which can drive browsers, post PR comments and notify members.Reads text others writeNo findings

    Why it is in this group

    • The name "run_workflow" says "run": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Trigger a workflow run now (async), whatever its trigger type: it executes the stored steps (see get_workflow), which can drive browsers, post PR comments and notify members. Returns a run ID; poll get_workflow_run. Refused over the plan limit or budget cap.

    Annotations the server declares

    • title: Run workflow
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: true
  • summarise_feedbackSummarise a project's comments into themes ranked by severity, open questions, and a self-contained implementation brief for a coding agent.Reads text others write1 finding

    Why it is in this group

    • The name "summarise_feedback" says "summarise": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    What it can reach

    • untrusted-inputThe description's first sentence says "summarise" and "comment": it reads comments, which other people can write.

    Findings

    • Warn

      The server marks "summarise_feedback" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The name "summarise_feedback" says "summarise": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Summarise a project's comments into themes ranked by severity, open questions, and a self-contained implementation brief for a coding agent. Read the brief before proposing changes instead of reasoning over raw comments. The brief leaves out work an open question holds up; `answers` says which are answered, so ask the user the rest. Shared with the dashboard: an unchanged comment set returns the saved digest instantly.

    Annotations the server declares

    • title: Summarise comments
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
Only reads 32Show 32 read-only tools
  • get_actorGet an actor's details: description, system prompt, capabilities, and status.No findings

    Why it is in this group

    • The name "get_actor" says "get": a word for reading.
    Description, as the server wrote it
    Get an actor's details: description, system prompt, capabilities, and status. list_actor_knowledge has the knowledge it carries into runs.

    Annotations the server declares

    • title: Get actor
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_checklistGet a checklist: its target URL, instructions, run settings, every check (with the `id` update_checklist needs to edit one in place) and its 10 most recent runs.Reads text others writeNo findings

    Why it is in this group

    • The name "get_checklist" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "get" and "url": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Get a checklist: its target URL, instructions, run settings, every check (with the `id` update_checklist needs to edit one in place) and its 10 most recent runs. Call get_checklist_run with a run id for per-check results and evidence.

    Annotations the server declares

    • title: Get checklist
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_checklist_runGet a checklist run: per-check results with evidence, score, verdict and the change since the previous run.No findings

    Why it is in this group

    • The name "get_checklist_run" says "get": a word for reading.
    Description, as the server wrote it
    Get a checklist run: per-check results with evidence, score, verdict and the change since the previous run. Poll after run_checklist every 30 to 60 seconds until `status` is terminal; `outcome` is the verdict on the experience. `comparison.changes` (what got better or worse) is usually the answer worth reporting. Pass a result's `result_id` to flag_check_verdict when the user says a verdict was wrong.

    Annotations the server declares

    • title: Get checklist run
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_conversationGet an actor conversation with its full message history, oldest message first.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_conversation" says "get": a word for reading.

    What it can reach

    • private-dataThe name "get_conversation" says "get" and "conversation": it reads messages.
    • private-dataThe description's first sentence says "get" and "conversation": it reads messages.
    • untrusted-inputThe name "get_conversation" says "get" and "conversation": it reads messages, which other people can write.
    • untrusted-inputThe description's first sentence says "get" and "conversation": it reads messages, which other people can write.
    Description, as the server wrote it
    Get an actor conversation with its full message history, oldest message first. Find conversation ids with list_conversations.

    Annotations the server declares

    • title: Get conversation
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_feedbackGet one feedback widget comment with its full reply thread, its page location and version, and a signed screenshot URL when one was captured.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_feedback" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "get" and "thread": it reads messages.
    • untrusted-inputThe description's first sentence says "get" and "comment": it reads comments, which other people can write.
    Description, as the server wrote it
    Get one feedback widget comment with its full reply thread, its page location and version, and a signed screenshot URL when one was captured. Find the id with list_feedback.

    Annotations the server declares

    • title: Get comment
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_index_reportGet a site's Stunt Double Index report: how well AI agents (ChatGPT, Claude, Gemini and others) can find, understand and act on it.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_index_report" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "get" and "chat": it reads messages.
    • untrusted-inputThe description's first sentence says "get" and "chat": it reads messages, which other people can write.
    Description, as the server wrote it
    Get a site's Stunt Double Index report: how well AI agents (ChatGPT, Claude, Gemini and others) can find, understand and act on it. Returns the score out of 100, band, rank, category and provider scores, frictions, failing checks and when it was scored. A blocked or opted-out site has a null score with unscored_reason. Pass a domain, or a project_id for its linked domain. Use list_index_sessions to see why a category or provider scored low.

    Annotations the server declares

    • title: Get Index report
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_interviewGet an interview with its discussion guide (sections and their items, in order) and participants with their run status.Reads text others writeNo findings

    Why it is in this group

    • The name "get_interview" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "get" and "discussion": it reads comments, which other people can write.
    Description, as the server wrote it
    Get an interview with its discussion guide (sections and their items, in order) and participants with their run status. Also useful for polling progress after launch_interview; call get_interview_report for the synthesised findings.

    Annotations the server declares

    • title: Get interview
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_interview_participantGet an interview participant including their full transcript from the interview run.No findings

    Why it is in this group

    • The name "get_interview_participant" says "get": a word for reading.
    Description, as the server wrote it
    Get an interview participant including their full transcript from the interview run. Use this for verbatim evidence behind a report finding.

    Annotations the server declares

    • title: Get interview participant
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_interview_reportGet an interview's synthesised report (summary, themes, recommendations, per-question rollup), plus `usability` (UMUX or UMUX-Lite scores when asked).No findings

    Why it is in this group

    • The name "get_interview_report" says "get": a word for reading.
    Description, as the server wrote it
    Get an interview's synthesised report (summary, themes, recommendations, per-question rollup), plus `usability` (UMUX or UMUX-Lite scores when asked). Poll after launch_interview until report_status is completed or failed; report is null until generated.

    Annotations the server declares

    • title: Get interview report
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_meGet the account this connection is acting as: id, email, name, timezone and where notifications reach them.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_me" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "get" and "email": it reads mail.
    • untrusted-inputThe description's first sentence says "get" and "email": it reads inbound email, which other people can write.
    Description, as the server wrote it
    Get the account this connection is acting as: id, email, name, timezone and where notifications reach them. Use `timezone` when creating a scheduled workflow rather than defaulting to UTC, and `id` to tell your own runs and feedback from a teammate's in lists that carry only user ids.

    Annotations the server declares

    • title: Get current user
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_projectGet one project (the product tracked by checklists, workflows, interviews and feedback), including its URL, audience and product description.Reads text others writeNo findings

    Why it is in this group

    • The name "get_project" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "get" and "url": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Get one project (the product tracked by checklists, workflows, interviews and feedback), including its URL, audience and product description. Archived projects read as not found.

    Annotations the server declares

    • title: Get project
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_pull_requestGet details for a GitHub pull request (title, description, author, branches, change stats) via the workspace GitHub connection.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_pull_request" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "get" and "branch": it reads repositories.
    • private-dataThe input names a repo (input.repo), and the tool reads: it reads repositories.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe name "get_pull_request" says "get" and "pull request": it reads issues, which other people can write.
    • untrusted-inputThe description's first sentence says "get" and "pull request": it reads issues, which other people can write.
    Description, as the server wrote it
    Get details for a GitHub pull request (title, description, author, branches, change stats) via the workspace GitHub connection. Read it before writing a checklist for the change, then report back with comment_on_pr.

    Annotations the server declares

    • title: Get pull request
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_workflowGet a workflow with its steps, the edges connecting them, the order a run would reach them, and recent runs.No findings

    Why it is in this group

    • The name "get_workflow" says "get": a word for reading.
    Description, as the server wrote it
    Get a workflow with its steps, the edges connecting them, the order a run would reach them, and recent runs. Read this before editing steps: `execution_order` is what actually runs, and any id in `unreachable_step_ids` is a step no run will ever reach.

    Annotations the server declares

    • title: Get workflow
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_workflow_runGet a workflow run with step-level details.No findings

    Why it is in this group

    • The name "get_workflow_run" says "get": a word for reading.
    Description, as the server wrote it
    Get a workflow run with step-level details. Poll this after run_workflow until status is terminal (completed, failed or cancelled).

    Annotations the server declares

    • title: Get workflow run
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_workspaceGet workspace details by ID or slug, including the admin-set controls that decide what runs in it may do.No findings

    Why it is in this group

    • The name "get_workspace" says "get": a word for reading.
    Description, as the server wrote it
    Get workspace details by ID or slug, including the admin-set controls that decide what runs in it may do. `settings` is a ceiling, never a grant: a network policy there applies on top of each worker's own, and a feature switched off there cannot be switched back on per project.

    Annotations the server declares

    • title: Get workspace
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_actor_knowledgeList what an actor knows, oldest first.No findings

    Why it is in this group

    • The name "list_actor_knowledge" says "list": a word for reading.
    Description, as the server wrote it
    List what an actor knows, oldest first. Each entry has a kind: expertise and process entries are listed by title in every run and the actor reads one when the task calls for it; reference and account entries are found by search. Check here before add_actor_knowledge to avoid duplicates; pass an entry id to remove_actor_knowledge.

    Annotations the server declares

    • title: List actor knowledge
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_actorsList active actors (persistent AI user personas) in a workspace, oldest first.No findings

    Why it is in this group

    • The name "list_actors" says "list": a word for reading.
    Description, as the server wrote it
    List active actors (persistent AI user personas) in a workspace, oldest first. Prefer reusing an existing actor over creating a new one; pass an id from here to get_actor, interviews and checklists.

    Annotations the server declares

    • title: List actors
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_checklistsList the checklists in a workspace, with their target URL, actor, check count and a recent run.Reads text others writeNo findings

    Why it is in this group

    • The name "list_checklists" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "list" and "url": it reads web pages, which anyone can write.
    Description, as the server wrote it
    List the checklists in a workspace, with their target URL, actor, check count and a recent run. Check here before creating a new checklist: re-running an existing one keeps its history as a regression signal. Use get_checklist for the checks themselves.

    Annotations the server declares

    • title: List checklists
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_conversationsList chat conversations with actors in a workspace, most recently active first, optionally filtered to one actor.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "list_conversations" says "list": a word for reading.

    What it can reach

    • private-dataThe name "list_conversations" says "list" and "conversation": it reads messages.
    • private-dataThe description's first sentence says "list" and "chat": it reads messages.
    • untrusted-inputThe name "list_conversations" says "list" and "conversation": it reads messages, which other people can write.
    • untrusted-inputThe description's first sentence says "list" and "chat": it reads messages, which other people can write.
    Description, as the server wrote it
    List chat conversations with actors in a workspace, most recently active first, optionally filtered to one actor. Excludes the workspace assistant's conversations. Pass an id to get_conversation to read the messages.

    Annotations the server declares

    • title: List conversations
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_feedbackList the comments stakeholders and users have left on a project through the feedback widget, newest first.Reads text others writeNo findings

    Why it is in this group

    • The name "list_feedback" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "list" and "comment": it reads comments, which other people can write.
    Description, as the server wrote it
    List the comments stakeholders and users have left on a project through the feedback widget, newest first. Each one is pinned to a page position (often to a named element) and carries device info; filter by status "new" when triaging. Use summarise_feedback to turn a list of these into themes and an implementation brief, and get_feedback for one comment's replies and screenshot.

    Annotations the server declares

    • title: List comments
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_index_sessionsList the agent sessions behind a site's Index score: one AI provider attempting one benchmark task in a real browser, with status, score, rubric evidence, a summary and the frictio…Reads text others writeNo findings

    Why it is in this group

    • The name "list_index_sessions" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "list" and "browser": it reads web pages, which anyone can write.
    Description, as the server wrote it
    List the agent sessions behind a site's Index score: one AI provider attempting one benchmark task in a real browser, with status, score, rubric evidence, a summary and the frictions it hit. Defaults to the latest run (pass run_id for another); filter by provider or category. Use it to explain a low score.

    Annotations the server declares

    • title: List Index sessions
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_interviewsList the user interviews in a workspace, newest first, optionally filtered to one project.No findings

    Why it is in this group

    • The name "list_interviews" says "list": a word for reading.
    Description, as the server wrote it
    List the user interviews in a workspace, newest first, optionally filtered to one project. Returns summary rows; call get_interview for the discussion guide and participants, or get_interview_report for the findings.

    Annotations the server declares

    • title: List interviews
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_project_guidelinesList the standing rules this project is held to: the workspace library rules it has attached.No findings

    Why it is in this group

    • The name "list_project_guidelines" says "list": a word for reading.
    Description, as the server wrote it
    List the standing rules this project is held to: the workspace library rules it has attached. Read these before writing checks, interview guides or design feedback for the project, and assert them as observable checks rather than restating them. `attachment_id` is this project's copy of the rule; `id` is the library rule shared with every other project holding it.

    Annotations the server declares

    • title: List project guidelines
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_project_mcp_serversList the third-party MCP servers attached to a project and the tools each allows.No findings

    Why it is in this group

    • The name "list_project_mcp_servers" says "list": a word for reading.
    Description, as the server wrote it
    List the third-party MCP servers attached to a project and the tools each allows. Configuration only: those tools are not callable here, but an actor in a run (checklist, interview, workflow) may call the allowed tools of servers whose in_force is true. Servers are registered and attached by workspace admins in the dashboard.

    Annotations the server declares

    • title: List project MCP servers
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_projectsList the live projects in a workspace, most recently opened first.No findings

    Why it is in this group

    • The name "list_projects" says "list": a word for reading.
    Description, as the server wrote it
    List the live projects in a workspace, most recently opened first. Call this after list_workspaces and match a target URL or product name against these before creating anything new.

    Annotations the server declares

    • title: List projects
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_pull_requestsList pull requests for a GitHub repository via the workspace GitHub connection, most recently created first (up to 30).Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "list_pull_requests" says "list": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "list" and "repository": it reads repositories.
    • private-dataThe input names a repo (input.repo), and the tool reads: it reads repositories.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe name "list_pull_requests" says "list" and "pull request": it reads issues, which other people can write.
    • untrusted-inputThe description's first sentence says "list" and "pull request": it reads issues, which other people can write.
    Description, as the server wrote it
    List pull requests for a GitHub repository via the workspace GitHub connection, most recently created first (up to 30). Use it to find the PR number to pass to get_pull_request or comment_on_pr.

    Annotations the server declares

    • title: List pull requests
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • list_workflowsList workflows (multi-step automations) in a workspace, newest first, with their triggers, whether each is active, its step count and its last run.No findings

    Why it is in this group

    • The name "list_workflows" says "list": a word for reading.
    Description, as the server wrote it
    List workflows (multi-step automations) in a workspace, newest first, with their triggers, whether each is active, its step count and its last run. Call get_workflow on one for its steps and the order a run takes them.

    Annotations the server declares

    • title: List workflows
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_workspace_guidelinesList the workspace's whole library of standing rules (design system, tone of voice, brand, compliance, accessibility, shared knowledge), with how many projects hold each one.No findings

    Why it is in this group

    • The name "list_workspace_guidelines" says "list": a word for reading.
    Description, as the server wrote it
    List the workspace's whole library of standing rules (design system, tone of voice, brand, compliance, accessibility, shared knowledge), with how many projects hold each one. Read this before writing a rule: attaching one that already exists with `set_project_guideline` beats typing a second copy of it.

    Annotations the server declares

    • title: List workspace guidelines
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_workspace_membersList the members of a workspace with their role, name and join date.No findings

    Why it is in this group

    • The name "list_workspace_members" says "list": a word for reading.
    Description, as the server wrote it
    List the members of a workspace with their role, name and join date. Use it to resolve the user ids that runs, feedback and assignments carry.

    Annotations the server declares

    • title: List workspace members
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_workspacesList the workspaces you belong to, with your role in each.1 finding

    Why it is in this group

    • The name "list_workspaces" says "list": a word for reading.

    Findings

    • Warn

      The description contains "every other tool", wording about other tools or servers.

      Matched text

      description: "...r role in each. Call this first: almost every other tool needs a workspace_id from here."

      What this check looks for
    Description, as the server wrote it
    List the workspaces you belong to, with your role in each. Call this first: almost every other tool needs a workspace_id from here.

    Annotations the server declares

    • title: List workspaces
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • search_index_domainsSearch the Stunt Double Index for sites by domain or name, or browse the leaderboard.Reads text others writeNo findings

    Why it is in this group

    • The name "search_index_domains" says "search": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "browse": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Search the Stunt Double Index for sites by domain or name, or browse the leaderboard. Results are ordered by overall score, highest first, with rank, sector and when each was last scored; sites the Index could not score come last with a null score and an unscored_reason. Omit query to read the top of the leaderboard; add sector to compare a site against its peers. Follow up with get_index_report for the full breakdown of any result.

    Annotations the server declares

    • title: Search Index domains
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

624 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 3 outbound tools breaks every one.

Reads private data8
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write26
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out3
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
deny to break every path
{
  "permissions": {
    "deny": [
      "mcp__stuntdouble__create_checklist",
      "mcp__stuntdouble__create_interview",
      "mcp__stuntdouble__create_project"
    ]
  }
}

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Remote posture

What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.

Sign-in required, OAuth metadata published

Looked at Oct 29, 2026, 22:11 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.

Reachable
yes
HTTP status of an anonymous initialize
401
tools/list served without credentials
no
Tools that change things, listed without credentials
0
Protocol version
not observed
WWW-Authenticate on 401
yes
resource_metadata in WWW-Authenticate
https://app.stuntdouble.io/.well-known/oauth-protected-resource/api/mcp
RFC 9728 protected resource metadata
https://app.stuntdouble.io/.well-known/oauth-protected-resource/api/mcp
Authorization servers
https://app.stuntdouble.io
Legacy HTTP+SSE transport
no
Dynamic client registration
yes
Client ID metadata documents
no

Findings

Matches of fixed checks, with the text they matched.

2 warn1 info
  • The description contains "every other tool", wording about other tools or servers.

    Matched text

    description: "...r role in each. Call this first: almost every other tool needs a workspace_id from here."

    What this check looks for
  • The server marks "summarise_feedback" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The name "summarise_feedback" says "summarise": a word for reading.

    What this check looks for
  • The input schema at properties.carry_over_notes.description mentions "credentials".

    Matched text

    inputSchema.properties.carry_over_notes.description: "...t behind. Notes never carry verdicts or credentials. On by default; turn it off when the pr..."

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 1.16.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http stuntdouble https://app.stuntdouble.io/api/mcp
claude mcp add --transport http stuntdouble https://app.stuntdouble.io/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__stuntdouble__get_me",
      "mcp__stuntdouble__list_workspaces",
      "mcp__stuntdouble__get_workspace",
      "mcp__stuntdouble__list_workspace_members",
      "mcp__stuntdouble__search",
      "mcp__stuntdouble__list_projects",
      "mcp__stuntdouble__get_project",
      "mcp__stuntdouble__list_project_mcp_servers",
      "mcp__stuntdouble__list_workspace_guidelines",
      "mcp__stuntdouble__list_project_guidelines",
      "mcp__stuntdouble__list_actors",
      "mcp__stuntdouble__get_actor",
      "mcp__stuntdouble__list_actor_knowledge",
      "mcp__stuntdouble__list_conversations",
      "mcp__stuntdouble__get_conversation",
      "mcp__stuntdouble__list_checklists",
      "mcp__stuntdouble__get_checklist",
      "mcp__stuntdouble__get_checklist_run",
      "mcp__stuntdouble__list_feedback",
      "mcp__stuntdouble__get_feedback",
      "mcp__stuntdouble__list_workflows",
      "mcp__stuntdouble__get_workflow",
      "mcp__stuntdouble__get_workflow_run",
      "mcp__stuntdouble__list_pull_requests",
      "mcp__stuntdouble__get_pull_request",
      "mcp__stuntdouble__list_interviews",
      "mcp__stuntdouble__get_interview",
      "mcp__stuntdouble__get_interview_participant",
      "mcp__stuntdouble__get_interview_report",
      "mcp__stuntdouble__get_index_report",
      "mcp__stuntdouble__list_index_sessions",
      "mcp__stuntdouble__search_index_domains"
    ],
    "ask": [
      "mcp__stuntdouble__create_project",
      "mcp__stuntdouble__add_workspace_guideline",
      "mcp__stuntdouble__add_project_guideline",
      "mcp__stuntdouble__create_actor",
      "mcp__stuntdouble__add_actor_knowledge",
      "mcp__stuntdouble__run_checklist",
      "mcp__stuntdouble__create_checklist",
      "mcp__stuntdouble__summarise_feedback",
      "mcp__stuntdouble__run_workflow",
      "mcp__stuntdouble__create_workflow",
      "mcp__stuntdouble__add_workflow_step",
      "mcp__stuntdouble__comment_on_pr",
      "mcp__stuntdouble__create_interview",
      "mcp__stuntdouble__add_interview_section",
      "mcp__stuntdouble__add_interview_item",
      "mcp__stuntdouble__add_interview_participant",
      "mcp__stuntdouble__launch_interview",
      "mcp__stuntdouble__regenerate_interview_report",
      "mcp__stuntdouble__request_index_rerun",
      "mcp__stuntdouble__request_index_score"
    ],
    "deny": [
      "mcp__stuntdouble__update_workspace_guideline",
      "mcp__stuntdouble__remove_workspace_guideline",
      "mcp__stuntdouble__set_project_guideline",
      "mcp__stuntdouble__update_actor",
      "mcp__stuntdouble__remove_actor_knowledge",
      "mcp__stuntdouble__flag_check_verdict",
      "mcp__stuntdouble__update_checklist",
      "mcp__stuntdouble__delete_checklist",
      "mcp__stuntdouble__update_feedback_status",
      "mcp__stuntdouble__update_workflow",
      "mcp__stuntdouble__toggle_workflow",
      "mcp__stuntdouble__delete_workflow",
      "mcp__stuntdouble__update_workflow_step",
      "mcp__stuntdouble__remove_workflow_step",
      "mcp__stuntdouble__reorder_workflow_steps",
      "mcp__stuntdouble__connect_workflow_steps",
      "mcp__stuntdouble__update_interview"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as stuntdouble. Review it before you use it.

Capability tags behind 29 rules
  • mcp__stuntdouble__get_me private-data, untrusted-input
  • mcp__stuntdouble__search private-data, untrusted-input
  • mcp__stuntdouble__get_project untrusted-input
  • mcp__stuntdouble__create_project outbound
  • mcp__stuntdouble__list_conversations private-data, untrusted-input
  • mcp__stuntdouble__get_conversation private-data, untrusted-input
  • mcp__stuntdouble__list_checklists untrusted-input
  • mcp__stuntdouble__get_checklist untrusted-input
  • mcp__stuntdouble__run_checklist untrusted-input
  • mcp__stuntdouble__create_checklist outbound
  • mcp__stuntdouble__list_feedback untrusted-input
  • mcp__stuntdouble__get_feedback private-data, untrusted-input
  • mcp__stuntdouble__summarise_feedback untrusted-input
  • mcp__stuntdouble__run_workflow untrusted-input
  • mcp__stuntdouble__create_workflow untrusted-input
  • mcp__stuntdouble__update_workflow untrusted-input
  • mcp__stuntdouble__toggle_workflow untrusted-input
  • mcp__stuntdouble__delete_workflow untrusted-input
  • mcp__stuntdouble__comment_on_pr untrusted-input
  • mcp__stuntdouble__list_pull_requests private-data, untrusted-input
  • mcp__stuntdouble__get_pull_request private-data, untrusted-input
  • mcp__stuntdouble__get_interview untrusted-input
  • mcp__stuntdouble__create_interview outbound
  • mcp__stuntdouble__launch_interview untrusted-input
  • mcp__stuntdouble__get_index_report private-data, untrusted-input
  • mcp__stuntdouble__list_index_sessions untrusted-input
  • mcp__stuntdouble__search_index_domains untrusted-input
  • mcp__stuntdouble__request_index_rerun untrusted-input
  • mcp__stuntdouble__request_index_score untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/io.stuntdouble/mcp-server/verify?hash=d5593273ec0ae089c8e4c9e1ec122b50d10d5e8a0085edbfa55a5517d5cdce68" | jq -e '.changed == false'

Pinned hash d5593273ec0a, from Nov 3, 2026, 15:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.stuntdouble/mcp-server/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.stuntdouble/mcp-server
[![anlyon.dev](https://anlyon.dev/badge/io.stuntdouble/mcp-server.svg)](https://anlyon.dev/servers/io.stuntdouble/mcp-server)

Source: MCP Registry · repository. Synced Nov 3, 2026, 15:18 UTC.