Recap Raven

oficial

Anotador de notas de D&D para Discord: busca y cita los resúmenes de tus sesiones de TTRPG, misiones, NPCs y transcripciones desde cualquier IA. Requiere una clave API de Recap Raven.

¿Qué puedes hacer con Recap Raven MCP?

  • Listar campañas y sesiones — Pide a tu IA que liste tus campañas y asocie un número de sesión con el resumen correcto antes de extraer detalles.
  • Buscar en transcripciones y escenas — Realiza búsquedas exactas por palabra clave en los turnos de la transcripción o en las escenas para encontrar dónde surgió un nombre, objeto o lugar.
  • Leer resúmenes y fragmentos de transcripción — Obtén un resumen apto para jugadores o un fragmento posicional de los turnos almacenados de una sesión según un rango de índices.
  • Revisar preparación y ganchos abiertos — Extrae los ganchos narrativos sin resolver, un paquete de preparación para la próxima sesión y un resumen de lo anterior para una campaña.
  • Consultar entidades y trasfondo — Obtén la lista de entidades o la ficha de una sola entidad, además de documentos de trasfondo y entradas de léxico.
  • Comprobar participación y misiones — Consulta las tendencias de participación por hablante, el registro de misiones visible para los jugadores y tu uso de créditos de Ask.

Servidor MCP alojado

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

Se instala en Claude Code, Codex, Cursor y más

Documentación

Para flujos de trabajo de IA personalizados

Tus herramientas de campaña, en un cliente de IA compatible.

Lee tus resúmenes y datos de campaña a través de MCP. El acceso existente con clave de API funciona con clientes compatibles. Inicia sesión desde una app de IA que admita una identidad de cliente pública; consulta los requisitos de tu cliente a continuación antes de conectarte.

¿Qué es MCP?

MCP permite que las apps de IA compatibles llamen directamente a las herramientas de Recap Raven. En lugar de copiar resúmenes a otra IA, tu IA puede pedirle a Recap Raven sesiones, ventanas de transcripción, ganchos, entidades, citas y respuestas de campaña.

Primeros pasos

El endpoint remoto de MCP de Raven es https://mcp.recapraven.com/mcp . Elige un cliente para ver las instrucciones de configuración. Premium incluye lecturas deterministas; Searchable Memory es necesario para la búsqueda en memoria y las respuestas de IA.


Endpoint de MCP

https://mcp.recapraven.com/mcp

Configuración de ChatGPT

  1. En el sitio web de ChatGPT, abre Plugins, selecciona + y luego Add custom MCP server. Introduce «Recap Raven» y la URL del servidor que aparece a continuación.
  2. Cuando el inicio de sesión de Raven esté habilitado, elige OAuth y la opción de identidad de cliente publicada (CIMD) con autenticación de cliente público. No se necesita ningún secreto de cliente ni clave de API de Raven. Raven no admite el registro automático de clientes.
  3. Crea el plugin, instálalo y luego inicia sesión en Raven y revisa la identidad de la app y el acceso solicitado. Aprueba únicamente una conexión que hayas iniciado tú.
  4. En una conversación, selecciona Recap Raven con @ y pregunta: «Use Recap Raven to list my campaigns.»
  5. Las herramientas de lectura y escritura dependen de tus permisos y confirmaciones. Si falta la configuración, revisa las restricciones del espacio de trabajo y la guía oficial de configuración de ChatGPT para tu app.

URL del servidor remoto de ChatGPT

https://mcp.recapraven.com/mcp

Ayuda sobre consentimiento y conexión

Una conexión de inicio de sesión de Raven solicitará permiso para acceder a tus campañas, transcripciones e información exclusiva del GM. Los resultados de las herramientas se envían a tu proveedor de IA elegido, y las herramientas de pago consumen tus créditos de Ask existentes.

