Recap Raven
oficialAnotador 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
- 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.
- 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.
- 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ú.
- En una conversación, selecciona Recap Raven con @ y pregunta: «Use Recap Raven to list my campaigns.»
- 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 gratuito | No disponible |
| Premium | Claves de API, resúmenes, transcripciones y datos manuales de World disponibles. Las herramientas de memoria no están incluidas. |
| Planes con memoria | Herramientas 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 API | Crea 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 servidor | Lí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 sesiones | 15 solicitudes/minuto y 150 solicitudes/hora. |
| Memory · 10 sesiones | 30 solicitudes/minuto y 450 solicitudes/hora. |
| Memory · 20 sesiones | 60 solicitudes/minuto y 1200 solicitudes/hora. |
| Herramientas gratuitas | Limitadas 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 chat | search_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
| Campo | Tipo | Descripción |
|---|---|---|
| campaigns | array | Campañas propiedad de tu cuenta. |
| campaigns[].campaign_id | string (uuid) | Usa este id con las herramientas MCP con ámbito de campaña. |
| campaigns[].name | string | Nombre de la campaña. |
| campaigns[].module | string | null | Etiqueta 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (uuid) | omitido | Filtro 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
| Campo | Tipo | Descripción |
|---|---|---|
| recaps | array | Sesiones listas visibles para tu cuenta. |
| recaps[].recap_id | string (uuid) | Usa este id con get_recap, get_transcript_window y get_mechanics_events. |
| recaps[].campaign_id | string (uuid) | null | Campaña propietaria de la sesión. |
| recaps[].session_number | integer | null | La numeración de sesiones propia del GM basada en 1 (editable por el DM), cuando está definida. |
| recaps[].title | string | null | Título de la sesión. |
| recaps[].status | string | Solo 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| sessions | array | Una entrada por cada sesión lista de la campaña. |
| sessions[].recap_id | string (uuid) | El id del resumen/sesión. |
| sessions[].session_ref | string | Referencia humana corta, p. ej. S01AB. |
| sessions[].session_at | string (ISO 8601) | Cuándo comenzó la sesión (UTC). |
| players | array | Una entrada por cada hablante reconocido. |
| players[].speaker | string | Nombre visible del hablante. |
| players[].points | array | Métricas por sesión de este hablante. |
| players[].points[].participation_pct | number | Porcentaje de la conversación, 0–100. |
| players[].points[].turn_count | integer | Número de turnos de palabra realizados. |
| players[].points[].talk_time_seconds | integer | Segundos totales hablando. |
| players[].points[].word_count | integer | Total 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
| Campo | Tipo | Descripción |
|---|---|---|
| usage.percent_used | integer | Uso de Ask en número entero de 0 a 100. |
| recent_activity | array | Feed del más reciente al más antiguo (eventos session-recorded, recap-ready, credit-ledger). |
| recent_activity[].type | string | Tipo de evento. valores: recap_ready | session_recorded | credit |
| recent_activity[].label | string | Resumen legible por humanos. |
| recent_activity[].date | string (ISO 8601) | Cuándo ocurrió el evento. |
| recent_activity[].recap_id | string (uuid) | null | Presente 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| distribution | array | Proporción de juego por categoría. |
| distribution[].label | string | Nombre de la categoría. |
| distribution[].pct | number | Proporción, 0–100. |
| engagement.overall.score | number | null | Puntuación compuesta de participación, 0–100. |
| engagement.overall.label | string | null | Etiqueta cualitativa, p. ej. «Juguetón / tenso». |
| pillars | string[] | null | Temas 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (uuid) | Tu campaña a leer. |
| page | integer | Opcional, 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
| Campo | Tipo | Descripción |
|---|---|---|
| quests | array | Activas/estancadas primero, luego completadas/abandonadas. Se excluyen los metadatos internos de edición y los enlaces de origen. |
| quests[].id | string (uuid) | Identificador de la misión. |
| quests[].title | string | Título de la misión. |
| quests[].objective | string | El objetivo del grupo. |
| quests[].status | string | active, stale, completed o abandoned. |
| quests[].progress | string | Último progreso guardado. |
| page | integer | Página actual. |
| has_more | boolean | Solicita 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| hooks | array | Ganchos narrativos actualmente abiertos. |
| hooks[].text | string | La descripción del gancho. |
| hooks[].session_ref | string | Sesión en la que se introdujo el gancho. |
| hooks[].session_date | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| sections | array | Secciones de memoria de la campaña para resumen/contexto. |
| sections[].title | string | Encabezado de la sección. |
| sections[].bullets | string[] | 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| likely_directions | array | Direcciones probables siguientes, orientadas al GM. |
| threads_to_watch | string[] | Tramas que el GM quizá quiera tener en cuenta. |
| prep_suggestions | string[] | Indicaciones concretas de preparación para el GM. |
| credit_cost | number | Siempre 0 para esta herramienta MCP. |
| cache_policy | string | cached_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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| sessions | array | Una entrada por sesión. |
| sessions[].recap_id | string (uuid) | El id del resumen/sesión. |
| sessions[].scenes | string[] | 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (uuid) | La campaña a leer. |
| name | string | omitido | Nombre/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
| Campo | Tipo | Descripción |
|---|---|---|
| entities | array (modo lista) | Cuando no se da nombre: {canonical_name, kind, aliases, search_aliases} para cada entidad. |
| entity | object | null (modo ficha) | Cuando se da un nombre: la ficha de entidad resuelta, o null si el nombre no coincide con nada. |
| candidates | array | Posibles fichas de entidad cuando un alias es ambiguo; vacío cuando la resolución es única. |
| entity.id | string (uuid) | Id estable de la entidad en la campaña. |
| entity.canonical_name | string | Nombre canónico de la entidad. |
| entity.kind | string | Tipo de entidad. valores: pc | npc | creature | place | item | faction | deity | other |
| entity.aliases | string[] | Alias de visualización. |
| entity.search_aliases | string[] | Alias solo para recuperación. |
| entity.interactions | array | Entradas de historial fundamentadas con enlaces a resúmenes y turnos de la transcripción. |
| entity.interactions[].recap_id | string (uuid) | Sesión que contiene la interacción. |
| entity.interactions[].turn_start | integer | null | Primer turno de la transcripción para el enlace de evidencia. |
| entity.interactions[].turn_end | integer | null | Último turno de la transcripción para el enlace de evidencia. |
| entity.interactions[].identity_match | string | confirmed o suggested; los enlaces suggested son posibles coincidencias de alias, no afirmaciones de identidad canónica. valores: confirmed | suggested |
| entity.relations | array | Grafo de relaciones (del más antiguo al más reciente). |
| entity.relations[].predicate | string | p. ej. located_in, ally_of, owns. |
| entity.relations[].recap_id | string (uuid) | Sesión que evidencia la relación. |
| entity.relations[].visibility | string | Visibilidad 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_current | boolean | La 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
| Campo | Tipo | Descripción |
|---|---|---|
| recap_id | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| recap_id | string (uuid) | La sesión a la que pertenecen estos eventos. |
| mechanics | array | Eventos de mecánicas anclados a 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 | Quién actuó. |
| mechanics[].evidence_turn_start | integer | Primer turno que evidencia el evento. |
| mechanics[].evidence_turn_end | integer | Ú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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (uuid) | La campaña a leer. |
Ejemplo de salida
{
"documents": [
{
"id": "…",
"title": "The Choosing",
"updated_at": "2026-06-20"
}
]
}
Descripción de campos
| Campo | Tipo | Descripción |
|---|---|---|
| documents | array | Documentos de lore. |
| documents[].id | string (uuid) | Identificador del documento. |
| documents[].title | string | Tí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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (uuid) | La campaña a leer. |
| doc_id | string (uuid) | El documento de lore a obtener. |
Ejemplo de salida
{
"document": {
"id": "…",
"title": "The Choosing",
"body": "…"
}
}
Descripción de campos
| Campo | Tipo | Descripción |
|---|---|---|
| document.id | string (uuid) | Identificador del documento. |
| document.title | string | Título del documento. |
| document.body | string | Cuerpo 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| entries | array | Entradas del léxico. |
| entries[].canonical | string | Nombre canónico. |
| entries[].type | string | Tipo de entidad. valores: npc | place | item | creature | other |
| entries[].aliases | string[] | Nombres alternativos / alias. |
| entries[].confidence | number | Confianza de la extracción, 0–1. |
| entries[].enabled | boolean | Si 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
| Campo | Tipo | Descripción |
|---|---|---|
| recap_id | string (uuid) | El resumen/sesión a leer. Usa list_sessions para descubrir los ids. |
| from | integer | Índice de turno inicial (inclusive, por defecto 0). |
| to | integer | Í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
| Campo | Tipo | Descripción |
|---|---|---|
| total_turns | integer | Total de turnos de la sesión. |
| from | integer | Índice inicial devuelto. |
| to | integer | Índice final devuelto. |
| turns | array | Turnos de la ventana solicitada. |
| turns[].index | integer | Índice posicional en la sesión. |
| turns[].t | string | Marca de tiempo relativa, p. ej. ~00:01. |
| turns[].speaker | string | Nombre visible del hablante. |
| turns[].text | string | El 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
| Campo | Tipo | Descripción |
|---|---|---|
| recap_id | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| recap.recap_id | string (uuid) | El id del resumen/sesión. |
| recap.content_type | string | Siempre player_recap_html. valores: player_recap_html |
| recap.html | string | El HTML del resumen seguro para jugadores. |
| recap.truncated | boolean | Verdadero 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (uuid) | La campaña a buscar. |
| query | string | Frase exacta a coincidir (búsqueda de texto completo sobre el texto de la transcripción). |
| recap_id | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| query | string | Eco de la consulta enviada. |
| matches | array | Turnos de la transcripción que contienen la frase exacta, mejor coincidencia primero. |
| matches[].recap_id | string (uuid) | Resumen/sesión de donde proviene la coincidencia. |
| matches[].speaker | string | Hablante del turno coincidente. |
| matches[].t | string | Marca de tiempo relativa, p. ej. ~01:04. |
| matches[].text | string | El 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (uuid) | La campaña a buscar. |
| query | string | Palabras clave a coincidir con el texto del beat (búsqueda de texto completo). |
| recap_id | string (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
| Campo | Tipo | Descripción |
|---|---|---|
| matches | array | Beats coincidentes, mejor coincidencia primero. |
| matches[].recap_id | string (uuid) | Sesión de donde proviene el beat. |
| matches[].session_number | integer | null | El número de sesión del GM, cuando está definido. |
| matches[].session_title | string | null | El título de la sesión, cuando está definido. |
| matches[].scene_title | string | null | Título de la escena a la que pertenece el beat. |
| matches[].beat_index | integer | Posición del beat dentro de su escena. |
| matches[].turn_start | integer | Primer turno de la ventana del beat (pásalo a get_transcript_window). |
| matches[].turn_end | integer | Último turno de la ventana del beat. |
| matches[].text | string | El texto del beat (limitado a 1200 caracteres). |
| matches[].truncated | boolean | Verdadero 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (uuid) | La campaña que se va a buscar. |
| query | string | Una descripción en lenguaje natural de lo que buscas. |
| player_safe | boolean (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
| Campo | Tipo | Descripción |
|---|---|---|
| matches | array | Coincidencias de memoria ordenadas, la mejor primero. |
| matches[].object_id | string (uuid) | El id del objeto de memoria. |
| matches[].type | string | El tipo de memoria (p. ej. plot_event, npc_fact). |
| matches[].visibility | string | Quién conoce esto. En una búsqueda player_safe solo es visible para jugadores. |
| matches[].recap_id | string (uuid) | null | La sesión de la que proviene la memoria. |
| matches[].session_number | integer | null | El número de sesión del GM, cuando está establecido. |
| matches[].session_title | string | null | El título de la sesión, cuando está establecido. |
| matches[].turn_start | integer | null | Primer turno de la ventana de evidencia (pásalo a get_transcript_window). |
| matches[].turn_end | integer | null | Último turno de la ventana de evidencia. |
| matches[].text | string | El resumen de la memoria (limitado a 1200 caracteres). |
| matches[].truncated | boolean | True cuando el resumen se recortó. |
| credit_cost | number | Cré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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (uuid) | La campaña a la que se va a preguntar. |
| question | string | Tu pregunta. |
| clarification | object | omitido | Opcional: responde a una pregunta aclaratoria que hizo el motor (solo canal del GM). |
| clarification.question | string | La pregunta aclaratoria del motor. |
| clarification.answer | string | Tu respuesta a esa pregunta. |
| supersedes | string | omitido | Id 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
| Campo | Tipo | Descripción |
|---|---|---|
| answer_markdown | string | La respuesta citada, con marcadores [n] en línea. |
| citations | array | Metadatos de citación que respaldan cada marcador. |
| quotes | array | Citas literales de la transcripción usadas como evidencia. |
| confidence_label | string | Banda de confianza aproximada. valores: high | medium | low |
| credit_cost | number | Créditos cobrados por esta respuesta. |
| quotes[].turn | integer | El índice del turno citado. |
| quotes[].recap_id | string (uuid) | null | La 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
| Campo | Tipo | Descripción |
|---|---|---|
| campaign_id | string (uuid) | La campaña a la que se va a preguntar. |
| question | string | Tu 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
| Campo | Tipo | Descripción |
|---|---|---|
| answer_markdown | string | La respuesta citada, con marcadores [n] en línea. |
| citations | array | Metadatos de citación que respaldan cada marcador. |
| quotes | array | Citas literales de la transcripción usadas como evidencia. |
| confidence_label | string | Banda de confianza aproximada. valores: high | medium | low |
| credit_cost | number | Cré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.