Usercall

Dê aos seus agentes de IA a capacidade de perguntar aos usuários reais o porquê.

Documentação

Usercall MCP - Agentes de IA que realizam entrevistas reais com usuários

npm License

A IA pode construir produtos. Mas ainda não conversa com usuários.

Dê aos seus agentes de IA a capacidade de perguntar a usuários reais o porquê.

Usercall MCP executa entrevistas de voz ou texto moderadas por IA com usuários reais. Use-o para descobrir por que usuários cancelam, onde a integração falha, ou por que uma ação falhou, e obtenha temas, insights e citações literais.

Por que isso existe

Agentes de IA agora podem construir e lançar produtos extremamente rápido.

Mas a maioria dos agentes ainda depende de feedback sintético ou suposições sobre usuários.

Usercall MCP permite que agentes coletem feedback qualitativo real diretamente de usuários.


Escolha uma conexão

Recomendado: MCP hospedado (Claude, ChatGPT, Cursor, Grok Bot)

Adicione https://mcp.usercall.co como um conector MCP remoto / conector personalizado.

  • Login OAuth (sem chave de API, sem npx)
  • Mesmas ferramentas deste pacote (estudos + Research Triggers)
  • Documentação: app.usercall.co/docs/mcp
  • Cursor Directory / Grok Bot: este repositório inclui .mcp.json para que cursor.directory possa instalar o conector hospedado. Grok Bot não pode executar o pacote local npx.

Este pacote: local / chave de API / máquina a máquina

Use @usercall/mcp via stdio quando quiser uma chave de API Bearer (scripts, clientes locais, M2M).

  1. Entre em app.usercall.co → Início → Desenvolvedor → Criar chave de API
  2. Execute npx -y @usercall/mcp com USERCALL_API_KEY

Fluxo de trabalho de exemplo

Agent: "Why are users confused about onboarding?"

→ create_study
→ share interview_link with users
→ get_study_results

O interview_link retornado pode ser compartilhado com participantes por e-mail, Slack, Discord ou prompts no produto.

Exemplo de resultado:

{
  "themes": [
    {
      "name": "Onboarding confusion",
      "summary": "Users struggled to understand the second step.",
      "quotes": [
        "I wasn't sure what the app was asking me to do.",
        "I didn't know I had to verify my email before continuing."
      ]
    },
    {
      "name": "Pricing confusion",
      "summary": "Free plan limits were not clearly communicated.",
      "quotes": ["I wasn't sure if the free plan included analytics."]
    }
  ]
}

Como funciona

Agente de IA

↓

Usercall MCP (OAuth hospedado ou este pacote stdio)

↓

Usercall Agent API

↓

Entrevistas reais com usuários

↓

Temas e citações literais retornados ao agente

Com Research Triggers, o agente também pode segmentar usuários no seu produto:

Analytics MCP (PostHog, Mixpanel, …) identifica um comportamento

↓

Usercall MCP cria um estudo e um Research Trigger pausado

↓

Você o ativa no Usercall

↓

O SDK do Usercall convida usuários correspondentes para uma entrevista logo após o comportamento


Research Triggers

O Analytics diz ao agente o que os usuários fazem. Os Research Triggers permitem que ele pergunte a eles por quê.

User:  "Look at our PostHog data and find something worth investigating."

Agent (PostHog MCP):  users who test a study rarely launch one.

Agent (Usercall MCP):
  list_trigger_events()                  → study_tested, study_launched, …
  get_trigger_event_schema("study_tested")
                                         → properties: source, interview_type
                                           traits: plan ("free", "pro"), account_type
  create_study(...)  or  list_studies()
  create_research_trigger({
    study_id, event_name: "study_tested",
    traits: { plan: "free" }, sampling_percent: 25, max_invites_per_day: 10
  })                                     → status: "paused", summary, activation_url

Agent: "I've prepared a Research Trigger. When: study_tested · Audience: plan = free ·
        25% sampled · max 10 invites/day. It's paused. A human activates it here: <activation_url>"
  • O SDK do Usercall precisa estar instalado. Se list_trigger_events não retornar nada, chame get_trigger_sdk_setup (com seu provedor de analytics e nomes de eventos) para obter o snippet. Agentes de codificação podem instalá-lo para você.
  • Somente eventos que o Usercall realmente recebeu podem ser usados. Filtros são correspondências exatas em propriedades de eventos ou atributos de usuários. get_trigger_event_schema mostra qual campo é qual.
  • Condições não suportadas são rejeitadas, não descartadas silenciosamente. Isso inclui contagens de eventos, sequências, ausência ("não fez X"), janelas de tempo e diferentes-de. get_trigger_capabilities retorna a lista completa.