Si apruebas el acceso en segundo plano, la app puede renovar su conexión durante un máximo de 30 días, incluso cuando hayas cerrado sesión en Raven. Tras la expiración o revocación, vuelve a conectarte y aprueba de nuevo. En Account settings, revisa las conexiones de IA aprobadas y desconecta una conexión o usa Disconnect all AI connections. Las claves de API se gestionan por separado.

¿Resultados vacíos? Comprueba que iniciaste sesión en la cuenta de Raven propietaria de tus campañas. Un cambio de plan puede eliminar el acceso a las herramientas; las respuestas de IA también necesitan créditos disponibles. Si el consentimiento expira o falla, reinicia la conexión desde el cliente.

Los menús ausentes o un espacio de trabajo no compatible no se pueden solucionar cambiando tu clave de Raven. Consulta los requisitos del proveedor enlazados o contacta con nuestra comunidad de Discord indicando el nombre de la app, la versión y el mensaje de error. No envíes tokens ni claves.

Disponible en Premium y Searchable Memory

Premium incluye claves de API y acceso a tus resúmenes, transcripciones y datos manuales de World disponibles. Searchable Memory es necesario para las herramientas de memoria, la búsqueda de campaña y las respuestas de IA. La búsqueda semántica y las respuestas de IA consumen tus créditos de Ask existentes.

Disponibilidad de MCP por plan

Plan gratuitoNo disponible
PremiumClaves de API, resúmenes, transcripciones y datos manuales de World disponibles. Las herramientas de memoria no están incluidas.
Planes con memoriaHerramientas deterministas sin coste adicional; search_corpus usa pocos créditos de chat por búsqueda, y las herramientas ask con citas consumen créditos de Ask.
Clave de APICrea una clave de API personal desde API Keys. Revócala en cualquier momento; el acceso a MCP finaliza cuando la cuenta vuelve al plan gratuito.

Uso justo y límites de velocidad

El servidor MCP es una superficie compartida y medida. Para mantenerlo sostenible (y evitar que un bucle de agente descontrolado consuma una licencia entera en minutos), cada clave de API tiene un límite de velocidad además de tu asignación de Ask.

Límites de velocidad de MCP

Uso justo del servidorLímite de solicitudes por clave de API en el propio servidor MCP (todas las llamadas a herramientas combinadas) — evita que una sola clave sature el endpoint. Las respuestas que superan el límite devuelven 429 con Retry-After.
Premium · todos los planes / Memory · 5 sesiones15 solicitudes/minuto y 150 solicitudes/hora.
Memory · 10 sesiones30 solicitudes/minuto y 450 solicitudes/hora.
Memory · 20 sesiones60 solicitudes/minuto y 1200 solicitudes/hora.
Herramientas gratuitasLimitadas por clave de API. Las lecturas deterministas y las búsquedas por palabra clave (search_transcript, search_facts) no cuestan créditos. La búsqueda semántica search_corpus no está incluida aquí; usa pocos créditos de chat por búsqueda completada.
Herramientas con créditos de chatsearch_corpus (pocos créditos de chat) y las herramientas ask con citas están limitadas por tu asignación de Ask y por un límite de velocidad por clave. La puerta de uso detiene el gasto cuando se agota la asignación; el límite de velocidad evita que una ráfaga la agote al instante. Sin cuota MCP independiente — tu agente gasta los mismos créditos de chat por licencia que usa en la app.

Incluido sin coste adicional

Herramientas de lectura deterministas — sesiones, entidades y el registro, ganchos, mecánicas, participación, búsqueda en transcripciones y beats, resúmenes, lore y léxico. Devuelven datos de campaña almacenados sin inferencia de IA, por lo que las herramientas disponibles no cuestan créditos. Las herramientas de memoria siguen requiriendo Searchable Memory. La búsqueda semántica search_corpus no está incluida en esta lista; usa pocos créditos de chat. Expande cualquier herramienta para ver el ejemplo de entrada, el ejemplo de salida y la referencia de campos.

list_campaigns Sin cargo adicional por herramienta

