Recap Raven

oficial

Anotador de D&D para Discord: pesquise e cite os resumos de sessões de TTRPG, missões, NPCs e transcrições a partir de qualquer IA. Requer uma chave de API do Recap Raven.

O que você pode fazer com Recap Raven MCP?

  • Liste campanhas e sessões — Peça à sua IA para listar suas campanhas e mapear um número de sessão para o recap correto antes de buscar detalhes.
  • Pesquise transcrições e beats — Faça buscas exatas por palavra-chave em turnos de transcrição ou cenas de beats para encontrar onde um nome, item ou lugar apareceu.
  • Leia recaps e janelas de transcrição — Busque um recap seguro para jogadores ou um trecho posicional dos turnos armazenados de uma sessão por intervalo de índices.
  • Revise preparação e ganchos abertos — Obtenha ganchos narrativos não resolvidos, um pacote de preparação para a próxima sessão e um resumo do que aconteceu anteriormente para uma campanha.
  • Consulte entidades e lore — Obtenha a lista de entidades ou uma ficha individual de entidade, além de documentos de lore e entradas de léxico.
  • Verifique engajamento e missões — Leia tendências de participação por falante, o registro de missões visível para jogadores e seu uso de créditos do Ask.

Servidor MCP hospedado

npx add-mcp 'https://mcp.recapraven.com/mcp'

Instala no Claude Code, Codex, Cursor e outros

Documentação

Para fluxos de trabalho de IA personalizados

Suas ferramentas de campanha, em um cliente de IA compatível.

Leia seus resumos e dados de campanha via MCP. O acesso existente por chave de API funciona com clientes compatíveis. Faça login em um app de IA que ofereça suporte a uma identidade de cliente pública; verifique os requisitos do seu cliente abaixo antes de conectar.

O que é MCP?

O MCP permite que apps de IA compatíveis chamem as ferramentas do Recap Raven diretamente. Em vez de copiar resumos para outra IA, sua IA pode pedir ao Recap Raven sessões, janelas de transcrição, ganchos, entidades, citações e respostas de campanha.

Comece agora

O endpoint MCP remoto do Raven é https://mcp.recapraven.com/mcp . Escolha um cliente para ver as instruções de configuração. O Premium inclui leituras determinísticas; o Searchable Memory é necessário para busca de memória e respostas de IA.


Endpoint MCP

https://mcp.recapraven.com/mcp

Configuração do ChatGPT

  1. No site do ChatGPT, abra Plugins, selecione + e depois Add custom MCP server. Insira "Recap Raven" e a URL do servidor abaixo.
  2. Quando o login do Raven estiver habilitado, escolha OAuth e a opção de identidade de cliente publicada (CIMD) com autenticação de cliente público. Nenhum segredo de cliente ou chave de API do Raven é necessário. O registro automático de cliente não é suportado pelo Raven.
  3. Crie o plugin, instale-o e faça login no Raven para revisar a identidade do app e o acesso solicitado. Aprove apenas uma conexão que você mesmo iniciou.
  4. Em uma conversa, selecione Recap Raven com @ e pergunte: "Use Recap Raven to list my campaigns."
  5. As ferramentas de leitura e escrita dependem das suas permissões e confirmações. Se a configuração estiver faltando, verifique as restrições do workspace e o guia oficial de configuração do ChatGPT para o seu app.

URL do servidor remoto do ChatGPT

https://mcp.recapraven.com/mcp

Ajuda com consentimento e conexão

Uma conexão de login do Raven solicitará permissão para acessar suas campanhas, transcrições e informações exclusivas do Mestre. Os resultados das ferramentas vão para o provedor de IA escolhido por você, e as ferramentas pagas consomem seus créditos Ask existentes.

Se você aprovar o acesso em segundo plano, o app poderá renovar sua conexão por até 30 dias, mesmo quando você estiver desconectado do Raven. Após a expiração ou revogação, reconecte e aprove novamente. Em Configurações da conta, revise as conexões de IA aprovadas e desconecte uma conexão ou use Disconnect all AI connections. As chaves de API são gerenciadas separadamente.

Resultados vazios? Verifique se você fez login na conta do Raven que possui suas campanhas. Uma mudança de plano pode remover o acesso às ferramentas; as respostas de IA também precisam de créditos disponíveis. Se o consentimento expirar ou falhar, reinicie a conexão a partir do cliente.

Menus ausentes ou um workspace não suportado não podem ser corrigidos alterando sua chave do Raven. Verifique os requisitos do fornecedor vinculados ou entre em contato com nossa comunidade no Discord informando o nome do app, a versão e a mensagem de erro. Não envie tokens ou chaves.