Instalação local (chave de API)

1. Obtenha uma chave de API

Entre em app.usercall.co → Início → Desenvolvedor → Criar chave de API

2. Adicione ao seu cliente MCP

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "usercall": {
      "command": "npx",
      "args": ["-y", "@usercall/mcp"],
      "env": {
        "USERCALL_API_KEY": "your_key_here"
      }
    }
  }
}

Cursor (.cursor/mcp.json):

{
  "mcpServers": {
    "usercall": {
      "command": "npx",
      "args": ["-y", "@usercall/mcp"],
      "env": {
        "USERCALL_API_KEY": "your_key_here"
      }
    }
  }
}

Para conectores remotos do Claude, ChatGPT ou Cursor, prefira https://mcp.usercall.co em vez desta configuração JSON.

Reinicie seu cliente MCP.

3. Pergunte ao seu agente

Run user interviews to understand why users drop off during onboarding.

Context:
- B2B SaaS product
- 3-step signup flow

Goal:
Identify confusion points and friction.

Target interviews: 5
Language: ko
Interview mode: voice

Show participants this prototype during the interview:
https://www.figma.com/proto/abcd1234/onboarding-flow

O agente irá:

  1. criar um estudo
  2. retornar um link de entrevista
  3. coletar respostas
  4. retornar o resumo (temas, insights e riscos)

Exemplo de ferramenta estruturada

Chamada de ferramenta create_study equivalente:

create_study
key_research_goal: "Understand why users drop off during onboarding"
business_context: "B2B SaaS signup flow"
target_interviews: 5
languages: ["en"]
interview_mode: "voice"

study_media:
  type: "prototype"
  url: "https://www.figma.com/proto/abcd1234/onboarding-flow"
  description: "New onboarding flow concept"

Ferramentas

create_study

Crie um estudo de entrevista moderado por IA para descobrir por que usuários cancelam, desistem na integração, falham em uma ação, ou onde uma suposição de produto está errada. Retorna study_id e interview_link para uma entrevista por voz, texto ou voz e texto. key_research_goal é obrigatório e não pode ser alterado depois. business_context é opcional. Padrões: target_interviews 1, duration_minutes 12, interview_mode voz. Um estudo de agente ativo por conta. Não executa a entrevista nem convida um participante. HTTP 402 inclui checkout_url.

CampoTipoObrigatórioPadrão
key_research_goalstring (5–2000)sim
business_contextstring (5–2000)não
additional_context_promptstringnão
target_interviewsnumber (1–200)não1
languagesstring[]não
duration_minutesnumber (5–65)não12
interview_modevoice | text | voice_and_textnãovoice
voice_genderfemale | malenão
enable_link_contextbooleannão
custom_link_variables{ key, label?, default_value? }[]não
metadataobjectnão
study_mediaobjectnão

Um idioma desativa o seletor de idioma; dois ou mais o ativam. O objetivo da pesquisa não pode ser alterado após a criação.

study_media (opcional). Estímulo visual exibido durante todas as perguntas da entrevista:

CampoTipoObrigatório
typeimage | prototypesim
urlstring (URL)sim
descriptionstring (máx. 500 caracteres)não
  • image: URL de imagem direta (.png, .jpg, .gif, .webp)
  • prototype: URL de protótipo Figma (convertido em embed interativo)
  • A mídia só é visível para participantes na web; chamadas telefônicas não a veem

update_study

Atualize um estudo de entrevista: vagas, perguntas do roteiro, introdução, idiomas, voz, ou uma imagem ou protótipo Figma exibido aos participantes. Retorna o estudo atualizado. key_research_goal não pode ser alterado. is_link_disabled true interrompe novas entrevistas e mantém as gravações. Um idioma oculta o seletor de idioma; dois ou mais o exibem. Parâmetros de consulta em interview_link são ignorados até que enable_link_context seja true. study_media null limpa a mídia. Erros de API incluem http_status. Não faz teste do roteiro nem convida um participante.

CampoTipoObrigatório
study_iduuid stringsim
target_interviewsnumber (1–200)não
is_link_disabledbooleannão
ai_agent_intro_messagestringnão
key_learning_goalsstringnão
workflow_end_messagestringnão
workflow_questions{ text, ... }[]não
interview_modevoice | text | voice_and_textnão
languagesstring[]não
voice_genderfemale | malenão
enable_link_contextbooleannão
custom_link_variables{ key, label?, default_value? }[]não
study_mediaobject ou nullnão

Passe study_media: null para limpar a mídia. O objeto study_media segue o mesmo esquema de create_study.

get_study_status