Herramienta de descubrimiento: enumera las campañas disponibles para tu clave de MCP para que otras herramientas puedan usar el campaign_id correcto.

Ejemplo de entrada

{}

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
campaignsarrayCampañas propiedad de tu cuenta.
campaigns[].campaign_idstring (uuid)Usa este id con las herramientas MCP con ámbito de campaña.
campaigns[].namestringNombre de la campaña.
campaigns[].modulestring | nullEtiqueta opcional de módulo/sistema.

list_sessions Sin cargo adicional por herramienta

Herramienta de descubrimiento: enumera las sesiones listas con su session_number y título, para que un agente pueda asociar «sesión 12» con el recap_id correcto.

Ejemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid) | omitidoFiltro de campaña opcional.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
recapsarraySesiones listas visibles para tu cuenta.
recaps[].recap_idstring (uuid)Usa este id con get_recap, get_transcript_window y get_mechanics_events.
recaps[].campaign_idstring (uuid) | nullCampaña propietaria de la sesión.
recaps[].session_numberinteger | nullLa numeración de sesiones propia del GM basada en 1 (editable por el DM), cuando está definida.
recaps[].titlestring | nullTítulo de la sesión.
recaps[].statusstringSolo se enumeran las sesiones listas.

get_engagement Sin cargo adicional por herramienta

El panel de participación de la campaña: tendencia de participación por hablante y la síntesis entre sesiones en caché (resumen + línea temporal de eventos clave).

Ejemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a leer. Debe ser propiedad de tu cuenta.

Ejemplo de salida

{
  "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
        }
      ]
    }
  ]
}

Descripción de campos

CampoTipoDescripción
sessionsarrayUna entrada por cada sesión lista de la campaña.
sessions[].recap_idstring (uuid)El id del resumen/sesión.
sessions[].session_refstringReferencia humana corta, p. ej. S01AB.
sessions[].session_atstring (ISO 8601)Cuándo comenzó la sesión (UTC).
playersarrayUna entrada por cada hablante reconocido.
players[].speakerstringNombre visible del hablante.
players[].pointsarrayMétricas por sesión de este hablante.
players[].points[].participation_pctnumberPorcentaje de la conversación, 0–100.
players[].points[].turn_countintegerNúmero de turnos de palabra realizados.
players[].points[].talk_time_secondsintegerSegundos totales hablando.
players[].points[].word_countintegerTotal de palabras pronunciadas.

get_credit_balance Sin cargo adicional por herramienta

Tu asignación de Ask como porcentaje usado, más un feed de actividad reciente. Los recuentos brutos de la asignación no se exponen a los clientes MCP.

Ejemplo de entrada

{}

Ejemplo de salida

{
  "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"
    }
  ]
}

Descripción de campos

CampoTipoDescripción
usage.percent_usedintegerUso de Ask en número entero de 0 a 100.
recent_activityarrayFeed del más reciente al más antiguo (eventos session-recorded, recap-ready, credit-ledger).
recent_activity[].typestringTipo de evento.
valores: recap_ready | session_recorded | credit
recent_activity[].labelstringResumen legible por humanos.
recent_activity[].datestring (ISO 8601)Cuándo ocurrió el evento.
recent_activity[].recap_idstring (uuid) | nullPresente para eventos relacionados con resúmenes/sesiones.

get_memory_overview Sin cargo adicional por herramienta

El bloque más rico de conciencia situacional para el GM: distribución, tendencia de participación + puntuación global, participación por sesión, pilares de juego.

Ejemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a leer.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
distributionarrayProporción de juego por categoría.
distribution[].labelstringNombre de la categoría.
distribution[].pctnumberProporción, 0–100.
engagement.overall.scorenumber | nullPuntuación compuesta de participación, 0–100.
engagement.overall.labelstring | nullEtiqueta cualitativa, p. ej. «Juguetón / tenso».
pillarsstring[] | nullTemas recurrentes / pilares de juego.

