Stunt Double
Personas de usuário de IA testam seu produto, protótipos e prévias em um navegador real e retornam evidências em capturas de tela.
Servidor MCP hospedado
npx add-mcp 'https://app.stuntdouble.io/api/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
Servidor MCP Stunt Double
Implante personas de usuários de IA para validar jornadas de usuário em escala. Encontre atritos de UX antes que usuários reais os encontrem.
Stunt Double implanta agentes de IA com personas de usuários realistas para validar jornadas de usuário em escala. Crie atores, execute fluxos de trabalho automatizados e checklists em qualquer aplicativo web, e revele pontos de atrito antes que usuários reais os encontrem. Integra-se com Claude, Linear, GitHub e Slack.
Este repositório
Este repositório contém configuração de plugin e MCP (.claude-plugin/plugin.json e .mcp.json para Claude, .cursor-plugin/plugin.json e mcp.json raiz para Cursor, server.json para o registro MCP), além de skills, agentes e regras do Cursor. Não há package.json e nenhum servidor executável aqui: o endpoint MCP está hospedado em https://app.stuntdouble.io/api/mcp a partir do código principal do Stunt Double. Consulte CONTRIBUTING.md para saber como validar edições e evitar confundir esta pasta com um pacote Node.
Início Rápido
Claude Code
claude mcp add --transport http stuntdouble https://app.stuntdouble.io/api/mcp
Plugin Claude Code
O repositório também é um plugin Claude: ele agrupa o servidor MCP hospedado (.mcp.json) com as skills em skills/ e os agentes em agents/.
claude plugin marketplace add stunt-double/stuntdouble-mcp
claude plugin install stuntdouble@stuntdouble
Skills (qualquer agente)
As skills em skills/ são instaladas no Claude Code, Cursor, Codex, OpenCode e outros agentes que leem arquivos SKILL.md, usando a CLI de skills. Elas acionam o servidor MCP acima, então conecte-o também.
npx skills add stunt-double/stuntdouble-mcp # pick from the list
npx skills add stunt-double/stuntdouble-mcp --skill verify-change # just one
| Skill | O que faz |
|---|---|
check-agent-readiness | Verifica quão bem agentes de IA (ChatGPT, Claude, Gemini, Perplexity e outros) conseguem encontrar, entender e agir em um site usando o Índice Stunt Double, explica a pontuação a partir de sessões reais de agentes, compara com concorrentes e reavalia após correções |
check-brand | Audita um produto ou site em relação às diretrizes de marca e tom de voz |
check-compliance | Verifica um produto em relação a requisitos legais e de conformidade no Stunt Double (consentimento de cookies, acesso a privacidade e termos, divulgações obrigatórias, comprovação de alegações, fluxos de cancelamento) e coleta evidências para revisão jurídica |
check-continuity | Verifica continuidade entre superfícies no Stunt Double |
check-design-system | Audita um produto ao vivo em relação ao seu design system no Stunt Double |
create-actor-panel | Cria e configura um ator Stunt Double (persona de IA) com entradas de conhecimento para simulação realista de usuário |
design-review | Executa uma sessão de revisão de design coletando feedback de múltiplos atores Stunt Double sobre um design ou fluxo proposto |
maintain-automations | Altera uma automação ou checklist Stunt Double existente sem perder o histórico de execuções: reprograma gatilhos, edita e reconecta etapas do fluxo de trabalho, cria ramificações condicionais, atualiza verificações no local e pausa ou aposenta o que não é mais necessário |
run-qa-suite | Executa a suíte completa de QA do Stunt Double |
run-user-interview | Planeja, configura e lança uma entrevista de usuário estruturada com participantes de IA no Stunt Double e, em seguida, lê o relatório sintetizado |
run-ux-validation | Valida uma jornada de usuário executando fluxos de trabalho ou checklists do Stunt Double e relatando os resultados |
setup-guardrails | Estabelece salvaguardas contínuas no Stunt Double |
triage-feedback | Revisa, categoriza e gerencia envios de feedback do Stunt Double entre projetos |
verify-change | Verifica uma alteração de código publicada ou em pré-visualização executando um ator Stunt Double pelos fluxos de usuário afetados e, opcionalmente, relata os resultados no pull request |
Claude (web, Desktop, mobile)
Vá para Configurações → Conectores → Adicionar conector personalizado e cole:
https://app.stuntdouble.io/api/mcp
Cursor / Windsurf
Adicione o bloco mcpServers abaixo a um arquivo de configuração MCP:
- Local ao projeto (recomendado para este clone do repositório):
.cursor/mcp.jsonna raiz do seu projeto. - Global (todos os projetos):
~/.cursor/mcp.jsonno macOS/Linux (consulte a documentação MCP do Cursor para seu sistema operacional).
{
"mcpServers": {
"stuntdouble": {
"url": "https://app.stuntdouble.io/api/mcp"
}
}
}
Use apenas url para servidores remotos (Streamable HTTP é negociado automaticamente). Chaves extras como "type": "streamable-http" não fazem parte da estrutura mcp.json documentada do Cursor e podem quebrar a validação do plugin.
Marketplace do Cursor (instalação em um clique) espera um layout de plugin: .cursor-plugin/plugin.json mais mcp.json raiz. Esses arquivos estão neste repositório. O caminho do plugin logo é assets/logo.png (incluído neste repositório). O arquivo server.json é o manifesto separado do registro MCP para mcp-publisher e listagens de diretórios; o instalador do Cursor não o utiliza.
Autenticação
A autenticação é tratada automaticamente via OAuth 2.1 com PKCE. Na primeira vez que seu cliente de IA se conectar, uma janela do navegador será aberta para você entrar e autorizar o acesso à sua conta Stunt Double. Nenhuma chave de API ou token é necessária.
Para Cursor, o URI de redirecionamento OAuth é fixado em cursor://anysphere.cursor-mcp/oauth/callback (documentação).
O que uma conexão pode acessar
O servidor age como você, nunca além disso. Cada ferramenta resolve o workspace sobre o qual está sendo consultada e verifica sua associação a ele antes de fazer qualquer coisa, então uma conexão alcança exatamente os workspaces que list_workspaces retorna para você, e um workspace arquivado não alcança nada. Um workspace do qual você não é membro responde da mesma forma que um que não existe: "não encontrado".
Isso vale também para ids, não apenas para o workspace_id que você passa. Uma ferramenta que recebe o id de outro objeto (um checklist para uma etapa de automação, um ator para um participante de entrevista) verifica se esse objeto pertence ao mesmo workspace antes de armazená-lo ou executá-lo e recusa com "não encontrado neste workspace" caso contrário. As recusas nunca dizem a qual workspace um id pertence.
Os escopos restringem ainda mais, nunca ampliam. A tela de consentimento nomeia o que a conexão solicitou, e um token concedido com mcp:read não recebe as ferramentas de escrita ou execução: elas estão ausentes de tools/list em vez de presentes e falhando.
| Escopo | O que permite |
|---|---|
mcp:read | Ler seus workspaces e seus conteúdos |
mcp:write | Criar e editar conteúdo em seus workspaces |
mcp:run | Iniciar execuções de checklist, execuções de automação e entrevistas, que consomem a cota de execução do workspace, e reexecutar pontuações do Índice Stunt Double para domínios que você possui |
Ferramentas Disponíveis
Conta
| Ferramenta | Descrição |
|---|---|
get_me | A conta pela qual esta conexão age: id, email, nome, fuso horário, canal de notificação |
Canal de notificação e fuso horário são configurações da conta, não do workspace, então
são a mesma resposta em todos os workspaces. Passe o timezone ao criar um
fluxo de trabalho agendado, ou "todos os dias úteis às 9" vira nove em UTC.
Workspaces
| Ferramenta | Descrição |
|---|---|
list_workspaces | Lista seus workspaces |
get_workspace | Obtém detalhes do workspace por ID ou slug, incluindo os controles definidos pelo administrador (settings) |
list_workspace_members | Lista membros de um workspace |
get_workspace relata os controles de segurança do workspace sob settings: compartilhamento
público, o widget de feedback, workers auto-hospedados e a política de rede. Eles são
limites definidos por um administrador, então um recurso desativado lá não pode ser reativado para um
único projeto.
Busca
| Ferramenta | Descrição |
|---|---|
search | Busca em um workspace entre projetos, atores, checklists, entrevistas, automações, problemas, metas, feedback, conhecimento de atores, insights, revisões de design, recursos de projeto e conversas. Classificada, com filtros opcionais |
search recebe um workspace_id além de um query opcional, filtro types, filtro project_id
e limit (máx. 50). Os termos são correspondidos como prefixos, então uma palavra parcial é suficiente.
Omita query para navegar pelos itens mais recentemente atualizados. Os resultados trazem o id que você precisa
para o getter correspondente, então geralmente é mais barato do que listar um tipo de entidade e
filtrar a lista você mesmo. Recorra a ela antes de criar qualquer coisa, para encontrar o ator ou
checklist que já cobre o trabalho.
Projetos
| Ferramenta | Descrição |
|---|---|
list_projects | Listar projetos em um workspace |
get_project | Obter um projeto (o produto acompanhado por checklists, workflows, feedback) |
create_project | Criar um projeto (um produto para acompanhar com checklists, workflows, feedback) |
list_project_mcp_servers | Os servidores MCP que as execuções deste projeto podem alcançar |
Um projeto é arquivado, nunca excluído, e um projeto arquivado aparece como ausente em
todas as ferramentas aqui. Registrar um servidor MCP e anexá-lo a um projeto são
ações de administrador do workspace no painel; list_project_mcp_servers é como você verifica
quais ferramentas uma execução realmente terá antes de escrever um checklist que depende de uma.
Diretrizes
Regras permanentes que o time mantém para o produto: sistema de design, tom de voz, marca, conteúdo, acessibilidade, conformidade, segurança, desempenho ou conhecimento compartilhado. Uma diretriz pertence ao workspace e é anexada aos projetos aos quais se aplica, então uma regra pode valer para todos os projetos sem ser reescrita. O que estiver em vigor é renderizado em cada execução de checklist, revisão de design, entrevista e triagem para aquele projeto.
| Ferramenta | Descrição |
|---|---|
list_workspace_guidelines | A biblioteca do workspace, com quantos projetos possuem cada regra |
add_workspace_guideline | Adicionar uma regra à biblioteca, opcionalmente anexando-a a projetos |
update_workspace_guideline | Editar uma regra, desativá-la ou aplicá-la a toda revisão de design no workspace |
remove_workspace_guideline | Remover uma regra da biblioteca, desanexando-a de todos os projetos |
list_project_guidelines | As regras às quais este projeto está sujeito |
add_project_guideline | Registrar uma regra e manter este projeto sujeito a ela |
set_project_guideline | Anexar uma regra da biblioteca a um projeto, desanexá-la ou desativá-la lá |
Dois interruptores decidem se uma regra está em vigor para um projeto: o enabled da biblioteca
e o do anexo. list_project_guidelines os combina em um único enabled para que você
nunca precise raciocinar sobre ambos. Uma regra com apply_to_design_reviews definido também vale para
revisões de design levantadas do Slack ou Linear, que não carregam um projeto para anexá-la.
Codifique um padrão como diretriz em vez de repeti-lo em cada checklist, e pesquise a biblioteca antes de escrever uma nova regra: anexar a que já existe mantém o padrão do time em um único lugar para editar.
Atores
| Ferramenta | Descrição |
|---|---|
list_actors | Listar atores ativos em um workspace |
get_actor | Obter detalhes do ator, incluindo prompt de sistema e capacidades |
create_actor | Criar um novo ator em um workspace |
update_actor | Atualizar nome, descrição, prompt de sistema, capacidades ou status do ator. Defina status como "arquivado" para exclusão suave |
Conhecimento
| Ferramenta | Descrição |
|---|---|
list_actor_knowledge | Listar entradas de conhecimento para um ator |
add_actor_knowledge | Adicionar uma entrada de conhecimento a um ator |
remove_actor_knowledge | Remover uma entrada de conhecimento |
Conversas
| Ferramenta | Descrição |
|---|---|
list_conversations | Listar conversas, opcionalmente filtradas por ator |
get_conversation | Obter uma conversa com suas mensagens |
Checklists
| Ferramenta | Descrição |
|---|---|
list_checklists | Listar checklists em um workspace |
get_checklist | Obter detalhes do checklist, verificações e execuções recentes |
get_checklist_run | Obter uma execução de checklist com resultados por verificação |
run_checklist | Acionar uma execução de checklist (assíncrono). Retorna o ID da execução |
create_checklist | Criar um checklist de QA baseado em navegador (hospedar via projeto ou URL, ator, instruções, verificações) |
update_checklist | Atualizar um checklist (passe checks para substituir o conjunto completo) |
delete_checklist | Excluir um checklist e suas verificações e execuções |
Workflows
Um workflow é um grafo, não uma lista: suas etapas são executadas seguindo as conexões entre elas. As ferramentas de etapa mantêm essas conexões, então adicionar, remover e reordenar etapas é suficiente para construir um. connect_workflow_steps só é necessário para ramificar.
| Ferramenta | Descrição |
|---|---|
list_workflows | Listar workflows em um workspace |
get_workflow | Obter um workflow com suas etapas, arestas, a ordem de execução e execuções recentes |
run_workflow | Acionar uma execução de workflow (assíncrono). Retorna o ID da execução |
get_workflow_run | Obter uma execução de workflow com detalhes por etapa |
create_workflow | Criar um workflow (automação de múltiplas etapas) |
update_workflow | Atualizar nome, descrição ou gatilho de um workflow |
toggle_workflow | Ativar ou pausar um workflow |
delete_workflow | Excluir um workflow e suas etapas e execuções |
add_workflow_step | Adicionar uma etapa e conectá-la à execução |
update_workflow_step | Alterar o tipo ou a configuração de uma etapa no local |
remove_workflow_step | Remover uma etapa e fechar a lacuna que ela deixa |
reorder_workflow_steps | Definir a ordem em que as etapas são executadas |
connect_workflow_steps | Conectar uma etapa a outra, para os caminhos Verdadeiro e Falso de uma condição |
Feedback
| Ferramenta | Descrição |
|---|---|
list_feedback | Listar feedback para um projeto, mais recente primeiro |
get_feedback | Obter um envio de feedback com suas respostas |
update_feedback_status | Atualizar o status do feedback |
GitHub
| Ferramenta | Descrição |
|---|---|
list_pull_requests | Listar pull requests para um repositório GitHub |
get_pull_request | Obter detalhes de um pull request do GitHub (título, autor, branches, estatísticas) |
comment_on_pr | Postar um comentário em um pull request do GitHub |
Entrevistas
Entrevistas estruturadas com usuários: atores ou personas geradas passam por um guia de discussão (seções + perguntas/tarefas) contra uma URL alvo, e então o Stunt Double sintetiza temas e recomendações.
| Ferramenta | Descrição |
|---|---|
list_interviews | Listar entrevistas em um workspace, opcionalmente filtradas por projeto |
get_interview | Obter uma entrevista com seu guia de discussão (seções + itens) e participantes |
create_interview | Criar uma nova entrevista em um projeto (nome, URL alvo, resumo de pesquisa) |
update_interview | Atualizar nome, URL alvo, resumo de pesquisa ou status de uma entrevista |
add_interview_section | Adicionar uma seção ao guia de discussão |
add_interview_item | Adicionar uma pergunta ou tarefa a uma seção |
add_interview_participant | Anexar um participante, seja um ator existente ou um persona_spec ad hoc |
get_interview_participant | Obter um participante, incluindo sua transcrição completa da execução |
get_interview_report | Obter o relatório sintetizado atual (resumo, temas, recomendações, consolidação por pergunta) |
launch_interview | Lançar a rodada de entrevistas (assíncrono). Retorna o ID da execução do gatilho |
regenerate_interview_report | Reexecutar a síntese em transcrições existentes (assíncrono). Retorna o ID da execução do gatilho |
Prompts
A maioria dos clientes MCP (Claude, Claude Code, Cursor) exibe esses como comandos de barra. Cada um é uma receita autônoma: quais ferramentas chamar, em que ordem e como relatar de volta.
| Prompt | Descrição |
|---|---|
validate_design | Validar um design, protótipo ou URL de pré-visualização ao vivo (Figma Make, artefato Claude, v0, staging) com personas de IA |
verify_change | Verificar uma alteração de código publicada ou pré-visualizada executando um ator pelos fluxos afetados, opcionalmente comentando no PR |
run_user_research | Executar um estudo de entrevista estruturado com múltiplas personas e sintetizar temas e recomendações |
triage_feedback | Triar feedback de usuários em um projeto: agrupar, reproduzir problemas com um ator e atualizar status |
setup_guardrails | Criar checklists para fluxos críticos além de um workflow que os reexecuta em um agendamento ou em eventos de deploy/PR |
check_brand | Auditar um produto em relação às diretrizes de marca e tom de voz, sinalizando desvios com evidências |
check_design_system | Auditar um produto ao vivo em relação ao seu design system (tipografia, cor, espaçamento, componentes) em páginas renderizadas |
check_compliance | Verificar um produto em relação a requisitos legais e de conformidade e coletar evidências para revisão jurídica |
check_continuity | Verificar continuidade entre superfícies (preços, terminologia, promessas) entre marketing, produto, documentação e e-mails |
stuntdouble_guide | Orientação sobre o Stunt Double: o que faz, quando usar e o catálogo completo de ferramentas |
Recursos
Contexto somente leitura que um cliente pode anexar sem chamar uma ferramenta. O guia e a conexão estão sempre listados; os recursos do workspace precisam de mcp:read, o mesmo que as ferramentas que retornam esses dados.
| URI | Tipo MIME | Descrição |
|---|---|---|
stuntdouble://guide | text/markdown | O que o Stunt Double faz, quando usar, o catálogo completo de ferramentas e como consultar uma execução |
stuntdouble://connection | application/json | Quem a conexão representa, os escopos que possui, as ferramentas que cada um desbloqueia e quais faltam |
stuntdouble://workspaces | application/json | Os workspaces que a conexão pode acessar, com seu papel (mesmos dados de list_workspaces) |
stuntdouble://workspaces/{workspace_id}/projects | application/json | Os projetos ativos em um workspace, mais recentemente abertos primeiro (mesmos dados de list_projects) |
resources/list inclui uma entrada de projetos por workspace, para que um cliente possa navegar por eles sem expandir o template.
Índice Stunt Double
O Índice Stunt Double é um ranking público de como agentes de IA experienciam sites: cada domínio rastreado recebe uma pontuação de 0 a 100 a partir de sondas HTTP e sessões de agentes ao vivo, uma por provedor de IA e tarefa de benchmark. Os dados do índice são públicos, não dados de workspace, então as ferramentas de leitura alcançam qualquer site rastreado.
| Ferramenta | Descrição |
|---|---|
get_index_report | A pontuação de um site, faixa, classificação, categoria e pontuações por provedor, fricções, verificações de sonda com falha e quando foi pontuado pela última vez |
list_index_sessions | As sessões de agente por trás de uma pontuação (execução mais recente por padrão), com status, pontuação, evidências, um resumo e fricções. Filtrar por provedor ou categoria |
search_index_domains | Encontrar um site por domínio ou nome, ou navegar pelo ranking, opcionalmente por setor |
request_index_rerun | Re-pontuar um domínio que você possui (mcp:run). Sondas novas agora, cerca de 24 sessões de agente em alguns minutos. Uma vez a cada 10 minutos |
get_index_report, list_index_sessions e request_index_rerun aceitam um domain, ou um project_id para usar o domínio do Índice vinculado àquele projeto (que verifica sua associação como qualquer leitura de projeto). Somente o proprietário do domínio pode reexecutá-lo: um administrador da plataforma, a pessoa que o reivindicou ou, enquanto não reivindicado, alguém conectado com um e-mail de trabalho nesse domínio exato. Após uma reexecução, consulte list_index_sessions com o run_id retornado até que as sessões terminem, depois leia get_index_report.
(convidar/remover membros) está disponível no painel web.
Exemplos de prompts
Quatro prompts que exercitam o núcleo do servidor uma vez conectado:
- Verificar um fluxo: "Crie um checklist que cadastre uma nova conta em https://demo-checkout-stunt-double.vercel.app,, adicione um item ao carrinho e chegue ao pagamento, depois execute e me diga quais verificações falharam."
- Executar uma entrevista de usuário: "Configure uma entrevista com três personas (um comprador de primeira viagem, um cliente recorrente e um usuário de leitor de tela) sobre nossa página de preços, inicie e resuma o relatório."
- Verificar prontidão de agente: "Quão bem agentes de IA podem usar stripe.com de acordo com o Índice Stunt Double, e quais categorias estão puxando a pontuação para baixo?"
- Triar feedback: "Resuma o feedback aberto no meu projeto principal, agrupe em temas e marque qualquer coisa já corrigida como resolvida."
Política de Privacidade
O servidor é hospedado pela Stunt Double e atua como o usuário conectado. Ele lê e escreve apenas nos workspaces aos quais esse usuário pertence, dentro dos escopos OAuth que ele concede (mcp:read, mcp:write, mcp:run). Ele não lê sua conversa com o cliente de IA além dos argumentos passados a cada chamada de ferramenta, e não acessa a memória, histórico de chat ou arquivos do cliente.
Dados criados por meio do servidor (projetos, atores, checklists, execuções, entrevistas, feedback) são armazenados no seu workspace Stunt Double e tratados sob a Política de Privacidade da Stunt Double, que cobre coleta, uso, armazenamento, subprocessadores, retenção e seus direitos. Revogue uma conexão a qualquer momento desconectando-a no seu cliente de IA.
Suporte
- E-mail: support@stuntdouble.io
- Central de ajuda e documentação: stuntdouble.io/support
- Referência MCP: stuntdouble.io/support/docs/api/mcp
- Relatórios de segurança: veja SECURITY.md
Transporte
Este servidor usa transporte Streamable HTTP. O endpoint é:
https://app.stuntdouble.io/api/mcp
Registro MCP
O servidor está listado no Registro MCP oficial como io.stuntdouble/mcp-server, então clientes e diretórios com suporte a registro podem encontrá-lo pelo nome:
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.stuntdouble/mcp-server"
Cada versão mesclada ao main é publicada lá automaticamente (veja CONTRIBUTING.md).
Links
Verificando alterações
A partir da raiz do repositório:
node scripts/validate-json.mjs
npx --yes prettier@3.4.2 --check README.md CONTRIBUTING.md SECURITY.md CHANGELOG.md mcp.json .mcp.json server.json .cursor-plugin/plugin.json .claude-plugin/plugin.json .claude-plugin/marketplace.json
Mais contexto em CONTRIBUTING.md. O GitHub Actions executa as mesmas verificações em push e pull requests.
Licença
MIT