Verifique se as entrevistas com usuários ainda estão em andamento, sendo analisadas ou concluídas. Retorna completed_interviews, target_interviews, interview_link e next_step. running e analyzing não incluem descobertas, temas ou citações. Não altera o estudo.

CampoTipo
study_iduuid string

Valores de status: running · analyzing · complete

A resposta inclui campos de progresso da entrevista, incluindo completed_interviews e target_interviews.

get_study_results

Obtenha as descobertas da entrevista depois que usuários reais conversaram: temas, insights, riscos e citações literais. format omitido ou summary retorna temas, insights e riscos. format=full também retorna transcrições. Temas vazios significam que a análise ainda não está pronta. Não cria entrevistas nem edita o roteiro.

CampoTipoObrigatório
study_iduuid stringsim
formatsummary | fullnão

Respostas resumidas/completas incluem campos de progresso do estudo e saída da análise.

simulate_interview

Faça um teste de um roteiro de entrevista antes de um participante real entrar, incluindo uma pergunta sobre cancelamento, integração ou uma ação falha. Omita simulation_id para iniciar; retorna imediatamente com status running e um simulation_id. Passe simulation_id para ler essa execução. O status do resultado é pass, fail ou error. Máximo de 5 simulações por conta por dia UTC. HTTP 429 significa que o limite diário foi atingido. persona opcional tem name e prompt. Um teste não altera completed_interviews e não convida um participante.

CampoTipoObrigatório
study_iduuid stringsim
simulation_iduuid stringnão
persona{ name, prompt }não

Omita simulation_id para POST /api/v1/agent/studies/{studyId}/simulations. Passe simulation_id para GET essa simulação. A ferramenta não faz polling.

review_study

Revise um roteiro de entrevista e retorne uma crítica escrita das perguntas antes que usuários reais as vejam. Lê apenas o roteiro: sem transcrições, e as edições sugeridas não são aplicadas. Custa 1 crédito. A solicitação é somente study_id; call_ids não são aceitos. Funciona quando o controle de revisão no aplicativo está oculto. HTTP 402 inclui checkout_url. Não retorna temas, citações ou outras descobertas.

CampoTipoObrigatório
study_iduuid stringsim

Envia somente study_id. Não envia call_ids.

delete_study

Exclua permanentemente um estudo de entrevista, suas gravações e créditos reservados não utilizados. Não pode ser desfeito. Não exclui research triggers no produto.

CampoTipoObrigatório
study_iduuid stringsim

Ferramentas de Research Trigger

FerramentaFinalidade
get_trigger_capabilitiesQuais condições de acionamento no produto funcionam. Um evento, propriedade ou atributo exato, regra de URL, tempo de permanência na página. Sem contagens, sequências, ausência, janelas de tempo ou diferentes-de
get_trigger_sdk_setupTrecho para eventos de produto (ação falha, onboarding, churn). install_snippet, identify_snippet, allowlist_update_snippet. Sem chaves secretas
list_trigger_eventsNomes de eventos de produto dos últimos 30 dias. Um acionador aceita apenas um nome observado
get_trigger_event_schemaCampos em um evento de produto, com tipos e valores de exemplo. Exato, sensível a maiúsculas/minúsculas, sensível a tipos
list_studiesEstudos de entrevista existentes: study_id, interview_link, interview_mode, trigger_eligible
create_research_triggerConvite pausado após um momento de produto (ação falha, churn, onboarding). Retorna activation_url
list_research_triggersAcionadores no produto com status e activation_url
get_research_triggerUm acionador: quem ele convida, activation_url, contagens de convites e entrevistas. Sem temas ou citações
update_research_triggerQuem é convidado. status: "active" é rejeitado (409). Editar um acionador ativo o pausa
delete_research_triggerExcluir permanentemente um acionador. Entrevistas concluídas permanecem no estudo

create_research_trigger

CampoTipoObrigatórioPadrão
study_idstring uuidsim
event_namestring (de list_trigger_events)sim
propertiesobjeto de valores de correspondência exatanão
traitsobjeto de valores de correspondência exatanão
url{ match: equals | contains | starts_with, value }não
dwell_seconds1–600 (somente acionadores de visita à página)não
sourcepage_visit | analytics_event | customnão
sampling_percent1–100não100
cooldown_days0–365não30
max_invites_per_day1–100não100
intercept_titlestring (≤120), pequeno rótulo acima do promptnãopadrão
intercept_bodystring (≤500), texto do promptnãopadrão
delivery_methodintercept | webhooknãointerceptação
webhook_urlURL https pública (obrigatória para webhook)não
webhook_secretstring (16–200), chave HMAC, somente gravaçãonão
invite_link_params{ static?, from_traits?, from_properties? }não
namestring (≤100)nãogerado