Disponível no Premium e no Searchable Memory

O Premium inclui chaves de API e acesso aos seus resumos, transcrições e dados manuais do World disponíveis. O Searchable Memory é necessário para ferramentas de memória, busca de campanha e respostas de IA. A busca semântica e as respostas de IA consomem seus créditos Ask existentes.

Disponibilidade do MCP por plano

Plano gratuitoIndisponível
PremiumChaves de API, resumos, transcrições e dados manuais do World disponíveis. As ferramentas de memória não estão incluídas.
Planos com memóriaFerramentas determinísticas sem custo extra; search_corpus usa poucos créditos de chat por busca, e as ferramentas ask com citação consomem créditos Ask.
Chave de APICrie uma chave de API pessoal em API Keys. Revogue a qualquer momento; o acesso via MCP termina quando a conta retorna ao plano Gratuito.

Uso justo e limites de taxa

O servidor MCP é uma superfície compartilhada e medida. Para mantê-lo sustentável (e impedir que um loop de agente descontrolado consuma uma licença inteira em minutos), cada chave de API tem limite de taxa além da sua cota de Ask.

Limites de taxa do MCP

Uso justo do servidorTeto de requisições por chave de API no próprio servidor MCP (todas as chamadas de ferramentas combinadas) — impede que uma única chave sobrecarregue o endpoint. Respostas acima do limite retornam 429 com Retry-After.
Premium · todos os planos / Memory · 5 sessões15 requisições/minuto e 150 requisições/hora.
Memory · 10 sessões30 requisições/minuto e 450 requisições/hora.
Memory · 20 sessões60 requisições/minuto e 1200 requisições/hora.
Ferramentas gratuitasLimitadas por chave de API. Leituras determinísticas e buscas por palavra-chave (search_transcript, search_facts) não custam créditos. A busca semântica search_corpus não está incluída aqui; ela usa poucos créditos de chat por busca concluída.
Ferramentas com créditos de chatsearch_corpus (poucos créditos de chat) e as ferramentas ask com citação são limitadas tanto pela sua cota de Ask quanto por um limite de taxa por chave. O controle de uso interrompe os gastos quando a cota se esgota; o limite de taxa impede que uma rajada a esgote instantaneamente. Sem cota MCP separada — seu agente gasta os mesmos créditos de chat por licença que usa no app.

Incluído sem custo extra

Ferramentas de leitura determinísticas — sessões, entidades e o registro, ganchos, mecânicas, engajamento, busca em transcrições e beats, resumos, lore e léxico. Elas retornam dados de campanha armazenados sem inferência de IA, então as ferramentas disponíveis não custam créditos. As ferramentas de memória ainda exigem o Searchable Memory. A busca semântica search_corpus não está incluída nesta lista; ela usa poucos créditos de chat. Expanda qualquer ferramenta para ver exemplo de entrada, exemplo de saída e referência de campos.

list_campaigns Sem cobrança extra por ferramenta

Ferramenta de descoberta: lista as campanhas disponíveis para sua chave MCP para que outras ferramentas possam usar o campaign_id correto.

Exemplo de entrada

{}

Exemplo de saída