get_quest_log Sin cargo adicional por herramienta

El registro de misiones visible para los jugadores. Las adiciones y ediciones del GM se comparten con el grupo a través de Discord /questlog. Mantén los secretos del GM fuera.

Ejemplo de entrada

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

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)Tu campaña a leer.
pageintegerOpcional, empezando en 1. Diez misiones por página.

Ejemplo de salida

{
  "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
}

Descripción de campos

CampoTipoDescripción
questsarrayActivas/estancadas primero, luego completadas/abandonadas. Se excluyen los metadatos internos de edición y los enlaces de origen.
quests[].idstring (uuid)Identificador de la misión.
quests[].titlestringTítulo de la misión.
quests[].objectivestringEl objetivo del grupo.
quests[].statusstringactive, stale, completed o abandoned.
quests[].progressstringÚltimo progreso guardado.
pageintegerPágina actual.
has_morebooleanSolicita la página siguiente cuando sea true.

get_open_hooks Sin cargo adicional por herramienta

Ganchos narrativos sin resolver — qué preparar para la próxima sesión.

Ejemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a leer.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
hooksarrayGanchos narrativos actualmente abiertos.
hooks[].textstringLa descripción del gancho.
hooks[].session_refstringSesión en la que se introdujo el gancho.
hooks[].session_datestring (YYYY-MM-DD)Fecha de esa sesión.

get_previously_on Sin cargo adicional por herramienta

Contexto de «anteriormente en» para la campaña, construido a partir de la memoria con ámbito de propietario.

Ejemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a leer.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
sectionsarraySecciones de memoria de la campaña para resumen/contexto.
sections[].titlestringEncabezado de la sección.
sections[].bulletsstring[]Puntos de memoria concisos.

get_next_session_prep_pack Sin cargo adicional por herramienta Aviso de preparación para la próxima sesión, solo para el GM, procedente de la caché de preparación de Recap Raven. Puede generarse una vez y luego permanece en caché hasta que se ingiera el siguiente resumen. Devuelve credit_cost: 0.

Ejemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña para la que preparar. Debe ser propiedad de tu cuenta.

Ejemplo de salida

{
  "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"
}

Descripción de campos

CampoTipoDescripción
likely_directionsarrayDirecciones probables siguientes, orientadas al GM.
threads_to_watchstring[]Tramas que el GM quizá quiera tener en cuenta.
prep_suggestionsstring[]Indicaciones concretas de preparación para el GM.
credit_costnumberSiempre 0 para esta herramienta MCP.
cache_policystringcached_until_next_recap_ingested.

get_chronicle Sin cargo adicional por herramienta

Mapa de escenas por sesión: la crónica estructurada de la campaña.

Ejemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a leer.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
sessionsarrayUna entrada por sesión.
sessions[].recap_idstring (uuid)El id del resumen/sesión.
sessions[].scenesstring[]Etiquetas de escena ordenadas para esa sesión.

get_entity Sin cargo adicional por herramienta

El registro de entidades visible para los jugadores, derivado de las sesiones registradas; el lore privado subido queda excluido. Sin nombre, devuelve la lista. Con un nombre o alias, devuelve la ficha correspondiente, el historial de interacciones, los enlaces a turnos de la transcripción, las relaciones o los candidatos en caso de ambigüedad.

Ejemplo de entrada

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

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a leer.
namestring | omitidoNombre/alias de la entidad a resolver en una única ficha. Omítelo para obtener la lista.

Ejemplo de salida

{
  "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"
      }
    ]
  }
}

Descripción de campos

