Recap Raven
offiziellDiscord-D&D-Notiznehmer: Durchsuche und zitiere deine TTRPG-Sitzungszusammenfassungen, Quests, NSCs und Transkripte von jeder KI. Erfordert einen Recap Raven API-Schlüssel.
Was kann man mit Recap Raven MCP machen?
- Kampagnen und Sitzungen auflisten — Bitte deine KI, deine Kampagnen aufzulisten und eine Sitzungsnummer der richtigen Zusammenfassung zuzuordnen, bevor Details abgerufen werden.
- Transkripte und Beats durchsuchen — Führe exakte Stichwortsuche über Transkript-Turns oder Szenen-Beats aus, um zu finden, wo ein Name, Gegenstand oder Ort vorkam.
- Zusammenfassungen und Transkriptfenster lesen — Rufe eine spielersichere Zusammenfassung oder einen positionsbasierten Ausschnitt der gespeicherten Turns einer Sitzung nach Indexbereich ab.
- Vorbereitung und offene Hooks prüfen — Hole ungelöste narrative Hooks, ein Vorbereitungspaket für die nächste Sitzung und eine „Bisher geschah"-Zusammenfassung für eine Kampagne.
- Entitäten und Lore nachschlagen — Erhalte das Entitätenverzeichnis oder eine einzelne Entitätenkarte sowie Lore-Dokumente und Lexikoneinträge.
- Engagement und Quests prüfen — Lies Teilnahmetrends pro Sprecher, das spielersichtbare Quest-Log und deinen Ask-Guthabenverbrauch.
Gehosteter MCP-Server
npx add-mcp 'https://mcp.recapraven.com/mcp'Installiert in Claude Code, Codex, Cursor und mehr
Dokumentation
Für individuelle KI-Workflows
Deine Kampagnen-Tools in einem kompatiblen KI-Client.
Lies deine Zusammenfassungen und Kampagnendaten über MCP. Der bestehende API-Key-Zugriff funktioniert mit kompatiblen Clients. Melde dich aus einer KI-App an, die eine öffentliche Client-Identität unterstützt; prüfe die Anforderungen deines Clients unten, bevor du dich verbindest.
Was ist MCP?
MCP ermöglicht kompatiblen KI-Apps, Recap Raven-Tools direkt aufzurufen. Statt Zusammenfassungen in eine andere KI zu kopieren, kann deine KI Recap Raven nach Sitzungen, Transkriptfenstern, Hooks, Entitäten, Zitaten und Kampagnenantworten fragen.
Erste Schritte
Ravens Remote-MCP-Endpunkt ist https://mcp.recapraven.com/mcp . Wähle einen Client für die Einrichtungsanleitung. Premium umfasst deterministische Lesezugriffe; Searchable Memory ist für die Speichersuche und KI-Antworten erforderlich.
MCP-Endpunkt
https://mcp.recapraven.com/mcp
ChatGPT-Einrichtung
- Öffne auf der ChatGPT-Website Plugins, wähle + und dann Add custom MCP server. Gib „Recap Raven“ und die unten stehende Server-URL ein.
- Wenn die Raven-Anmeldung aktiviert ist, wähle OAuth und die Option für veröffentlichte Client-Identität (CIMD) mit Public-Client-Authentifizierung. Es ist kein Client-Secret und kein Raven-API-Key erforderlich. Die automatische Client-Registrierung wird von Raven nicht unterstützt.
- Erstelle das Plugin, installiere es und melde dich dann bei Raven an, um die App-Identität und den angeforderten Zugriff zu prüfen. Genehmige nur eine Verbindung, die du selbst gestartet hast.
- Wähle in einer Unterhaltung Recap Raven mit @ aus und frage: „Use Recap Raven to list my campaigns.“
- Lese- und Schreib-Tools hängen von deinen Berechtigungen und Bestätigungen ab. Wenn die Einrichtung fehlt, prüfe die Workspace-Einschränkungen und die offizielle ChatGPT-Einrichtungsanleitung für deine App.
Remote-Server-URL für ChatGPT
https://mcp.recapraven.com/mcp
Hilfe zu Einwilligung und Verbindung
Eine Raven-Anmeldeverbindung fragt nach der Erlaubnis, auf deine Kampagnen, Transkripte und GM-exklusive Informationen zuzugreifen. Tool-Ergebnisse gehen an deinen gewählten KI-Anbieter, und kostenpflichtige Tools verbrauchen deine bestehenden Ask-Credits.
Wenn du Hintergrundzugriff genehmigst, kann die App ihre Verbindung bis zu 30 Tage lang erneuern, auch wenn du bei Raven abgemeldet bist. Nach Ablauf oder Widerruf verbinde dich erneut und genehmige erneut. In den Kontoeinstellungen kannst du genehmigte KI-Verbindungen prüfen und eine Verbindung trennen oder Disconnect all AI connections verwenden. API-Keys werden separat verwaltet.
Leere Ergebnisse? Prüfe, ob du dich beim Raven-Konto angemeldet hast, dem deine Kampagnen gehören. Eine Planänderung kann den Tool-Zugriff entfernen; KI-Antworten benötigen außerdem verfügbare Credits. Wenn die Einwilligung abläuft oder fehlschlägt, starte die Verbindung vom Client aus neu.
Fehlende Menüs oder ein nicht unterstützter Workspace lassen sich nicht durch Ändern deines Raven-Keys beheben. Prüfe die verlinkten Anbieteranforderungen oder kontaktiere unsere Discord-Community mit App-Name, Version und Fehlermeldung. Sende keine Tokens oder Keys.
Verfügbar bei Premium und Searchable Memory
Premium umfasst API-Keys und Zugriff auf deine verfügbaren Zusammenfassungen, Transkripte und manuellen World-Daten. Searchable Memory ist für Speicher-Tools, Kampagnensuche und KI-Antworten erforderlich. Semantische Suche und KI-Antworten verbrauchen deine bestehenden Ask-Credits.
MCP-Verfügbarkeit nach Plan
| Free-Tarif | Nicht verfügbar |
| Premium | API-Keys, verfügbare Zusammenfassungen, Transkripte und manuelle World-Daten. Speicher-Tools sind nicht enthalten. |
| Pläne mit Speicher | Deterministische Tools ohne Zusatzkosten; search_corpus verbraucht wenige Chat-Credits pro Suche, und zitierte Ask-Tools verbrauchen Ask-Credits. |
| API-Key | Erstelle einen persönlichen API-Key unter API Keys. Jederzeit widerrufbar; der MCP-Zugriff endet, wenn das Konto zum Free-Tarif zurückkehrt. |
Fair Use & Ratenlimits
Der MCP-Server ist eine gemeinsam genutzte, abgerechnete Oberfläche. Um ihn nachhaltig zu betreiben (und zu verhindern, dass eine außer Kontrolle geratene Agent-Schleife eine ganze Lizenz in Minuten verbraucht), ist jeder API-Key zusätzlich zu deinem Ask-Kontingent ratenbegrenzt.
MCP-Ratenlimits
| Server-Fair-Use | Obergrenze für Anfragen pro API-Key auf dem MCP-Server selbst (alle Tool-Aufrufe zusammen) — verhindert, dass ein einzelner Key den Endpunkt überflutet. Antworten über dem Limit liefern 429 mit Retry-After. |
| Premium · alle Pläne / Memory · 5 Sitzungen | 15 Anfragen/Minute und 150 Anfragen/Stunde. |
| Memory · 10 Sitzungen | 30 Anfragen/Minute und 450 Anfragen/Stunde. |
| Memory · 20 Sitzungen | 60 Anfragen/Minute und 1200 Anfragen/Stunde. |
| Kostenlose Tools | Pro API-Key ratenbegrenzt. Deterministische Lesezugriffe und Stichwortsuche (search_transcript, search_facts) kosten keine Credits. Semantische search_corpus ist hier nicht enthalten; sie verbraucht wenige Chat-Credits pro abgeschlossener Suche. |
| Chat-Credit-Tools | search_corpus (wenige Chat-Credits) und zitierte Ask-Tools sind durch sowohl dein Ask-Kontingent als auch ein Ratenlimit pro Key begrenzt. Die Nutzungssperre stoppt Ausgaben, wenn das Kontingent erschöpft ist; das Ratenlimit verhindert, dass ein Ausbruch es sofort leert. Kein separates MCP-Kontingent — dein Agent verbraucht dieselben Chat-Credits pro Lizenz, die er auch in der App nutzt. |
Ohne Zusatzkosten enthalten
Deterministische Lese-Tools — Sitzungen, Entitäten und das Ledger, Hooks, Mechaniken, Engagement, Transkript- und Beats-Suche, Zusammenfassungen, Lore und Lexikon. Sie liefern gespeicherte Kampagnendaten ohne KI-Inferenz, sodass verfügbare Tools keine Credits kosten. Speicher-Tools erfordern weiterhin Searchable Memory. Semantische search_corpus ist in dieser Liste nicht enthalten; sie verbraucht wenige Chat-Credits. Erweitere ein beliebiges Tool für Beispiel-Eingabe, Beispiel-Ausgabe und Feldreferenz.
list_campaigns
Keine zusätzlichen Tool-Kosten
Discovery-Tool: listet die für deinen MCP-Key verfügbaren Kampagnen auf, damit andere Tools die richtige campaign_id verwenden können.
Beispiel-Eingabe
{}
Beispiel-Ausgabe
{
"campaigns": [
{
"campaign_id": "a1b2c3d4-…",
"name": "The White Moose",
"module": "Dolmenwood"
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaigns | array | Kampagnen, die deinem Konto gehören. |
| campaigns[].campaign_id | string (uuid) | Verwende diese ID mit kampagnenbezogenen MCP-Tools. |
| campaigns[].name | string | Kampagnenname. |
| campaigns[].module | string | null | Optionales Modul-/System-Label. |
list_sessions
Keine zusätzlichen Tool-Kosten
Discovery-Tool: listet bereite Sitzungen mit ihrer session_number und ihrem Titel auf, damit ein Agent „Sitzung 12“ der richtigen recap_id zuordnen kann.
Beispiel-Eingabe
{
"campaign_id": "a1b2c3d4-…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | weggelassen | Optionaler Kampagnenfilter. |
Beispiel-Ausgabe
{
"recaps": [
{
"recap_id": "r1e2c3a4-…",
"campaign_id": "a1b2c3d4-…",
"session_number": 12,
"title": "The Choosing",
"status": "ready"
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| recaps | array | Bereite Sitzungen, die für dein Konto sichtbar sind. |
| recaps[].recap_id | string (uuid) | Verwende diese ID mit get_recap, get_transcript_window und get_mechanics_events. |
| recaps[].campaign_id | string (uuid) | null | Kampagne, der die Sitzung gehört. |
| recaps[].session_number | integer | null | Die eigene 1-basierte Sitzungsnummerierung des GM (DM-editierbar), sofern festgelegt. |
| recaps[].title | string | null | Sitzungstitel. |
| recaps[].status | string | Es werden nur bereite Sitzungen aufgelistet. |
get_engagement
Keine zusätzlichen Tool-Kosten
Das Kampagnen-Engagement-Dashboard: Teilnahmetrend pro Sprecher und die zwischengespeicherte sitzungsübergreifende Synthese (Zusammenfassung + Zeitleiste der Schlüsselereignisse).
Beispiel-Eingabe
{
"campaign_id": "a1b2c3d4-…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu lesende Kampagne. Muss deinem Konto gehören. |
Beispiel-Ausgabe
{
"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
}
]
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| sessions | array | Ein Eintrag pro bereiter Sitzung in der Kampagne. |
| sessions[].recap_id | string (uuid) | Die Recap-/Sitzungs-ID. |
| sessions[].session_ref | string | Kurze menschenlesbare Referenz, z. B. S01AB. |
| sessions[].session_at | string (ISO 8601) | Wann die Sitzung begann (UTC). |
| players | array | Ein Eintrag pro erkanntem Sprecher. |
| players[].speaker | string | Anzeigename des Sprechers. |
| players[].points | array | Metriken pro Sitzung für diesen Sprecher. |
| players[].points[].participation_pct | number | Anteil an der Unterhaltung, 0–100. |
| players[].points[].turn_count | integer | Anzahl der Sprechbeiträge. |
| players[].points[].talk_time_seconds | integer | Gesamte Sprechzeit in Sekunden. |
| players[].points[].word_count | integer | Gesamtzahl gesprochener Wörter. |
get_credit_balance
Keine zusätzlichen Tool-Kosten
Dein Ask-Kontingent als genutzter Prozentsatz, plus ein Feed der letzten Aktivitäten. Rohe Kontingentzahlen werden MCP-Clients nicht offengelegt.
Beispiel-Eingabe
{}
Beispiel-Ausgabe
{
"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"
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| usage.percent_used | integer | Ganzzahlige Ask-Nutzung von 0 bis 100. |
| recent_activity | array | Feed, neueste zuerst (session-recorded-, recap-ready-, credit-ledger-Ereignisse). |
| recent_activity[].type | string | Ereignisart. Werte: recap_ready | session_recorded | credit |
| recent_activity[].label | string | Menschenlesbare Zusammenfassung. |
| recent_activity[].date | string (ISO 8601) | Wann das Ereignis stattfand. |
| recent_activity[].recap_id | string (uuid) | null | Vorhanden bei recap-/sitzungsbezogenen Ereignissen. |
get_memory_overview
Keine zusätzlichen Tool-Kosten
Reichhaltigster GM-Situationsbewusstseins-Blob: Verteilung, Engagement-Trend + Gesamtwert, Teilnahme pro Sitzung, Säulen des Spiels.
Beispiel-Eingabe
{
"campaign_id": "a1b2c3d4-…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu lesende Kampagne. |
Beispiel-Ausgabe
{
"distribution": [
{
"label": "Roleplay",
"pct": 58
}
],
"engagement": {
"overall": {
"score": 74,
"label": "Playful / tense"
}
},
"pillars": [
"The green-eyed stranger",
"The old inn",
"The white moose hunt"
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| distribution | array | Anteil des Spiels nach Kategorie. |
| distribution[].label | string | Kategoriename. |
| distribution[].pct | number | Anteil, 0–100. |
| engagement.overall.score | number | null | Zusammengesetzter Engagement-Wert, 0–100. |
| engagement.overall.label | string | null | Qualitatives Label, z. B. „Verspielt / angespannt“. |
| pillars | string[] | null | Wiederkehrende Themen / Säulen des Spiels. |
get_quest_log
Keine zusätzlichen Tool-Kosten
Das für Spieler sichtbare Quest-Log. GM-Ergänzungen und -Bearbeitungen werden über Discord /questlog mit der Gruppe geteilt. Halte GM-Geheimnisse fern.
Beispiel-Eingabe
{
"campaign_id": "a1b2c3d4-…",
"page": 1
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Deine zu lesende Kampagne. |
| page | integer | Optional, beginnend bei 1. Zehn Quests pro Seite. |
Beispiel-Ausgabe
{
"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
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| quests | array | Aktive/veraltete zuerst, dann abgeschlossene/aufgegebene. Interne Bearbeitungsmetadaten und Quelllinks sind ausgeschlossen. |
| quests[].id | string (uuid) | Quest-Bezeichner. |
| quests[].title | string | Quest-Titel. |
| quests[].objective | string | Das Ziel der Gruppe. |
| quests[].status | string | active, stale, completed oder abandoned. |
| quests[].progress | string | Zuletzt gespeicherter Fortschritt. |
| page | integer | Aktuelle Seite. |
| has_more | boolean | Fordere die nächste Seite an, wenn true. |
get_open_hooks
Keine zusätzlichen Tool-Kosten
Ungelöste erzählerische Hooks — was für die nächste Sitzung vorzubereiten ist.
Beispiel-Eingabe
{
"campaign_id": "a1b2c3d4-…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu lesende Kampagne. |
Beispiel-Ausgabe
{
"hooks": [
{
"text": "Nobody bypasses the Choosing.",
"session_ref": "S01AB",
"session_date": "2026-06-20"
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| hooks | array | Derzeit offene erzählerische Hooks. |
| hooks[].text | string | Die Hook-Beschreibung. |
| hooks[].session_ref | string | Sitzung, in der der Hook eingeführt wurde. |
| hooks[].session_date | string (YYYY-MM-DD) | Datum dieser Sitzung. |
get_previously_on
Keine zusätzlichen Tool-Kosten
„Previously on“-Kontext für die Kampagne, aufgebaut aus eigentümerbezogenem Speicher.
Beispiel-Eingabe
{
"campaign_id": "a1b2c3d4-…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu lesende Kampagne. |
Beispiel-Ausgabe
{
"sections": [
{
"title": "Last time",
"bullets": [
"The party followed the white moose into the mist."
]
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| sections | array | Kampagnenspeicher-Abschnitte für Recap/Kontext. |
| sections[].title | string | Abschnittsüberschrift. |
| sections[].bullets | string[] | Prägnante Speicher-Stichpunkte. |
get_next_session_prep_pack
Keine zusätzlichen Tool-Kosten
Nur für Spielleiter gedachte Vorbereitungsempfehlung für die nächste Sitzung aus dem Vorbereitungs-Cache von Recap Raven. Sie kann einmal generiert werden und bleibt dann im Cache, bis das nächste Recap aufgenommen wird. Gibt credit_cost: 0 zurück.
Beispieleingabe
{
"campaign_id": "a1b2c3d4-…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die Kampagne, für die vorbereitet werden soll. Muss Ihrem Konto gehören. |
Beispielausgabe
{
"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"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| likely_directions | array | Wahrscheinliche nächste Richtungen aus Sicht des Spielleiters. |
| threads_to_watch | string[] | Handlungsfäden, die der Spielleiter im Auge behalten sollte. |
| prep_suggestions | string[] | Konkrete Vorbereitungsimpulse für den Spielleiter. |
| credit_cost | number | Für dieses MCP-Tool immer 0. |
| cache_policy | string | cached_until_next_recap_ingested. |
get_chronicle
Keine zusätzlichen Tool-Kosten
Szenen-pro-Sitzung-Karte — die strukturierte Kampagnenchronik.
Beispieleingabe
{
"campaign_id": "a1b2c3d4-…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu lesende Kampagne. |
Beispielausgabe
{
"sessions": [
{
"recap_id": "…",
"session_ref": "S01AB",
"scenes": [
"The market",
"The hunt",
"The banshee fight"
]
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| sessions | array | Ein Eintrag pro Sitzung. |
| sessions[].recap_id | string (uuid) | Die Recap-/Sitzungs-ID. |
| sessions[].scenes | string[] | Geordnete Szenenbezeichnungen für diese Sitzung. |
get_entity
Keine zusätzlichen Tool-Kosten
Das für Spieler sichtbare Entitätsverzeichnis, abgeleitet aus aufgezeichneten Sitzungen; privat hochgeladene Lore ist ausgeschlossen. Ohne Namen wird die Liste zurückgegeben. Mit einem Namen oder Alias wird die passende Karte, Interaktionshistorie, Transkript-Zugverweise, Beziehungen oder Mehrdeutigkeitskandidaten zurückgegeben.
Beispieleingabe
{
"campaign_id": "a1b2c3d4-…",
"name": "Captain Vale"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu lesende Kampagne. |
| name | string | omitted | Entitätsname/Alias, der zu einer einzelnen Karte aufgelöst werden soll. Weglassen für die Liste. |
Beispielausgabe
{
"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"
}
]
}
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| entities | array (roster mode) | Wenn kein Name angegeben ist: {canonical_name, kind, aliases, search_aliases} für jede Entität. |
| entity | object | null (card mode) | Wenn ein Name angegeben ist: die aufgelöste Entitätskarte oder null, wenn der Name zu nichts passt. |
| candidates | array | Mögliche Entitätskarten, wenn ein Alias mehrdeutig ist; leer, wenn die Auflösung eindeutig ist. |
| entity.id | string (uuid) | Stabile Kampagnen-Entitäts-ID. |
| entity.canonical_name | string | Kanonischer Entitätsname. |
| entity.kind | string | Entitätsart. Werte: pc | npc | creature | place | item | faction | deity | other |
| entity.aliases | string[] | Anzeige-Aliase. |
| entity.search_aliases | string[] | Nur für die Suche verwendete Aliase. |
| entity.interactions | array | Belegte Historieneinträge mit Recap- und Transkript-Zugverweisen. |
| entity.interactions[].recap_id | string (uuid) | Sitzung, die die Interaktion enthält. |
| entity.interactions[].turn_start | integer | null | Erster Transkript-Zug für den Belegverweis. |
| entity.interactions[].turn_end | integer | null | Letzter Transkript-Zug für den Belegverweis. |
| entity.interactions[].identity_match | string | confirmed oder suggested; suggested-Verweise sind mögliche Alias-Treffer, keine kanonischen Identitätsaussagen. Werte: confirmed | suggested |
| entity.relations | array | Beziehungsgraph (älteste → neueste). |
| entity.relations[].predicate | string | z. B. located_in, ally_of, owns. |
| entity.relations[].recap_id | string (uuid) | Sitzung, die die Beziehung belegt. |
| entity.relations[].visibility | string | Sichtbarkeit der Kante aus Sicht des Spielleiters. Ältere Daten vor der Beleg-Erfassung können dm_only-Kanten enthalten — nicht an Spieler weitergeben. Werte: player_known | dm_only |
| entity.relations[].is_current | boolean | Der aktive Teil eines zustandsbehafteten Prädikats. |
get_mechanics_events
Keine zusätzlichen Tool-Kosten
Zugverankerte Mechanik-Ereignisse (Angriffe, Zauber, Schaden, Rasten, Zustände) für eine Sitzung — dieselben Daten wie im Mechanik-Tab.
Beispieleingabe
{
"recap_id": "…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| recap_id | string (uuid) | Die zu lesende Sitzung. Verwenden Sie list_sessions, um IDs zu ermitteln. |
Beispielausgabe
{
"recap_id": "…",
"mechanics": [
{
"action": "attack",
"actor": "Mira",
"target": "Goblin",
"damage_amount": 7,
"damage_type": "slashing",
"evidence_turn_start": 41,
"evidence_turn_end": 41
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| recap_id | string (uuid) | Die Sitzung, zu der diese Ereignisse gehören. |
| mechanics | array | Zugverankerte Mechanik-Ereignisse. |
| mechanics[].action | string | Ereignisart. Werte: attack | spell_cast | short_rest | long_rest | consumable_used | condition_applied | ability_used | form_changed |
| mechanics[].actor | string | Wer gehandelt hat. |
| mechanics[].evidence_turn_start | integer | Erster Zug, der das Ereignis belegt. |
| mechanics[].evidence_turn_end | integer | Letzter Zug, der das Ereignis belegt. |
get_lore_documents
Keine zusätzlichen Tool-Kosten
Die Liste der Lore-Dokumente für die Kampagne.
Beispieleingabe
{
"campaign_id": "a1b2c3d4-…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu lesende Kampagne. |
Beispielausgabe
{
"documents": [
{
"id": "…",
"title": "The Choosing",
"updated_at": "2026-06-20"
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| documents | array | Lore-Dokumente. |
| documents[].id | string (uuid) | Dokumentbezeichner. |
| documents[].title | string | Dokumenttitel. |
get_lore_document
Keine zusätzlichen Tool-Kosten
Ein einzelnes Lore-Dokument mit seinem vollständigen Inhalt.
Beispieleingabe
{
"campaign_id": "a1b2c3d4-…",
"doc_id": "…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu lesende Kampagne. |
| doc_id | string (uuid) | Das abzurufende Lore-Dokument. |
Beispielausgabe
{
"document": {
"id": "…",
"title": "The Choosing",
"body": "…"
}
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| document.id | string (uuid) | Dokumentbezeichner. |
| document.title | string | Dokumenttitel. |
| document.body | string | Vollständiger Dokumentinhalt (Markdown). |
get_lexicon
Keine zusätzlichen Tool-Kosten
Lexikon-Einträge (kanonische Namen, Aliase, Typ, Konfidenz).
Beispieleingabe
{
"campaign_id": "a1b2c3d4-…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu lesende Kampagne. |
Beispielausgabe
{
"entries": [
{
"id": "…",
"canonical": "Sol’Thun",
"type": "npc",
"aliases": [
"the archmage"
],
"confidence": 0.92,
"enabled": true
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| entries | array | Lexikon-Einträge. |
| entries[].canonical | string | Kanonischer Name. |
| entries[].type | string | Entitätsart. Werte: npc | place | item | creature | other |
| entries[].aliases | string[] | Alternative Namen / Aliase. |
| entries[].confidence | number | Extraktionskonfidenz, 0–1. |
| entries[].enabled | boolean | Ob dieser Eintrag aktiv ist. |
get_transcript_window
Keine zusätzlichen Tool-Kosten
Ein positionsbasierter Ausschnitt der gespeicherten Züge einer Sitzung (keine Inhaltssuche — nur von/bis-Zugindizes).
Beispieleingabe
{
"recap_id": "…",
"from": 0,
"to": 20
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| recap_id | string (uuid) | Das zu lesende Recap/die Sitzung. Verwenden Sie list_sessions, um IDs zu ermitteln. |
| from | integer | Start-Zugindex (inklusive, Standard 0). |
| to | integer | End-Zugindex. Weglassen für ein Fenster von 50 Zügen ab dem Startindex. |
Beispielausgabe
{
"recap_id": "…",
"total_turns": 184,
"from": 0,
"to": 20,
"turns": [
{
"index": 0,
"t": "~00:01",
"speaker": "GM",
"text": "…"
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| total_turns | integer | Gesamtzahl der Züge in der Sitzung. |
| from | integer | Zurückgegebener Startindex. |
| to | integer | Zurückgegebener Endindex. |
| turns | array | Züge im angeforderten Fenster. |
| turns[].index | integer | Positionsindex in der Sitzung. |
| turns[].t | string | Relativer Zeitstempel, z. B. ~00:01. |
| turns[].speaker | string | Anzeigename des Sprechers. |
| turns[].text | string | Der gesprochene Text. |
get_recap
Keine zusätzlichen Tool-Kosten
Das spielersichere Recap-HTML für ein fertiges Recap. Der Artefakttyp wird vom Server festgelegt; es gibt keine Typ-Eingabe.
Beispieleingabe
{
"recap_id": "…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| recap_id | string (uuid) | Das Recap/die Sitzung, dessen/deren spielersicheres Recap abgerufen werden soll. |
Beispielausgabe
{
"recap": {
"recap_id": "…",
"content_type": "player_recap_html",
"html": "<!doctype html>…",
"truncated": false
}
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| recap.recap_id | string (uuid) | Die Recap-/Sitzungs-ID. |
| recap.content_type | string | Immer player_recap_html. Werte: player_recap_html |
| recap.html | string | Das spielersichere Recap-HTML. |
| recap.truncated | boolean | True, wenn die MCP-Antwortgrenze das HTML gekürzt hat. |
search_transcript
Keine zusätzlichen Tool-Kosten
Exakte Stichwortsuche (Volltext) über die Transkript-Züge Ihrer Kampagne. Gibt Züge zurück, die die exakte Phrase enthalten, mit ihrer Sitzung, ihrem Sprecher und Zeitstempel — kein LLM, kein Embedding, keine Credits.
Beispieleingabe
{
"campaign_id": "a1b2c3d4-…",
"query": "white moose",
"recap_id": "r1e2c3a4-…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu durchsuchende Kampagne. |
| query | string | Exakte Phrase, die übereinstimmen soll (Volltextsuche gegen den Transkripttext). |
| recap_id | string (uuid) | omitted | Optionaler Sitzungsbereich. Verwenden Sie list_sessions, um Recap-IDs zu ermitteln. |
Beispielausgabe
{
"query": "white moose",
"matches": [
{
"recap_id": "…",
"speaker": "GM",
"t": "~01:04",
"text": "All you know is that it’s a white moose."
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| query | string | Echo der übermittelten Suchanfrage. |
| matches | array | Transkript-Züge, die die exakte Phrase enthalten, bester Treffer zuerst. |
| matches[].recap_id | string (uuid) | Recap/Sitzung, aus der der Treffer stammt. |
| matches[].speaker | string | Sprecher des gefundenen Zugs. |
| matches[].t | string | Relativer Zeitstempel, z. B. ~01:04. |
| matches[].text | string | Der gefundene Transkripttext. |
search_facts
Keine zusätzlichen Tool-Kosten
Stichwort-Volltextsuche über die Szenen-Beats Ihrer Kampagne — die dichten, Beat-für-Beat-Zusammenfassungen, über die der Chat-Pfad schlussfolgert. Am besten für exakte Begriffe (ein Name, ein Gegenstand, ein Ort). Gibt Beat-Text mit seinem Szenen-/Sitzungskontext und Zugbereich zurück, sodass ein Agent den Moment lokalisieren und als Nächstes das exakte Transkript-Fenster abrufen kann. Kein LLM, kein Embedding, keine Credits. Für natürlichsprachliche, bedeutungsbasierte Suche verwenden Sie search_corpus.
Beispieleingabe
{
"campaign_id": "a1b2c3d4-…",
"query": "white moose hunt",
"recap_id": "r1e2c3a4-…"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu durchsuchende Kampagne. |
| query | string | Stichwörter, die gegen den Beat-Text abgeglichen werden sollen (Volltextsuche). |
| recap_id | string (uuid) | omitted | Optionaler Sitzungsbereich. Verwenden Sie list_sessions, um Recap-IDs zu ermitteln. |
Beispielausgabe
{
"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
}
]
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| matches | array | Passende Beats, bester Treffer zuerst. |
| matches[].recap_id | string (uuid) | Sitzung, aus der der Beat stammt. |
| matches[].session_number | integer | null | Die Sitzungsnummer des Spielleiters, sofern gesetzt. |
| matches[].session_title | string | null | Der Titel der Sitzung, sofern gesetzt. |
| matches[].scene_title | string | null | Titel der Szene, zu der der Beat gehört. |
| matches[].beat_index | integer | Die Position des Beats innerhalb seiner Szene. |
| matches[].turn_start | integer | Erster Zug des Beat-Fensters (an get_transcript_window übergeben). |
| matches[].turn_end | integer | Letzter Zug des Beat-Fensters. |
| matches[].text | string | Der Beat-Text (auf 1200 Zeichen begrenzt). |
| matches[].truncated | boolean | True, wenn der Beat-Text gekürzt wurde. |
Verbraucht Chat-Credits
Drei Tools verbrauchen abgerechnete Chat-Credits. Denken Sie an Finder vs. Antwort: search_corpus (wenige Chat-Credits) liefert Ihnen die stärksten Treffer als strukturierte Belege, über die Ihr eigenes Modell schlussfolgern kann — ein schneller Finder, kein erschöpfender Index; ask_campaign_cited beantwortet eine Frage aus Sicht des Spielleiters mit wörtlichen Transkriptzitaten und Zugverweisen; und ask_player_campaign_cited liefert die kürzere, spielergerichtete Version über den Spieler-Pfad. Alle sind zusätzlich zu Ihrem Guthaben pro API-Schlüssel ratenbegrenzt.
search_corpus
Verbraucht wenige Chat-Credits
search_corpus findet relevante Kampagnenmomente, auch wenn du den genauen Wortlaut nicht kennst. Es nutzt semantische Suche und Reranking, um die stärksten Belegtreffer zurückzugeben, einschließlich Zusammenfassung, Sitzungskontext und Zugbereichen. Es ist ein Finder, kein vollständiger Index: Nur die besten Treffer kommen zurück, behandle ein leeres oder dünnes Ergebnis also als „nichts Starkes aufgetaucht“, nicht als Beweis, dass nichts existiert. Nutze die Treffer, um die tatsächlichen Begriffe oder Namen zu entdecken, die die Tabelle verwendet hat, und führe dann eine vollständige kostenlose Stichwortsuche mit search_facts / search_transcript durch, oder nimm die Zugbereiche direkt zu get_transcript_window für das wörtliche Segment. Für eine definitive, verifizierte Antwort auf eine Frage — wörtliche Zitate und Belege — verwende stattdessen ask_campaign_cited (teurer, eine schriftliche Antwort statt strukturierter Zeilen). Setze player_safe: true, um GM-only-Inhalte aus den Suchergebnissen auszuschließen. Es verbraucht wenige Chat-Credits pro Suche, berechnet bei jeder abgeschlossenen Suche, auch bei einer ohne Treffer.
Beispieleingabe
{
"campaign_id": "a1b2c3d4-…",
"query": "when did the party first distrust the mayor?",
"player_safe": false
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die zu durchsuchende Kampagne. |
| query | string | Eine natürlichsprachliche Beschreibung dessen, wonach du suchst. |
| player_safe | boolean (Standard false) | Wenn true, ist der Abruf sichtbarkeitsgefiltert — GM-only-, abgeleitete und spekulative Erinnerungen sowie vom GM eingegebene Lore werden ausgeschlossen. Verwende dies für alles, was Spieler sehen werden. |
Beispielausgabe
{
"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>"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| matches | array | Gereihte Erinnerungstreffer, bester Treffer zuerst. |
| matches[].object_id | string (uuid) | Die id des Erinnerungsobjekts. |
| matches[].type | string | Die Art der Erinnerung (z. B. plot_event, npc_fact). |
| matches[].visibility | string | Wer dies weiß. Bei einer player_safe-Suche ist es immer nur spielersichtbar. |
| matches[].recap_id | string (uuid) | null | Die Sitzung, aus der die Erinnerung stammt. |
| matches[].session_number | integer | null | Die Sitzungsnummer des GM, sofern gesetzt. |
| matches[].session_title | string | null | Der Titel der Sitzung, sofern gesetzt. |
| matches[].turn_start | integer | null | Erster Zug des Belegfensters (einspeisen in get_transcript_window). |
| matches[].turn_end | integer | null | Letzter Zug des Belegfensters. |
| matches[].text | string | Die Erinnerungszusammenfassung (begrenzt auf 1200 Zeichen). |
| matches[].truncated | boolean | True, wenn die Zusammenfassung gekürzt wurde. |
| credit_cost | number | Für diese abgeschlossene Suche berechnete Chat-Credits. |
ask_campaign_cited
Verbraucht Chat-Credits
Stelle deiner Kampagne eine GM-orientierte Faktenfrage und erhalte die KI-Antwort — dieselbe Beats-Antwortmaschine wie im In-App-Chat, mit wörtlichen Transkriptzitaten und Zugbelegen. Verbraucht GM-Chat-Credits, dieselben Kosten wie im In-App-Chat. Zusätzlich zu deinem Guthaben pro API-Schlüssel ratenbegrenzt.
Beispieleingabe
{
"campaign_id": "a1b2c3d4-…",
"question": "Where did the hunter see the moose?"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die Kampagne, die du fragst. |
| question | string | Deine Frage. |
| clarification | object | omitted | Optional: Beantworte eine Rückfrage, die die Engine gestellt hat (nur GM-Lane). |
| clarification.question | string | Die Rückfrage der Engine. |
| clarification.answer | string | Deine Antwort auf diese Frage. |
| supersedes | string | omitted | Nachrichten-id einer früheren Antwort, die ersetzt werden soll (nur GM-Lane). |
Beispielausgabe
{
"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
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| answer_markdown | string | Die belegte Antwort, mit Inline-[n]-Markern. |
| citations | array | Beleg-Metadaten, die jeden Marker stützen. |
| quotes | array | Wörtliche Transkriptzitate, die als Beleg verwendet werden. |
| confidence_label | string | Grobes Konfidenzband. Werte: high | medium | low |
| credit_cost | number | Für diese Antwort berechnete Credits. |
| quotes[].turn | integer | Der belegte Zugindex. |
| quotes[].recap_id | string (uuid) | null | Die Sitzung, aus der das Zitat stammt. |
ask_player_campaign_cited
Verbraucht Chat-Credits
Stelle eine spielerorientierte faktische Kampagnenfrage und erhalte eine kurze, spielersichere Antwort mit Transkriptbelegen. GM-only-Inhalte werden durch die serverseitige Player-Lane ausgeschlossen. Verbraucht Spieler-Chat-Credits.
Beispieleingabe
{
"campaign_id": "a1b2c3d4-…",
"question": "What do we know about the harbour?"
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| campaign_id | string (uuid) | Die Kampagne, die du fragst. |
| question | string | Deine Frage. |
Beispielausgabe
{
"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
}
Feldbeschreibungen
| Feld | Typ | Beschreibung |
|---|---|---|
| answer_markdown | string | Die belegte Antwort, mit Inline-[n]-Markern. |
| citations | array | Beleg-Metadaten, die jeden Marker stützen. |
| quotes | array | Wörtliche Transkriptzitate, die als Beleg verwendet werden. |
| confidence_label | string | Grobes Konfidenzband. Werte: high | medium | low |
| credit_cost | number | Für diese Antwort berechnete Credits. |
Spielersicheres Beispiel
Baust du einen spielerorientierten Bot oder ein Overlay? Verwende das Player-Cited-Tool, damit die Antwort aus der Player-Lane kommt, deren sichtbarkeitsgefiltertes Ledger niemals GM-only-Inhalte enthält:
{
"tool": "ask_player_campaign_cited",
"arguments": {
"campaign_id": "a1b2c3d4-…",
"question": "What do we know about the harbour?"
}
}
Wohin deine Daten gehen
Wenn du einen MCP-Client verbindest und diese Tools verwendest, wird dein Kampagneninhalt an den von dir gewählten KI-Client gesendet — zum Beispiel ChatGPT, Claude oder Gemini. Die Datenverwendungs- und Trainingsbedingungen dieses Anbieters gelten für das, was du ihm sendest, nicht für unsere.
Die No-Training-Garantie von Recap Raven deckt unsere eigene Pipeline und die von uns offengelegten Modellanbieter ab. Sie kann einen von dir verbundenen Client nicht abdecken: Indem du einen einbindest, wählst du einen neuen Verarbeiter für deine Kampagnendaten. Bitte prüfe die Bedingungen dieses Clients, bevor du ihn verbindest, und verwende ask_player_campaign_cited oder spielersichere Suchfilter (und vermeide GM-only-Lesevorgänge wie Lore und Chronik) für alles, was Spieler sehen werden.
Fragen oder Feedback? Sieh dir an, wie Recap Raven funktioniert oder lade den Bot unten ein.
Führe Recap Raven bei deiner nächsten Sitzung aus
Lade den Bot ein, erstelle deine Kampagne und erhalte jeden Monat kostenlose Recaps.
Führe Recap Raven bei deiner nächsten Sitzung aus
Keine Karte erforderlich · Aufzeichnung nur mit Zustimmung deines Tisches · Lösche oder exportiere deine Daten jederzeit
Fragen oder Feedback? Tritt unserer Discord-Community bei →
Gebaut für Discord-Voice. Wir erfassen die gesamte Sitzung für dich — kein nachträgliches Einloggen, keine Dateien, die du uns senden musst, und kein Raten, wer gesprochen hat. Memory-Pläne halten dein bearbeitbares Welt-Wiki aktuell, während du spielst, bereit für Fragen dazu, was passiert ist, wer was gesagt hat, offene Handlungsfäden und was als Nächstes vorzubereiten ist.