Recap Raven
oficialAnotador 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
- No site do ChatGPT, abra Plugins, selecione + e depois Add custom MCP server. Insira "Recap Raven" e a URL do servidor abaixo.
- 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.
- 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.
- Em uma conversa, selecione Recap Raven com @ e pergunte: "Use Recap Raven to list my campaigns."
- 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 gratuito | Indisponível |
| Premium | Chaves 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ória | Ferramentas 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 API | Crie 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 servidor | Teto 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ões | 15 requisições/minuto e 150 requisições/hora. |
| Memory · 10 sessões | 30 requisições/minuto e 450 requisições/hora. |
| Memory · 20 sessões | 60 requisições/minuto e 1200 requisições/hora. |
| Ferramentas gratuitas | Limitadas 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 chat | search_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
| Campo | Tipo | Descrição |
|---|---|---|
| campaigns | array | Campanhas de propriedade da sua conta. |
| campaigns[].campaign_id | string (uuid) | Use este id com ferramentas MCP com escopo de campanha. |
| campaigns[].name | string | Nome da campanha. |
| campaigns[].module | string | null | Ró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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (uuid) | omitido | Filtro 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
| Campo | Tipo | Descrição |
|---|---|---|
| recaps | array | Sessões prontas visíveis para sua conta. |
| recaps[].recap_id | string (uuid) | Use este id com get_recap, get_transcript_window e get_mechanics_events. |
| recaps[].campaign_id | string (uuid) | null | Campanha à qual a sessão pertence. |
| recaps[].session_number | integer | null | A numeração de sessão baseada em 1 do próprio Mestre (editável pelo DM), quando definida. |
| recaps[].title | string | null | Título da sessão. |
| recaps[].status | string | Apenas 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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descrição |
|---|---|---|
| sessions | array | Uma entrada por sessão pronta na campanha. |
| sessions[].recap_id | string (uuid) | O id do resumo/sessão. |
| sessions[].session_ref | string | Referência curta legível, por exemplo S01AB. |
| sessions[].session_at | string (ISO 8601) | Quando a sessão começou (UTC). |
| players | array | Uma entrada por falante reconhecido. |
| players[].speaker | string | Nome de exibição do falante. |
| players[].points | array | Métricas por sessão para este falante. |
| players[].points[].participation_pct | number | Participação na conversa, 0–100. |
| players[].points[].turn_count | integer | Número de turnos de fala realizados. |
| players[].points[].talk_time_seconds | integer | Total de segundos falando. |
| players[].points[].word_count | integer | Total 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
| Campo | Tipo | Descrição |
|---|---|---|
| usage.percent_used | integer | Uso de Ask em número inteiro de 0 a 100. |
| recent_activity | array | Feed do mais recente para o mais antigo (eventos session-recorded, recap-ready, credit-ledger). |
| recent_activity[].type | string | Tipo de evento. valores: recap_ready | session_recorded | credit |
| recent_activity[].label | string | Resumo legível. |
| recent_activity[].date | string (ISO 8601) | Quando o evento ocorreu. |
| recent_activity[].recap_id | string (uuid) | null | Presente 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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descrição |
|---|---|---|
| distribution | array | Participação de jogo por categoria. |
| distribution[].label | string | Nome da categoria. |
| distribution[].pct | number | Participação, 0–100. |
| engagement.overall.score | number | null | Pontuação composta de engajamento, 0–100. |
| engagement.overall.label | string | null | Rótulo qualitativo, por exemplo "Lúdico / tenso". |
| pillars | string[] | null | Temas 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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (uuid) | Sua campanha a ser lida. |
| page | integer | Opcional, 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
| Campo | Tipo | Descrição |
|---|---|---|
| quests | array | Ativas/estagnadas primeiro, depois concluídas/abandonadas. Metadados internos de edição e links de origem são excluídos. |
| quests[].id | string (uuid) | Identificador da missão. |
| quests[].title | string | Título da missão. |
| quests[].objective | string | O objetivo do grupo. |
| quests[].status | string | active, stale, completed ou abandoned. |
| quests[].progress | string | Progresso mais recente salvo. |
| page | integer | Página atual. |
| has_more | boolean | Solicite 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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descrição |
|---|---|---|
| hooks | array | Ganchos narrativos atualmente abertos. |
| hooks[].text | string | A descrição do gancho. |
| hooks[].session_ref | string | Sessão em que o gancho foi introduzido. |
| hooks[].session_date | string (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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descrição |
|---|---|---|
| sections | array | Seções de memória da campanha para resumo/contexto. |
| sections[].title | string | Cabeçalho da seção. |
| sections[].bullets | string[] | 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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descrição |
|---|---|---|
| likely_directions | array | Próximas direções prováveis, voltadas ao GM. |
| threads_to_watch | string[] | Tramas que o GM pode querer ter em mente. |
| prep_suggestions | string[] | Sugestões concretas de preparação para o GM. |
| credit_cost | number | Sempre 0 para esta ferramenta MCP. |
| cache_policy | string | cached_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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descrição |
|---|---|---|
| sessions | array | Uma entrada por sessão. |
| sessions[].recap_id | string (uuid) | O id do recap/sessão. |
| sessions[].scenes | string[] | 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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (uuid) | A campanha a ser lida. |
| name | string | omitido | Nome/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
| Campo | Tipo | Descrição |
|---|---|---|
| entities | array (modo lista) | Quando nenhum nome é informado: {canonical_name, kind, aliases, search_aliases} para cada entidade. |
| entity | object | null (modo ficha) | Quando um nome é informado: a ficha da entidade resolvida, ou null se o nome não corresponder a nada. |
| candidates | array | Fichas de entidades possíveis quando um alias é ambíguo; vazio quando a resolução é única. |
| entity.id | string (uuid) | Id estável da entidade na campanha. |
| entity.canonical_name | string | Nome canônico da entidade. |
| entity.kind | string | Tipo da entidade. valores: pc | npc | creature | place | item | faction | deity | other |
| entity.aliases | string[] | Aliases de exibição. |
| entity.search_aliases | string[] | Aliases apenas para recuperação. |
| entity.interactions | array | Entradas de histórico fundamentadas com links de recap e de turnos da transcrição. |
| entity.interactions[].recap_id | string (uuid) | Sessão que contém a interação. |
| entity.interactions[].turn_start | integer | null | Primeiro turno da transcrição para o link de evidência. |
| entity.interactions[].turn_end | integer | null | Último turno da transcrição para o link de evidência. |
| entity.interactions[].identity_match | string | confirmed ou suggested; links suggested são possíveis correspondências de alias, não afirmações de identidade canônica. valores: confirmed | suggested |
| entity.relations | array | Grafo de relações (mais antiga → mais recente). |
| entity.relations[].predicate | string | ex.: located_in, ally_of, owns. |
| entity.relations[].recap_id | string (uuid) | Sessão que evidencia a relação. |
| entity.relations[].visibility | string | Visibilidade 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_current | boolean | O 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
| Campo | Tipo | Descrição |
|---|---|---|
| recap_id | string (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
| Campo | Tipo | Descrição |
|---|---|---|
| recap_id | string (uuid) | A sessão à qual estes eventos pertencem. |
| mechanics | array | Eventos de mecânica ancorados em turnos. |
| mechanics[].action | string | Tipo de evento. valores: attack | spell_cast | short_rest | long_rest | consumable_used | condition_applied | ability_used | form_changed |
| mechanics[].actor | string | Quem agiu. |
| mechanics[].evidence_turn_start | integer | Primeiro turno que evidencia o evento. |
| mechanics[].evidence_turn_end | integer | Ú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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (uuid) | A campanha a ser lida. |
Exemplo de saída
{
"documents": [
{
"id": "…",
"title": "The Choosing",
"updated_at": "2026-06-20"
}
]
}
Descrições dos campos
| Campo | Tipo | Descrição |
|---|---|---|
| documents | array | Documentos de lore. |
| documents[].id | string (uuid) | Identificador do documento. |
| documents[].title | string | Tí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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (uuid) | A campanha a ser lida. |
| doc_id | string (uuid) | O documento de lore a ser buscado. |
Exemplo de saída
{
"document": {
"id": "…",
"title": "The Choosing",
"body": "…"
}
}
Descrições dos campos
| Campo | Tipo | Descrição |
|---|---|---|
| document.id | string (uuid) | Identificador do documento. |
| document.title | string | Título do documento. |
| document.body | string | Corpo 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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descrição |
|---|---|---|
| entries | array | Entradas do léxico. |
| entries[].canonical | string | Nome canônico. |
| entries[].type | string | Tipo da entidade. valores: npc | place | item | creature | other |
| entries[].aliases | string[] | Nomes alternativos / aliases. |
| entries[].confidence | number | Confiança da extração, 0–1. |
| entries[].enabled | boolean | Se 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
| Campo | Tipo | Descrição |
|---|---|---|
| recap_id | string (uuid) | O recap/sessão a ser lido. Use list_sessions para descobrir os ids. |
| from | integer | Índice do turno inicial (inclusivo, padrão 0). |
| to | integer | Í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
| Campo | Tipo | Descrição |
|---|---|---|
| total_turns | integer | Total de turnos na sessão. |
| from | integer | Índice inicial retornado. |
| to | integer | Índice final retornado. |
| turns | array | Turnos na janela solicitada. |
| turns[].index | integer | Índice posicional na sessão. |
| turns[].t | string | Timestamp relativo, ex.: ~00:01. |
| turns[].speaker | string | Nome de exibição do falante. |
| turns[].text | string | O 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
| Campo | Tipo | Descrição |
|---|---|---|
| recap_id | string (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
| Campo | Tipo | Descrição |
|---|---|---|
| recap.recap_id | string (uuid) | O id do recap/sessão. |
| recap.content_type | string | Sempre player_recap_html. valores: player_recap_html |
| recap.html | string | O HTML do recap seguro para jogadores. |
| recap.truncated | boolean | True 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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (uuid) | A campanha a ser pesquisada. |
| query | string | Frase exata a ser correspondida (busca de texto completo no texto da transcrição). |
| recap_id | string (uuid) | omitido | Escopo 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
| Campo | Tipo | Descrição |
|---|---|---|
| query | string | Eco da consulta enviada. |
| matches | array | Turnos da transcrição que contêm a frase exata, melhor correspondência primeiro. |
| matches[].recap_id | string (uuid) | Recap/sessão de onde veio a correspondência. |
| matches[].speaker | string | Falante do turno correspondido. |
| matches[].t | string | Timestamp relativo, ex.: ~01:04. |
| matches[].text | string | O 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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (uuid) | A campanha a ser pesquisada. |
| query | string | Palavras-chave a serem correspondidas no texto do beat (busca de texto completo). |
| recap_id | string (uuid) | omitido | Escopo 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
| Campo | Tipo | Descrição |
|---|---|---|
| matches | array | Beats correspondentes, melhor correspondência primeiro. |
| matches[].recap_id | string (uuid) | Sessão de onde veio o beat. |
| matches[].session_number | integer | null | O número da sessão definido pelo GM, quando houver. |
| matches[].session_title | string | null | O título da sessão, quando houver. |
| matches[].scene_title | string | null | Título da cena à qual o beat pertence. |
| matches[].beat_index | integer | A posição do beat dentro de sua cena. |
| matches[].turn_start | integer | Primeiro turno da janela do beat (usar em get_transcript_window). |
| matches[].turn_end | integer | Último turno da janela do beat. |
| matches[].text | string | O texto do beat (limitado a 1200 caracteres). |
| matches[].truncated | boolean | True 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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (uuid) | A campanha a ser pesquisada. |
| query | string | Uma descrição em linguagem natural do que você está procurando. |
| player_safe | boolean (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
| Campo | Tipo | Descrição |
|---|---|---|
| matches | array | Correspondências de memória ranqueadas, melhor correspondência primeiro. |
| matches[].object_id | string (uuid) | O id do objeto de memória. |
| matches[].type | string | O tipo de memória (ex.: plot_event, npc_fact). |
| matches[].visibility | string | Quem sabe disso. Em uma busca player_safe, é sempre apenas visível ao jogador. |
| matches[].recap_id | string (uuid) | null | A sessão de onde a memória veio. |
| matches[].session_number | integer | null | O número da sessão do GM, quando definido. |
| matches[].session_title | string | null | O título da sessão, quando definido. |
| matches[].turn_start | integer | null | Primeiro turno da janela de evidência (alimente em get_transcript_window). |
| matches[].turn_end | integer | null | Último turno da janela de evidência. |
| matches[].text | string | O resumo da memória (limitado a 1200 caracteres). |
| matches[].truncated | boolean | True quando o resumo foi cortado. |
| credit_cost | number | Cré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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (uuid) | A campanha a ser questionada. |
| question | string | Sua pergunta. |
| clarification | object | omitido | Opcional: responda a uma pergunta de esclarecimento feita pelo motor (apenas via GM). |
| clarification.question | string | A pergunta de esclarecimento do motor. |
| clarification.answer | string | Sua resposta a essa pergunta. |
| supersedes | string | omitido | Id 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
| Campo | Tipo | Descrição |
|---|---|---|
| answer_markdown | string | A resposta citada, com marcadores [n] embutidos. |
| citations | array | Metadados de citação que sustentam cada marcador. |
| quotes | array | Citações literais da transcrição usadas como evidência. |
| confidence_label | string | Faixa de confiança aproximada. valores: high | medium | low |
| credit_cost | number | Créditos cobrados por esta resposta. |
| quotes[].turn | integer | O índice do turno citado. |
| quotes[].recap_id | string (uuid) | null | A 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
| Campo | Tipo | Descrição |
|---|---|---|
| campaign_id | string (uuid) | A campanha a ser questionada. |
| question | string | Sua 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
| Campo | Tipo | Descrição |
|---|---|---|
| answer_markdown | string | A resposta citada, com marcadores [n] embutidos. |
| citations | array | Metadados de citação que sustentam cada marcador. |
| quotes | array | Citações literais da transcrição usadas como evidência. |
| confidence_label | string | Faixa de confiança aproximada. valores: high | medium | low |
| credit_cost | number | Cré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.