CampoTipoDescripción
entitiesarray (modo lista)Cuando no se da nombre: {canonical_name, kind, aliases, search_aliases} para cada entidad.
entityobject | null (modo ficha)Cuando se da un nombre: la ficha de entidad resuelta, o null si el nombre no coincide con nada.
candidatesarrayPosibles fichas de entidad cuando un alias es ambiguo; vacío cuando la resolución es única.
entity.idstring (uuid)Id estable de la entidad en la campaña.
entity.canonical_namestringNombre canónico de la entidad.
entity.kindstringTipo de entidad.
valores: pc | npc | creature | place | item | faction | deity | other
entity.aliasesstring[]Alias de visualización.
entity.search_aliasesstring[]Alias solo para recuperación.
entity.interactionsarrayEntradas de historial fundamentadas con enlaces a resúmenes y turnos de la transcripción.
entity.interactions[].recap_idstring (uuid)Sesión que contiene la interacción.
entity.interactions[].turn_startinteger | nullPrimer turno de la transcripción para el enlace de evidencia.
entity.interactions[].turn_endinteger | nullÚltimo turno de la transcripción para el enlace de evidencia.
entity.interactions[].identity_matchstringconfirmed o suggested; los enlaces suggested son posibles coincidencias de alias, no afirmaciones de identidad canónica.
valores: confirmed | suggested
entity.relationsarrayGrafo de relaciones (del más antiguo al más reciente).
entity.relations[].predicatestringp. ej. located_in, ally_of, owns.
entity.relations[].recap_idstring (uuid)Sesión que evidencia la relación.
entity.relations[].visibilitystringVisibilidad para el GM de la arista. Los datos heredados anteriores a la testificación pueden contener aristas dm_only; no las muestres a los jugadores.
valores: player_known | dm_only
entity.relations[].is_currentbooleanLa parte vigente de un predicado con estado.

get_mechanics_events Sin cargo adicional por herramienta

Eventos de mecánicas anclados a turnos (ataques, conjuros, daño, descansos, condiciones) de una sesión: los mismos datos que la pestaña de mecánicas.

Ejemplo de entrada

{
  "recap_id": "…"
}

Descripción de campos

CampoTipoDescripción
recap_idstring (uuid)La sesión a leer. Usa list_sessions para descubrir los ids.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
recap_idstring (uuid)La sesión a la que pertenecen estos eventos.
mechanicsarrayEventos de mecánicas anclados a turnos.
mechanics[].actionstringTipo de evento.
valores: attack | spell_cast | short_rest | long_rest | consumable_used | condition_applied | ability_used | form_changed
mechanics[].actorstringQuién actuó.
mechanics[].evidence_turn_startintegerPrimer turno que evidencia el evento.
mechanics[].evidence_turn_endintegerÚltimo turno que evidencia el evento.

get_lore_documents Sin cargo adicional por herramienta

La lista de documentos de lore de la campaña.

Ejemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a leer.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
documentsarrayDocumentos de lore.
documents[].idstring (uuid)Identificador del documento.
documents[].titlestringTítulo del documento.

get_lore_document Sin cargo adicional por herramienta

Un único documento de lore con su cuerpo completo.

Ejemplo de entrada

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

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a leer.
doc_idstring (uuid)El documento de lore a obtener.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
document.idstring (uuid)Identificador del documento.
document.titlestringTítulo del documento.
document.bodystringCuerpo completo del documento (markdown).

get_lexicon Sin cargo adicional por herramienta

Entradas del léxico (nombres canónicos, alias, tipo, confianza).

Ejemplo de entrada

{
  "campaign_id": "a1b2c3d4-…"
}

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a leer.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
entriesarrayEntradas del léxico.
entries[].canonicalstringNombre canónico.
entries[].typestringTipo de entidad.
valores: npc | place | item | creature | other
entries[].aliasesstring[]Nombres alternativos / alias.
entries[].confidencenumberConfianza de la extracción, 0–1.
entries[].enabledbooleanSi esta entrada está activa.

get_transcript_window Sin cargo adicional por herramienta

Una porción posicional de los turnos almacenados de una sesión (sin búsqueda de contenido: solo índices de turno desde/hasta).

Ejemplo de entrada

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

Descripción de campos