{
  "campaigns": [
    {
      "campaign_id": "a1b2c3d4-…",
      "name": "The White Moose",
      "module": "Dolmenwood"
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
campaignsarrayCampanhas de propriedade da sua conta.
campaigns[].campaign_idstring (uuid)Use este id com ferramentas MCP com escopo de campanha.
campaigns[].namestringNome da campanha.
campaigns[].modulestring | nullRótulo opcional de módulo/sistema.

list_sessions Sem cobrança extra por ferramenta

Ferramenta de descoberta: lista as sessões prontas com seu session_number e título, para que um agente possa mapear "sessão 12" para o recap_id correto.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid) | omitidoFiltro de campanha opcional.

Exemplo de saída

{
  "recaps": [
    {
      "recap_id": "r1e2c3a4-…",
      "campaign_id": "a1b2c3d4-…",
      "session_number": 12,
      "title": "The Choosing",
      "status": "ready"
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
recapsarraySessões prontas visíveis para sua conta.
recaps[].recap_idstring (uuid)Use este id com get_recap, get_transcript_window e get_mechanics_events.
recaps[].campaign_idstring (uuid) | nullCampanha à qual a sessão pertence.
recaps[].session_numberinteger | nullA numeração de sessão baseada em 1 do próprio Mestre (editável pelo DM), quando definida.
recaps[].titlestring | nullTítulo da sessão.
recaps[].statusstringApenas sessões prontas são listadas.

get_engagement Sem cobrança extra por ferramenta

O painel de engajamento da campanha: tendência de participação por falante e a síntese entre sessões em cache (resumo + linha do tempo de eventos-chave).

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser lida. Deve ser de propriedade da sua conta.

Exemplo de saída

{
  "sessions": [
    {
      "recap_id": "…",
      "session_ref": "S01AB",
      "session_at": "2026-06-20T19:00:00Z"
    }
  ],
  "players": [
    {
      "speaker": "Mira",
      "points": [
        {
          "session_ref": "S01AB",
          "participation_pct": 28.4,
          "turn_count": 42,
          "talk_time_seconds": 612,
          "word_count": 1840
        }
      ]
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
sessionsarrayUma entrada por sessão pronta na campanha.
sessions[].recap_idstring (uuid)O id do resumo/sessão.
sessions[].session_refstringReferência curta legível, por exemplo S01AB.
sessions[].session_atstring (ISO 8601)Quando a sessão começou (UTC).
playersarrayUma entrada por falante reconhecido.
players[].speakerstringNome de exibição do falante.
players[].pointsarrayMétricas por sessão para este falante.
players[].points[].participation_pctnumberParticipação na conversa, 0–100.
players[].points[].turn_countintegerNúmero de turnos de fala realizados.
players[].points[].talk_time_secondsintegerTotal de segundos falando.
players[].points[].word_countintegerTotal de palavras faladas.

get_credit_balance Sem cobrança extra por ferramenta

Sua cota de Ask como porcentagem usada, além de um feed de atividade recente. As contagens brutas da cota não são expostas aos clientes MCP.

Exemplo de entrada

{}

Exemplo de saída

{
  "usage": {
    "percent_used": 29
  },
  "recent_activity": [
    {
      "type": "recap_ready",
      "label": "Session S01AB recap is ready",
      "date": "2026-06-21T08:02:00Z",
      "recap_id": "…"
    },
    {
      "type": "credit",
      "label": "Asked your campaign",
      "date": "2026-06-21T08:05:00Z"
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
usage.percent_usedintegerUso de Ask em número inteiro de 0 a 100.
recent_activityarrayFeed do mais recente para o mais antigo (eventos session-recorded, recap-ready, credit-ledger).
recent_activity[].typestringTipo de evento.
valores: recap_ready | session_recorded | credit
recent_activity[].labelstringResumo legível.
recent_activity[].datestring (ISO 8601)Quando o evento ocorreu.
recent_activity[].recap_idstring (uuid) | nullPresente para eventos relacionados a resumo/sessão.

get_memory_overview Sem cobrança extra por ferramenta

O bloco mais rico de consciência situacional do Mestre: distribuição, tendência de engajamento + pontuação geral, participação por sessão, pilares de jogo.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser lida.

Exemplo de saída

{
  "distribution": [
    {
      "label": "Roleplay",
      "pct": 58
    }
  ],
  "engagement": {
    "overall": {
      "score": 74,
      "label": "Playful / tense"
    }
  },
  "pillars": [
    "The green-eyed stranger",
    "The old inn",
    "The white moose hunt"
  ]
}

Descrições dos campos

CampoTipoDescrição
distributionarrayParticipação de jogo por categoria.
distribution[].labelstringNome da categoria.
distribution[].pctnumberParticipação, 0–100.
engagement.overall.scorenumber | nullPontuação composta de engajamento, 0–100.
engagement.overall.labelstring | nullRótulo qualitativo, por exemplo "Lúdico / tenso".
pillarsstring[] | nullTemas recorrentes / pilares de jogo.

get_quest_log Sem cobrança extra por ferramenta

O registro de missões visível ao jogador. Adições e edições do Mestre são compartilhadas com o grupo via Discord /questlog. Mantenha os segredos do Mestre fora.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…",
  "page": 1
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)Sua campanha a ser lida.
pageintegerOpcional, começando em 1. Dez missões por página.

Exemplo de saída

{
  "quests": [
    {
      "id": "d4e5f6a7-…",
      "title": "Find the missing courier",
      "objective": "Follow the trail from the bridge.",
      "status": "active",
      "progress": "The party found a torn satchel."
    }
  ],
  "page": 1,
  "has_more": false
}

Descrições dos campos

CampoTipoDescrição
questsarrayAtivas/estagnadas primeiro, depois concluídas/abandonadas. Metadados internos de edição e links de origem são excluídos.
quests[].idstring (uuid)Identificador da missão.
quests[].titlestringTítulo da missão.
quests[].objectivestringO objetivo do grupo.
quests[].statusstringactive, stale, completed ou abandoned.
quests[].progressstringProgresso mais recente salvo.
pageintegerPágina atual.
has_morebooleanSolicite a próxima página quando for true.

get_open_hooks Sem cobrança extra por ferramenta

Ganchos narrativos não resolvidos — o que preparar para a próxima sessão.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser lida.

Exemplo de saída

{
  "hooks": [
    {
      "text": "Nobody bypasses the Choosing.",
      "session_ref": "S01AB",
      "session_date": "2026-06-20"
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
hooksarrayGanchos narrativos atualmente abertos.
hooks[].textstringA descrição do gancho.
hooks[].session_refstringSessão em que o gancho foi introduzido.
hooks[].session_datestring (YYYY-MM-DD)Data dessa sessão.

get_previously_on Sem cobrança extra por ferramenta

Contexto de "anteriormente na campanha", construído a partir da memória com escopo do proprietário.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser lida.

Exemplo de saída

{
  "sections": [
    {
      "title": "Last time",
      "bullets": [
        "The party followed the white moose into the mist."
      ]
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
sectionsarraySeções de memória da campanha para resumo/contexto.
sections[].titlestringCabeçalho da seção.
sections[].bulletsstring[]Tópicos concisos de memória.

get_next_session_prep_pack Sem cobrança extra por ferramenta Aviso de preparação para a próxima sessão, exclusivo do GM, a partir do cache de preparação do Recap Raven. Pode ser gerado uma vez e depois fica em cache até que o próximo recap seja ingerido. Retorna credit_cost: 0.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha para preparar. Deve pertencer à sua conta.

Exemplo de saída

{
  "likely_directions": [
    {
      "title": "Return to the inn",
      "detail": "The unresolved clue points back to the old inn."
    }
  ],
  "threads_to_watch": [
    "Who opened the moonstone gate?"
  ],
  "prep_suggestions": [
    "Review the innkeeper and the gate password."
  ],
  "credit_cost": 0,
  "cache_policy": "cached_until_next_recap_ingested"
}

Descrições dos campos

CampoTipoDescrição
likely_directionsarrayPróximas direções prováveis, voltadas ao GM.
threads_to_watchstring[]Tramas que o GM pode querer ter em mente.
prep_suggestionsstring[]Sugestões concretas de preparação para o GM.
credit_costnumberSempre 0 para esta ferramenta MCP.
cache_policystringcached_until_next_recap_ingested.

get_chronicle Sem cobrança extra de ferramenta

Mapa de cenas por sessão — a crônica estruturada da campanha.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser lida.

Exemplo de saída

{
  "sessions": [
    {
      "recap_id": "…",
      "session_ref": "S01AB",
      "scenes": [
        "The market",
        "The hunt",
        "The banshee fight"
      ]
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
sessionsarrayUma entrada por sessão.
sessions[].recap_idstring (uuid)O id do recap/sessão.
sessions[].scenesstring[]Rótulos de cenas ordenados para essa sessão.

get_entity Sem cobrança extra de ferramenta

O registro de entidades visível ao jogador, derivado das sessões gravadas; o lore privado enviado é excluído. Sem nome, retorna a lista de entidades. Com um nome ou alias, retorna a ficha correspondente, o histórico de interações, os links de turnos da transcrição, as relações ou os candidatos em caso de ambiguidade.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…",
  "name": "Captain Vale"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser lida.
namestring | omitidoNome/alias da entidade a ser resolvido para uma única ficha. Omita para obter a lista de entidades.

Exemplo de saída

{
  "entity": {
    "id": "…",
    "canonical_name": "Captain Vale",
    "kind": "npc",
    "aliases": [
      "Vale"
    ],
    "search_aliases": [],
    "interactions": [
      {
        "recap_id": "…",
        "summary": "Vale warned the party.",
        "turn_start": 12,
        "turn_end": 16
      }
    ],
    "relations": [
      {
        "subject": "Captain Vale",
        "predicate": "located_in",
        "object": "Saltmoor Harbour",
        "recap_id": "…",
        "turn_start": 41,
        "turn_end": 44,
        "visibility": "player_known",
        "session_date": "2026-05-01T00:00:00Z",
        "is_current": true,
        "predicate_class": "stateful"
      }
    ]
  }
}

Descrições dos campos

CampoTipoDescrição
entitiesarray (modo lista)Quando nenhum nome é informado: {canonical_name, kind, aliases, search_aliases} para cada entidade.
entityobject | null (modo ficha)Quando um nome é informado: a ficha da entidade resolvida, ou null se o nome não corresponder a nada.
candidatesarrayFichas de entidades possíveis quando um alias é ambíguo; vazio quando a resolução é única.
entity.idstring (uuid)Id estável da entidade na campanha.
entity.canonical_namestringNome canônico da entidade.
entity.kindstringTipo da entidade.
valores: pc | npc | creature | place | item | faction | deity | other
entity.aliasesstring[]Aliases de exibição.
entity.search_aliasesstring[]Aliases apenas para recuperação.
entity.interactionsarrayEntradas de histórico fundamentadas com links de recap e de turnos da transcrição.
entity.interactions[].recap_idstring (uuid)Sessão que contém a interação.
entity.interactions[].turn_startinteger | nullPrimeiro turno da transcrição para o link de evidência.
entity.interactions[].turn_endinteger | nullÚltimo turno da transcrição para o link de evidência.
entity.interactions[].identity_matchstringconfirmed ou suggested; links suggested são possíveis correspondências de alias, não afirmações de identidade canônica.
valores: confirmed | suggested
entity.relationsarrayGrafo de relações (mais antiga → mais recente).
entity.relations[].predicatestringex.: located_in, ally_of, owns.
entity.relations[].recap_idstring (uuid)Sessão que evidencia a relação.
entity.relations[].visibilitystringVisibilidade da aresta para o GM. Dados legados anteriores à testemunha podem conter arestas dm_only — não exibir aos jogadores.
valores: player_known | dm_only
entity.relations[].is_currentbooleanO trecho vigente de um predicado com estado.

get_mechanics_events Sem cobrança extra de ferramenta

Eventos de mecânica ancorados em turnos (ataques, magias, dano, descansos, condições) de uma sessão — os mesmos dados da aba de mecânica.

Exemplo de entrada

{
  "recap_id": "…"
}

Descrições dos campos

CampoTipoDescrição
recap_idstring (uuid)A sessão a ser lida. Use list_sessions para descobrir os ids.

Exemplo de saída

{
  "recap_id": "…",
  "mechanics": [
    {
      "action": "attack",
      "actor": "Mira",
      "target": "Goblin",
      "damage_amount": 7,
      "damage_type": "slashing",
      "evidence_turn_start": 41,
      "evidence_turn_end": 41
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
recap_idstring (uuid)A sessão à qual estes eventos pertencem.
mechanicsarrayEventos de mecânica ancorados em turnos.
mechanics[].actionstringTipo de evento.
valores: attack | spell_cast | short_rest | long_rest | consumable_used | condition_applied | ability_used | form_changed
mechanics[].actorstringQuem agiu.
mechanics[].evidence_turn_startintegerPrimeiro turno que evidencia o evento.
mechanics[].evidence_turn_endintegerÚltimo turno que evidencia o evento.

get_lore_documents Sem cobrança extra de ferramenta

A lista de documentos de lore da campanha.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser lida.

Exemplo de saída

{
  "documents": [
    {
      "id": "…",
      "title": "The Choosing",
      "updated_at": "2026-06-20"
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
documentsarrayDocumentos de lore.
documents[].idstring (uuid)Identificador do documento.
documents[].titlestringTítulo do documento.

get_lore_document Sem cobrança extra de ferramenta

Um único documento de lore com seu corpo completo.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…",
  "doc_id": "…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser lida.
doc_idstring (uuid)O documento de lore a ser buscado.

Exemplo de saída

{
  "document": {
    "id": "…",
    "title": "The Choosing",
    "body": "…"
  }
}

Descrições dos campos

CampoTipoDescrição
document.idstring (uuid)Identificador do documento.
document.titlestringTítulo do documento.
document.bodystringCorpo completo do documento (markdown).

get_lexicon Sem cobrança extra de ferramenta

Entradas do léxico (nomes canônicos, aliases, tipo, confiança).

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser lida.

Exemplo de saída

{
  "entries": [
    {
      "id": "…",
      "canonical": "Sol’Thun",
      "type": "npc",
      "aliases": [
        "the archmage"
      ],
      "confidence": 0.92,
      "enabled": true
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
entriesarrayEntradas do léxico.
entries[].canonicalstringNome canônico.
entries[].typestringTipo da entidade.
valores: npc | place | item | creature | other
entries[].aliasesstring[]Nomes alternativos / aliases.
entries[].confidencenumberConfiança da extração, 0–1.
entries[].enabledbooleanSe esta entrada está ativa.

get_transcript_window Sem cobrança extra de ferramenta

Um recorte posicional dos turnos armazenados de uma sessão (sem busca por conteúdo — apenas índices de turno de/até).

Exemplo de entrada

{
  "recap_id": "…",
  "from": 0,
  "to": 20
}

Descrições dos campos

CampoTipoDescrição
recap_idstring (uuid)O recap/sessão a ser lido. Use list_sessions para descobrir os ids.
fromintegerÍndice do turno inicial (inclusivo, padrão 0).
tointegerÍndice do turno final. Omita para uma janela de 50 turnos a partir do índice inicial.

Exemplo de saída

{
  "recap_id": "…",
  "total_turns": 184,
  "from": 0,
  "to": 20,
  "turns": [
    {
      "index": 0,
      "t": "~00:01",
      "speaker": "GM",
      "text": "…"
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
total_turnsintegerTotal de turnos na sessão.
fromintegerÍndice inicial retornado.
tointegerÍndice final retornado.
turnsarrayTurnos na janela solicitada.
turns[].indexintegerÍndice posicional na sessão.
turns[].tstringTimestamp relativo, ex.: ~00:01.
turns[].speakerstringNome de exibição do falante.
turns[].textstringO texto falado.

get_recap Sem cobrança extra de ferramenta

O HTML do recap seguro para jogadores de um recap pronto. O tipo de artefato é definido pelo servidor; não há entrada de tipo.

Exemplo de entrada

{
  "recap_id": "…"
}

Descrições dos campos

CampoTipoDescrição
recap_idstring (uuid)O recap/sessão cujo recap seguro para jogadores deve ser buscado.

Exemplo de saída

{
  "recap": {
    "recap_id": "…",
    "content_type": "player_recap_html",
    "html": "<!doctype html>…",
    "truncated": false
  }
}

Descrições dos campos

CampoTipoDescrição
recap.recap_idstring (uuid)O id do recap/sessão.
recap.content_typestringSempre player_recap_html.
valores: player_recap_html
recap.htmlstringO HTML do recap seguro para jogadores.
recap.truncatedbooleanTrue quando o limite de resposta do MCP cortou o HTML.

search_transcript Sem cobrança extra de ferramenta

Busca exata por palavra-chave (texto completo) nos turnos da transcrição da sua campanha. Retorna os turnos que contêm a frase exata, com sua sessão, falante e timestamp — sem LLM, sem embedding, sem créditos.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…",
  "query": "white moose",
  "recap_id": "r1e2c3a4-…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser pesquisada.
querystringFrase exata a ser correspondida (busca de texto completo no texto da transcrição).
recap_idstring (uuid) | omitidoEscopo opcional de sessão. Use list_sessions para descobrir os ids de recap.

Exemplo de saída

{
  "query": "white moose",
  "matches": [
    {
      "recap_id": "…",
      "speaker": "GM",
      "t": "~01:04",
      "text": "All you know is that it’s a white moose."
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
querystringEco da consulta enviada.
matchesarrayTurnos da transcrição que contêm a frase exata, melhor correspondência primeiro.
matches[].recap_idstring (uuid)Recap/sessão de onde veio a correspondência.
matches[].speakerstringFalante do turno correspondido.
matches[].tstringTimestamp relativo, ex.: ~01:04.
matches[].textstringO texto correspondido da transcrição.

search_facts Sem cobrança extra de ferramenta

Busca por palavra-chave em texto completo sobre os beats de cena da sua campanha — os resumos densos, beat a beat, sobre os quais a via de chat raciocina. Ideal para termos exatos (um nome, um item, um lugar). Retorna o texto do beat com seu contexto de cena/sessão e intervalo de turnos, para que um agente possa localizar o momento e puxar a janela exata da transcrição em seguida. Sem LLM, sem embedding, sem créditos. Para consultas em linguagem natural, baseadas em significado, use search_corpus.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…",
  "query": "white moose hunt",
  "recap_id": "r1e2c3a4-…"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser pesquisada.
querystringPalavras-chave a serem correspondidas no texto do beat (busca de texto completo).
recap_idstring (uuid) | omitidoEscopo opcional de sessão. Use list_sessions para descobrir os ids de recap.

Exemplo de saída

{
  "matches": [
    {
      "recap_id": "…",
      "session_number": 12,
      "session_title": "The Choosing",
      "scene_title": "The hunt",
      "beat_index": 3,
      "turn_start": 120,
      "turn_end": 168,
      "text": "The party tracked the white moose north of the old inn…",
      "truncated": false
    }
  ]
}

Descrições dos campos

CampoTipoDescrição
matchesarrayBeats correspondentes, melhor correspondência primeiro.
matches[].recap_idstring (uuid)Sessão de onde veio o beat.
matches[].session_numberinteger | nullO número da sessão definido pelo GM, quando houver.
matches[].session_titlestring | nullO título da sessão, quando houver.
matches[].scene_titlestring | nullTítulo da cena à qual o beat pertence.
matches[].beat_indexintegerA posição do beat dentro de sua cena.
matches[].turn_startintegerPrimeiro turno da janela do beat (usar em get_transcript_window).
matches[].turn_endintegerÚltimo turno da janela do beat.
matches[].textstringO texto do beat (limitado a 1200 caracteres).
matches[].truncatedbooleanTrue quando o texto do beat foi cortado.

Usa créditos de chat

Três ferramentas consomem créditos de chat medidos. Pense em localizador vs resposta: search_corpus (poucos créditos de chat) entrega as correspondências mais fortes como evidência estruturada para o seu próprio modelo raciocinar — um localizador rápido, não um índice exaustivo; ask_campaign_cited responde a uma pergunta voltada ao GM com citações literais da transcrição e citações de turnos; e ask_player_campaign_cited fornece a versão mais curta voltada ao jogador pela via do jogador. Todas têm limite de taxa por chave de API, além do seu saldo.

search_corpus Usa poucos créditos de chat search_corpus encontra momentos relevantes da campanha mesmo quando você não sabe a redação exata. Ele usa busca semântica e reranqueamento para retornar as correspondências de evidência mais fortes, incluindo resumo, contexto da sessão e intervalos de turnos. É um localizador, não um índice exaustivo: apenas as melhores correspondências retornam, então trate um resultado vazio ou escasso como "nada forte surgiu", não como prova de que nada existe. Use as correspondências para descobrir os termos ou nomes reais que a tabela usou, depois execute uma busca exaustiva por palavra-chave livre com search_facts / search_transcript, ou leve os intervalos de turnos diretamente para get_transcript_window para obter o segmento literal. Para uma resposta definitiva e verificada a uma pergunta — citações literais e referências — use ask_campaign_cited em vez disso (mais caro, uma resposta escrita em vez de linhas estruturadas). Defina player_safe: true para excluir conteúdo exclusivo do GM dos resultados da busca. Usa poucos créditos de chat por busca, cobrados em qualquer busca concluída, mesmo uma sem correspondências.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…",
  "query": "when did the party first distrust the mayor?",
  "player_safe": false
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser pesquisada.
querystringUma descrição em linguagem natural do que você está procurando.
player_safeboolean (padrão false)Quando true, a recuperação é filtrada por visibilidade — memória exclusiva do GM, inferida e de especulação, e lore tipificada como GM são excluídas. Use para qualquer coisa que os jogadores verão.

Exemplo de saída

{
  "matches": [
    {
      "object_id": "…",
      "type": "plot_event",
      "visibility": "player_known",
      "recap_id": "…",
      "session_number": 8,
      "session_title": "The Mayor’s Bargain",
      "turn_start": 212,
      "turn_end": 240,
      "text": "The party noticed the mayor’s story about the missing caravan didn’t add up…",
      "truncated": false
    }
  ],
  "credit_cost": "<chat credits charged for this search>"
}

Descrições dos campos

CampoTipoDescrição
matchesarrayCorrespondências de memória ranqueadas, melhor correspondência primeiro.
matches[].object_idstring (uuid)O id do objeto de memória.
matches[].typestringO tipo de memória (ex.: plot_event, npc_fact).
matches[].visibilitystringQuem sabe disso. Em uma busca player_safe, é sempre apenas visível ao jogador.
matches[].recap_idstring (uuid) | nullA sessão de onde a memória veio.
matches[].session_numberinteger | nullO número da sessão do GM, quando definido.
matches[].session_titlestring | nullO título da sessão, quando definido.
matches[].turn_startinteger | nullPrimeiro turno da janela de evidência (alimente em get_transcript_window).
matches[].turn_endinteger | nullÚltimo turno da janela de evidência.
matches[].textstringO resumo da memória (limitado a 1200 caracteres).
matches[].truncatedbooleanTrue quando o resumo foi cortado.
credit_costnumberCréditos de chat cobrados por esta busca concluída.

ask_campaign_cited Usa créditos de chat

Faça à sua campanha uma pergunta factual voltada ao GM e obtenha a resposta da IA — o mesmo motor de respostas de beats do chat no aplicativo, com citações literais da transcrição e referências de turnos. Usa créditos de chat do GM, o mesmo custo do chat no aplicativo. Limitado por taxa por chave de API, além do seu saldo.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…",
  "question": "Where did the hunter see the moose?"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser questionada.
questionstringSua pergunta.
clarificationobject | omitidoOpcional: responda a uma pergunta de esclarecimento feita pelo motor (apenas via GM).
clarification.questionstringA pergunta de esclarecimento do motor.
clarification.answerstringSua resposta a essa pergunta.
supersedesstring | omitidoId da mensagem de uma resposta anterior a ser substituída (apenas via GM).

Exemplo de saída

{
  "answer_markdown": "The hunter reported seeing the white moose near the old inn to the north of town [1].",
  "quotes": [
    {
      "turn": 104,
      "speaker": "Skoll",
      "text": "All you know is that it’s a white moose.",
      "recap_id": "…"
    }
  ],
  "confidence_label": "high",
  "credit_cost": 1
}

Descrições dos campos

CampoTipoDescrição
answer_markdownstringA resposta citada, com marcadores [n] embutidos.
citationsarrayMetadados de citação que sustentam cada marcador.
quotesarrayCitações literais da transcrição usadas como evidência.
confidence_labelstringFaixa de confiança aproximada.
valores: high | medium | low
credit_costnumberCréditos cobrados por esta resposta.
quotes[].turnintegerO índice do turno citado.
quotes[].recap_idstring (uuid) | nullA sessão de onde a citação veio.

ask_player_campaign_cited Usa créditos de chat

Faça uma pergunta factual de campanha voltada ao jogador e obtenha uma resposta curta e segura para jogadores com citações da transcrição. Conteúdo exclusivo do GM é excluído pela via do jogador no lado do servidor. Usa créditos de chat do jogador.

Exemplo de entrada

{
  "campaign_id": "a1b2c3d4-…",
  "question": "What do we know about the harbour?"
}

Descrições dos campos

CampoTipoDescrição
campaign_idstring (uuid)A campanha a ser questionada.
questionstringSua pergunta.

Exemplo de saída

{
  "answer_markdown": "The party knows the harbourmaster helped them find the missing crate [1].",
  "quotes": [
    {
      "turn": 104,
      "speaker": "Skoll",
      "text": "The harbourmaster pointed us to the crate.",
      "recap_id": "…"
    }
  ],
  "confidence_label": "medium",
  "credit_cost": 1
}

Descrições dos campos

CampoTipoDescrição
answer_markdownstringA resposta citada, com marcadores [n] embutidos.
citationsarrayMetadados de citação que sustentam cada marcador.
quotesarrayCitações literais da transcrição usadas como evidência.
confidence_labelstringFaixa de confiança aproximada.
valores: high | medium | low
credit_costnumberCréditos cobrados por esta resposta.

Exemplo seguro para jogadores

Construindo um bot ou overlay voltado ao jogador? Use a ferramenta de citação do jogador para que a resposta venha da via do jogador, cujo registro filtrado por visibilidade nunca inclui conteúdo exclusivo do GM:

{
  "tool": "ask_player_campaign_cited",
  "arguments": {
    "campaign_id": "a1b2c3d4-…",
    "question": "What do we know about the harbour?"
  }
}

Para onde vão seus dados

Quando você conecta um cliente MCP e usa estas ferramentas, o conteúdo da sua campanha é enviado ao cliente de IA que você escolheu — por exemplo, ChatGPT, Claude ou Gemini. Os termos de uso de dados e treinamento desse provedor se aplicam ao que você envia a ele, não aos nossos.

A garantia de não treinamento do Recap Raven cobre nosso próprio pipeline e os provedores de modelo que divulgamos. Ela não pode cobrir um cliente que você conecta: ao configurar um, você está escolhendo um novo processador para os dados da sua campanha. Verifique os termos desse cliente antes de conectá-lo e use ask_player_campaign_cited ou filtros de busca seguros para jogadores (e evite leituras exclusivas do GM, como lore e crônica) para qualquer coisa que os jogadores verão.

Dúvidas ou feedback? Veja como o Recap Raven funciona ou convide o bot abaixo.

Rode o Recap Raven na sua próxima sessão

Convide o bot, crie sua campanha e receba recaps gratuitos todo mês.

Rode o Recap Raven na sua próxima sessão

Sem cartão necessário · Grave apenas com o consentimento da sua mesa · Exclua ou exporte seus dados a qualquer momento

Dúvidas ou feedback? Entre na nossa comunidade do Discord →

Feito para voz no Discord. Capturamos a sessão inteira para você — sem registrar nada depois, sem arquivos para nos enviar e sem adivinhar quem falou. Os planos de memória mantêm sua wiki de mundo editável atualizada enquanto você joga, pronta para perguntas sobre o que aconteceu, quem disse o quê, ganchos em aberto e o que preparar a seguir.