Para acionadores de visita à página, use source: "page_visit" e event_name: "$pageview", com url e opcionalmente dwell_seconds.

Entrega.

  • intercept (padrão) mostra o widget do Usercall no seu produto, e o usuário faz uma entrevista por voz ou texto na página. Os modos vêm do estudo; list_studies retorna o interview_mode de cada estudo.
  • webhook envia via POST cada usuário correspondido para webhook_url, com seu ID de usuário, e-mail se conhecido, atributos, propriedades de evento e um link de entrevista pessoal. Se webhook_secret estiver definido, as solicitações carregam um cabeçalho HMAC x-usercall-signature.
  • Apenas URLs https públicas são aceitas, e a página de ativação mostra o destino antes de uma pessoa ativar o acionador.

Segurança

  • Agentes não podem ativar acionadores. Acionadores são sempre criados pausados. Chamar update_research_trigger com status: "active" retorna HTTP 409 e o activation_url. Uma pessoa precisa abrir esse link, revisar quem será convidado, o que verão e o custo em créditos, e clicar em Ativar.
  • Alterações em um acionador ativo precisam de nova aprovação. Alterar a configuração de um acionador ativo o pausa novamente.
  • Chaves secretas nunca são retornadas. A chave secreta de ingestão nunca volta de nenhuma ferramenta.

Exemplo de fluxo de trabalho

1. create_study
   key_research_goal: "Why do users drop off during onboarding?"
   business_context: "B2B SaaS, 3-step signup flow"
   target_interviews: 5
   languages: ["ko"]
   interview_mode: "voice"

   → returns { study_id, interview_link }
   (`business_context` is optional; `key_research_goal` alone still creates a study)

2. simulate_interview
   study_id
   → running, simulation_id
   call again with simulation_id
   → pass, fail, or error

3. review_study
   study_id
   → guide check only; write changes with update_study

4. Share interview_link with participants
   (email, Slack, in-product prompt, etc.)

5. get_study_status
   → "analyzing"

6. get_study_results
   → summary: themes, insights, and risks
   use format=full only for a quote

Com estímulo visual

1. create_study
   key_research_goal: "Get feedback on new dashboard design"
   business_context: "Redesigning analytics dashboard for power users"
   study_media:
     type: "image"
     url: "https://example.com/dashboard-mockup.png"
     description: "New dashboard design concept"

   → returns { study_id, interview_link }

2. After simulate_interview passes, a human shares interview_link. Participants see the mockup during the interview.

Para protótipos do Figma, use type: "prototype" com uma URL de protótipo do Figma.


Requisitos

  • Node.js 18+
  • Uma chave de API Usercall válida (somente caminho local / chave de API)

Auto-hospedagem / desenvolvimento

pnpm install
pnpm build
USERCALL_API_KEY="your_key_here" pnpm start

Testes e testes de fumaça:

pnpm test                                   # unit + MCP contract tests
USERCALL_API_KEY="your_key_here" pnpm smoke # creates a real study
USERCALL_API_KEY="your_key_here" SMOKE_STUDY_ID="<uuid>" SMOKE_EVENT_NAME="<observed event>" pnpm smoke:triggers

Registro Oficial do MCP

Usercall está listado no Registro Oficial do MCP como co.usercall/mcp.


Solução de problemas

ErroCorreção
Missing USERCALL_API_KEYDefina a variável de ambiente antes de iniciar este pacote stdio
401 UnauthorizedChave de API inválida ou revogada
402 Insufficient creditsAbra o checkout_url retornado, ou adicione créditos em app.usercall.co
500 ao criarVerifique se sua chave tem acesso à API do Agente v1
event_not_observedUsercall não recebeu o evento. Adicione-o à lista de permissões do seu SDK (get_trigger_sdk_setup(events=[...])), acione-o no seu aplicativo e tente novamente
wrong_placementO campo é um atributo, não uma propriedade (ou o contrário). Use a correção sugerida no erro
Filtros de atributos nunca correspondemChame window.usercall.identify({ userId, traits }) quando o usuário for conhecido (veja identify_snippet)
webhook_url_not_allowedUse uma URL https pública, sem credenciais; localhost e IPs privados são rejeitados
409 activation_requiredEsperado: agentes não podem ativar. Compartilhe activation_url com o usuário
429 em simulate_interviewO limite é de 5 simulações por conta por dia UTC. Pare por hoje
Acionador ativo nunca disparaVerifique se o evento ainda está chegando (list_trigger_events) e se os valores correspondem exatamente (maiúsculas/minúsculas e tipo)

Conectores remotos do Claude / ChatGPT / Cursor devem usar https://mcp.usercall.co (OAuth). Este pacote é o caminho stdio com chave de API.


Licença

MIT