CampoTipoDescripción
recap_idstring (uuid)El resumen/sesión a leer. Usa list_sessions para descubrir los ids.
fromintegerÍndice de turno inicial (inclusive, por defecto 0).
tointegerÍndice de turno final. Omítelo para obtener una ventana de 50 turnos desde el índice inicial.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
total_turnsintegerTotal de turnos de la sesión.
fromintegerÍndice inicial devuelto.
tointegerÍndice final devuelto.
turnsarrayTurnos de la ventana solicitada.
turns[].indexintegerÍndice posicional en la sesión.
turns[].tstringMarca de tiempo relativa, p. ej. ~00:01.
turns[].speakerstringNombre visible del hablante.
turns[].textstringEl texto hablado.

get_recap Sin cargo adicional por herramienta

El HTML del resumen seguro para jugadores de un resumen listo. El tipo de artefacto lo gestiona el servidor; no hay entrada de tipo.

Ejemplo de entrada

{
  "recap_id": "…"
}

Descripción de campos

CampoTipoDescripción
recap_idstring (uuid)El resumen/sesión cuyo resumen seguro para jugadores debe obtenerse.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
recap.recap_idstring (uuid)El id del resumen/sesión.
recap.content_typestringSiempre player_recap_html.
valores: player_recap_html
recap.htmlstringEl HTML del resumen seguro para jugadores.
recap.truncatedbooleanVerdadero cuando el límite de respuesta de MCP recortó el HTML.

search_transcript Sin cargo adicional por herramienta

Búsqueda por palabra clave exacta (texto completo) sobre los turnos de la transcripción de tu campaña. Devuelve los turnos que contienen la frase exacta, con su sesión, hablante y marca de tiempo: sin LLM, sin embeddings, sin créditos.

Ejemplo de entrada

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

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a buscar.
querystringFrase exacta a coincidir (búsqueda de texto completo sobre el texto de la transcripción).
recap_idstring (uuid) | omitidoÁmbito de sesión opcional. Usa list_sessions para descubrir los ids de resumen.

Ejemplo de salida

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

Descripción de campos

CampoTipoDescripción
querystringEco de la consulta enviada.
matchesarrayTurnos de la transcripción que contienen la frase exacta, mejor coincidencia primero.
matches[].recap_idstring (uuid)Resumen/sesión de donde proviene la coincidencia.
matches[].speakerstringHablante del turno coincidente.
matches[].tstringMarca de tiempo relativa, p. ej. ~01:04.
matches[].textstringEl texto de la transcripción coincidente.

search_facts Sin cargo adicional por herramienta

Búsqueda de texto completo por palabra clave sobre los beats de escena de tu campaña: los resúmenes densos, beat a beat, sobre los que razona el carril de chat. Ideal para términos exactos (un nombre, un objeto, un lugar). Devuelve el texto del beat con su contexto de escena/sesión y el rango de turnos, de modo que un agente pueda localizar el momento y extraer después la ventana exacta de la transcripción. Sin LLM, sin embeddings, sin créditos. Para búsquedas por significado en lenguaje natural, usa search_corpus.

Ejemplo de entrada

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

Descripción de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a buscar.
querystringPalabras clave a coincidir con el texto del beat (búsqueda de texto completo).
recap_idstring (uuid) | omitidoÁmbito de sesión opcional. Usa list_sessions para descubrir los ids de resumen.

Ejemplo de salida

{
  "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
    }
  ]
}

Descripción de campos

CampoTipoDescripción
matchesarrayBeats coincidentes, mejor coincidencia primero.
matches[].recap_idstring (uuid)Sesión de donde proviene el beat.
matches[].session_numberinteger | nullEl número de sesión del GM, cuando está definido.
matches[].session_titlestring | nullEl título de la sesión, cuando está definido.
matches[].scene_titlestring | nullTítulo de la escena a la que pertenece el beat.
matches[].beat_indexintegerPosición del beat dentro de su escena.
matches[].turn_startintegerPrimer turno de la ventana del beat (pásalo a get_transcript_window).
matches[].turn_endintegerÚltimo turno de la ventana del beat.
matches[].textstringEl texto del beat (limitado a 1200 caracteres).
matches[].truncatedbooleanVerdadero cuando el texto del beat fue recortado.

Usa créditos de chat

Tres herramientas consumen créditos de chat medidos. Piensa en buscador frente a respuesta: search_corpus (pocos créditos de chat) te entrega las mejores coincidencias como evidencia estructurada para que tu propio modelo razone sobre ellas: un buscador rápido, no un índice exhaustivo; ask_campaign_cited responde a una pregunta orientada al GM con citas textuales de la transcripción y referencias a turnos; y ask_player_campaign_cited ofrece la versión más breve orientada a los jugadores a través del carril de jugadores. Todas tienen límite de frecuencia por clave de API, además de tu saldo.

search_corpus Usa pocos créditos de chat search_corpus encuentra momentos relevantes de la campaña incluso cuando no conoces la redacción exacta. Utiliza búsqueda semántica y reranking para devolver las coincidencias de evidencia más sólidas, incluidos el resumen, el contexto de la sesión y los rangos de turnos. Es un buscador, no un índice exhaustivo: solo se devuelven las mejores coincidencias, así que trata un resultado vacío o escaso como «no surgió nada sólido», no como prueba de que no existe nada. Usa las coincidencias para descubrir los términos o nombres reales que utilizó la tabla y, después, ejecuta una búsqueda exhaustiva por palabra clave gratuita con search_facts / search_transcript, o lleva los rangos de turnos directamente a get_transcript_window para obtener el segmento literal. Para una respuesta definitiva y verificada a una pregunta —citas literales y referencias—, usa ask_campaign_cited en su lugar (más costoso, una respuesta escrita en lugar de filas estructuradas). Establece player_safe: true para excluir el contenido exclusivo del GM de los resultados de búsqueda. Usa pocos créditos de chat por búsqueda, cobrados en cualquier búsqueda completada, incluso en una sin coincidencias.

Ejemplo de entrada

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

Descripciones de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña que se va a buscar.
querystringUna descripción en lenguaje natural de lo que buscas.
player_safeboolean (predeterminado false)Cuando es true, la recuperación se filtra por visibilidad: se excluyen la memoria exclusiva del GM, la inferida y la de especulación, y el lore tipificado como GM. Úsalo para cualquier cosa que vayan a ver los jugadores.

Ejemplo de salida

{
  "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>"
}

Descripciones de campos

CampoTipoDescripción
matchesarrayCoincidencias de memoria ordenadas, la mejor primero.
matches[].object_idstring (uuid)El id del objeto de memoria.
matches[].typestringEl tipo de memoria (p. ej. plot_event, npc_fact).
matches[].visibilitystringQuién conoce esto. En una búsqueda player_safe solo es visible para jugadores.
matches[].recap_idstring (uuid) | nullLa sesión de la que proviene la memoria.
matches[].session_numberinteger | nullEl número de sesión del GM, cuando está establecido.
matches[].session_titlestring | nullEl título de la sesión, cuando está establecido.
matches[].turn_startinteger | nullPrimer turno de la ventana de evidencia (pásalo a get_transcript_window).
matches[].turn_endinteger | nullÚltimo turno de la ventana de evidencia.
matches[].textstringEl resumen de la memoria (limitado a 1200 caracteres).
matches[].truncatedbooleanTrue cuando el resumen se recortó.
credit_costnumberCréditos de chat cobrados por esta búsqueda completada.

ask_campaign_cited Usa créditos de chat

Hazle a tu campaña una pregunta factual orientada al GM y obtén la respuesta de la IA: el mismo motor de respuestas de beats que en el chat de la aplicación, con citas literales de la transcripción y referencias de turnos. Usa créditos de chat del GM, el mismo coste que el chat de la aplicación. Con límite de frecuencia por clave de API además de tu saldo.

Ejemplo de entrada

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

Descripciones de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a la que se va a preguntar.
questionstringTu pregunta.
clarificationobject | omitidoOpcional: responde a una pregunta aclaratoria que hizo el motor (solo canal del GM).
clarification.questionstringLa pregunta aclaratoria del motor.
clarification.answerstringTu respuesta a esa pregunta.
supersedesstring | omitidoId del mensaje de una respuesta anterior que se va a reemplazar (solo canal del GM).

Ejemplo de salida

{
  "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
}

Descripciones de campos

CampoTipoDescripción
answer_markdownstringLa respuesta citada, con marcadores [n] en línea.
citationsarrayMetadatos de citación que respaldan cada marcador.
quotesarrayCitas literales de la transcripción usadas como evidencia.
confidence_labelstringBanda de confianza aproximada.
valores: high | medium | low
credit_costnumberCréditos cobrados por esta respuesta.
quotes[].turnintegerEl índice del turno citado.
quotes[].recap_idstring (uuid) | nullLa sesión de la que proviene la cita.

ask_player_campaign_cited Usa créditos de chat

Haz una pregunta factual de campaña orientada a jugadores y obtén una respuesta breve y segura para jugadores con citas de la transcripción. El contenido exclusivo del GM se excluye mediante el canal de jugadores del lado del servidor. Usa créditos de chat de jugador.

Ejemplo de entrada

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

Descripciones de campos

CampoTipoDescripción
campaign_idstring (uuid)La campaña a la que se va a preguntar.
questionstringTu pregunta.

Ejemplo de salida

{
  "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
}

Descripciones de campos

CampoTipoDescripción
answer_markdownstringLa respuesta citada, con marcadores [n] en línea.
citationsarrayMetadatos de citación que respaldan cada marcador.
quotesarrayCitas literales de la transcripción usadas como evidencia.
confidence_labelstringBanda de confianza aproximada.
valores: high | medium | low
credit_costnumberCréditos cobrados por esta respuesta.

Ejemplo seguro para jugadores

¿Estás creando un bot o una superposición orientados a jugadores? Usa la herramienta de citación para jugadores para que la respuesta provenga del canal de jugadores, cuyo registro filtrado por visibilidad nunca incluye contenido exclusivo del GM:

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

A dónde van tus datos

Cuando conectas un cliente MCP y usas estas herramientas, el contenido de tu campaña se envía al cliente de IA que elijas —por ejemplo, ChatGPT, Claude o Gemini—. Los términos de uso de datos y entrenamiento de ese proveedor se aplican a lo que le envías, no a los nuestros.

La garantía de no entrenamiento de Recap Raven cubre nuestro propio pipeline y los proveedores de modelos que divulgamos. No puede cubrir un cliente que conectes: al configurar uno, estás eligiendo un nuevo procesador para los datos de tu campaña. Revisa los términos de ese cliente antes de conectarlo y usa ask_player_campaign_cited o los filtros de búsqueda seguros para jugadores (y evita las lecturas exclusivas del GM como el lore y la crónica) para cualquier cosa que vayan a ver los jugadores.

¿Preguntas o comentarios? Descubre cómo funciona Recap Raven o invita al bot de abajo.

Ejecuta Recap Raven en tu próxima sesión

Invita al bot, crea tu campaña y obtén recaps gratuitos cada mes.

Ejecuta Recap Raven en tu próxima sesión

No se requiere tarjeta · Graba solo con el consentimiento de tu mesa · Elimina o exporta tus datos en cualquier momento

¿Preguntas o comentarios? Únete a nuestra comunidad de Discord →

Diseñado para voz de Discord. Capturamos toda la sesión por ti: sin iniciar sesión después, sin archivos que enviarnos y sin adivinar quién habló. Los planes de memoria mantienen tu wiki del mundo editable al día mientras juegas, lista para preguntas sobre lo que pasó, quién dijo qué, hilos abiertos y qué preparar a continuación.