Recap Raven
resmiPencatat catatan D&D Discord: cari dan kutip rekap sesi TTRPG, misi, NPC, dan transkrip Anda dari AI mana pun. Memerlukan kunci API Recap Raven.
Apa yang bisa Anda lakukan dengan Recap Raven MCP?
- Daftar kampanye dan sesi — Minta AI Anda untuk mendaftar kampanye Anda dan memetakan nomor sesi ke rekap yang tepat sebelum mengambil detail.
- Cari transkrip dan beat — Jalankan pencarian kata kunci persis pada giliran transkrip atau beat adegan untuk menemukan di mana sebuah nama, item, atau tempat muncul.
- Baca rekap dan jendela transkrip — Ambil rekap yang aman untuk pemain atau potongan posisional dari giliran sesi yang tersimpan berdasarkan rentang indeks.
- Tinjau persiapan dan hook terbuka — Ambil hook naratif yang belum terselesaikan, paket persiapan sesi berikutnya, dan ringkasan previously-on untuk sebuah kampanye.
- Cari entitas dan lore — Dapatkan daftar entitas atau satu kartu entitas, plus dokumen lore dan entri leksikon.
- Periksa keterlibatan dan quest — Baca tren partisipasi per pembicara, log quest yang terlihat oleh pemain, dan penggunaan kredit Ask Anda.
Server MCP Terhosting
npx add-mcp 'https://mcp.recapraven.com/mcp'Terpasang ke Claude Code, Codex, Cursor, dan lainnya
Dokumentasi
Untuk alur kerja AI kustom
Alat kampanye Anda, di klien AI yang kompatibel.
Baca rekap dan data kampanye Anda melalui MCP. Akses API-key yang ada berfungsi dengan klien yang kompatibel. Masuk dari aplikasi AI yang mendukung identitas klien publik; periksa persyaratan klien Anda di bawah sebelum menghubungkan.
Apa itu MCP?
MCP memungkinkan aplikasi AI yang kompatibel memanggil alat Recap Raven secara langsung. Alih-alih menyalin rekap ke AI lain, AI Anda dapat meminta Recap Raven untuk sesi, jendela transkrip, hook, entitas, kutipan, dan jawaban kampanye.
Mulai
Endpoint MCP jarak jauh Raven adalah https://mcp.recapraven.com/mcp . Pilih klien untuk instruksi penyiapan. Premium mencakup pembacaan deterministik; Searchable Memory diperlukan untuk pencarian memori dan jawaban AI.
Endpoint MCP
https://mcp.recapraven.com/mcp
Penyiapan ChatGPT
- Di situs web ChatGPT, buka Plugins, pilih +, lalu Add custom MCP server. Masukkan "Recap Raven" dan URL server di bawah.
- Saat sign-in Raven diaktifkan, pilih OAuth dan opsi identitas klien terbitan (CIMD) dengan autentikasi klien publik. Tidak diperlukan client secret atau API key Raven. Registrasi klien otomatis tidak didukung oleh Raven.
- Buat plugin, pasang, lalu masuk ke Raven dan tinjau identitas aplikasi serta akses yang diminta. Setujui hanya koneksi yang Anda mulai sendiri.
- Dalam percakapan, pilih Recap Raven dengan @ dan tanyakan: "Use Recap Raven to list my campaigns."
- Alat baca dan tulis bergantung pada izin dan konfirmasi Anda. Jika penyiapan belum lengkap, periksa pembatasan workspace dan panduan penyiapan ChatGPT resmi untuk aplikasi Anda.
URL server jarak jauh ChatGPT
https://mcp.recapraven.com/mcp
Bantuan persetujuan dan koneksi
Koneksi sign-in Raven akan meminta izin untuk mengakses kampanye, transkrip, dan informasi khusus GM Anda. Hasil alat dikirim ke penyedia AI pilihan Anda, dan alat berbayar menggunakan kredit Ask Anda yang ada.
Jika Anda menyetujui akses latar belakang, aplikasi dapat menyegarkan koneksinya hingga 30 hari, bahkan saat Anda keluar dari Raven. Setelah kedaluwarsa atau dicabut, hubungkan kembali dan setujui lagi. Di Pengaturan akun, tinjau koneksi AI yang disetujui dan putuskan satu koneksi atau gunakan Disconnect all AI connections. API key dikelola secara terpisah.
Hasil kosong? Periksa bahwa Anda masuk ke akun Raven yang memiliki kampanye Anda. Perubahan paket dapat menghapus akses alat; jawaban AI juga memerlukan kredit yang tersedia. Jika persetujuan kedaluwarsa atau gagal, mulai ulang koneksi dari klien.
Menu yang hilang atau workspace yang tidak didukung tidak dapat diperbaiki dengan mengubah key Raven Anda. Periksa persyaratan vendor yang ditautkan atau hubungi komunitas Discord kami dengan nama aplikasi, versi, dan pesan kesalahan. Jangan kirim token atau key.
Tersedia di Premium dan Searchable Memory
Premium mencakup API key dan akses ke rekap, transkrip, dan data World manual yang tersedia. Searchable Memory diperlukan untuk alat memori, pencarian kampanye, dan jawaban AI. Pencarian semantik dan jawaban AI menggunakan kredit Ask Anda yang ada.
Ketersediaan MCP berdasarkan paket
| Tingkat gratis | Tidak tersedia |
| Premium | API key, rekap, transkrip, dan data World manual yang tersedia. Alat memori tidak termasuk. |
| Paket dengan memori | Alat deterministik tanpa biaya tambahan; search_corpus menggunakan kredit chat rendah per pencarian, dan alat ask dengan sitasi menggunakan kredit Ask. |
| API key | Buat satu API key pribadi dari API Keys. Cabut kapan saja; akses MCP berakhir saat akun kembali ke Free. |
Penggunaan wajar & batas laju
Server MCP adalah permukaan bersama yang diukur. Agar tetap berkelanjutan (dan menghentikan loop agen yang lepas kendali membakar seluruh lisensi dalam hitungan menit), setiap API key dibatasi lajunya selain jatah Ask Anda.
Batas laju MCP
| Penggunaan wajar server | Batas permintaan per-API-key pada server MCP itu sendiri (semua panggilan alat digabungkan) — mencegah satu key membanjiri endpoint. Respons di atas batas mengembalikan 429 dengan Retry-After. |
| Premium · semua paket / Memory · 5 sesi | 15 permintaan/menit dan 150 permintaan/jam. |
| Memory · 10 sesi | 30 permintaan/menit dan 450 permintaan/jam. |
| Memory · 20 sesi | 60 permintaan/menit dan 1200 permintaan/jam. |
| Alat gratis | Dibatasi lajunya per API key. Pembacaan deterministik dan pencarian kata kunci (search_transcript, search_facts) tidak memakan kredit. Pencarian semantik search_corpus tidak termasuk di sini; ia menggunakan kredit chat rendah per pencarian yang selesai. |
| Alat kredit chat | search_corpus (kredit chat rendah) dan alat ask dengan sitasi dibatasi oleh keduanya: jatah Ask Anda dan batas laju per-key. Gerbang penggunaan menghentikan pengeluaran saat jatah habis; batas laju menghentikan lonjakan agar tidak mengurasnya seketika. Tidak ada kuota MCP terpisah — agen Anda menggunakan kredit chat per-lisensi yang sama seperti yang digunakan di aplikasi. |
Termasuk tanpa biaya tambahan
Alat baca deterministik — sesi, entitas dan ledger, hook, mekanika, keterlibatan, pencarian transkrip dan beats, rekap, lore, dan leksikon. Alat ini mengembalikan data kampanye tersimpan tanpa inferensi AI, sehingga alat yang tersedia tidak memakan kredit. Alat memori tetap memerlukan Searchable Memory. search_corpus semantik tidak termasuk dalam daftar ini; ia menggunakan kredit chat rendah. Perluas alat mana pun untuk contoh input, contoh output, dan referensi bidang.
list_campaigns
Tanpa biaya alat tambahan
Alat penemuan: daftar kampanye yang tersedia untuk key MCP Anda agar alat lain dapat menggunakan campaign_id yang tepat.
Contoh input
{}
Contoh output
{
"campaigns": [
{
"campaign_id": "a1b2c3d4-…",
"name": "The White Moose",
"module": "Dolmenwood"
}
]
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| campaigns | array | Kampanye yang dimiliki akun Anda. |
| campaigns[].campaign_id | string (uuid) | Gunakan id ini dengan alat MCP yang terbatas pada kampanye. |
| campaigns[].name | string | Nama kampanye. |
| campaigns[].module | string | null | Label modul/sistem opsional. |
list_sessions
Tanpa biaya alat tambahan
Alat penemuan: daftar sesi siap dengan session_number dan judulnya, sehingga agen dapat memetakan "sesi 12" ke recap_id yang tepat.
Contoh input
{
"campaign_id": "a1b2c3d4-…"
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | dihilangkan | Filter kampanye opsional. |
Contoh output
{
"recaps": [
{
"recap_id": "r1e2c3a4-…",
"campaign_id": "a1b2c3d4-…",
"session_number": 12,
"title": "The Choosing",
"status": "ready"
}
]
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| recaps | array | Sesi siap yang terlihat oleh akun Anda. |
| recaps[].recap_id | string (uuid) | Gunakan id ini dengan get_recap, get_transcript_window dan get_mechanics_events. |
| recaps[].campaign_id | string (uuid) | null | Kampanye yang memiliki sesi. |
| recaps[].session_number | integer | null | Penomoran sesi berbasis 1 milik GM sendiri (dapat diedit DM), jika diatur. |
| recaps[].title | string | null | Judul sesi. |
| recaps[].status | string | Hanya sesi siap yang dicantumkan. |
get_engagement
Tanpa biaya alat tambahan
Dasbor keterlibatan kampanye: tren partisipasi per-pembicara dan sintesis lintas-sesi yang di-cache (ringkasan + linimasa peristiwa penting).
Contoh input
{
"campaign_id": "a1b2c3d4-…"
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dibaca. Harus dimiliki akun Anda. |
Contoh output
{
"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
}
]
}
]
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| sessions | array | Satu entri per sesi siap dalam kampanye. |
| sessions[].recap_id | string (uuid) | Id rekap/sesi. |
| sessions[].session_ref | string | Referensi manusia singkat, mis. S01AB. |
| sessions[].session_at | string (ISO 8601) | Kapan sesi dimulai (UTC). |
| players | array | Satu entri per pembicara yang dikenali. |
| players[].speaker | string | Nama tampilan pembicara. |
| players[].points | array | Metrik per-sesi untuk pembicara ini. |
| players[].points[].participation_pct | number | Porsi percakapan, 0–100. |
| players[].points[].turn_count | integer | Jumlah giliran berbicara yang diambil. |
| players[].points[].talk_time_seconds | integer | Total detik berbicara. |
| players[].points[].word_count | integer | Total kata yang diucapkan. |
get_credit_balance
Tanpa biaya alat tambahan
Jatah Ask Anda sebagai persentase terpakai, plus umpan aktivitas terbaru. Jumlah jatah mentah tidak diekspos ke klien MCP.
Contoh input
{}
Contoh output
{
"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"
}
]
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| usage.percent_used | integer | Penggunaan Ask bilangan bulat dari 0 hingga 100. |
| recent_activity | array | Umpan terbaru-dulu (peristiwa session-recorded, recap-ready, credit-ledger). |
| recent_activity[].type | string | Jenis peristiwa. nilai: recap_ready | session_recorded | credit |
| recent_activity[].label | string | Ringkasan yang dapat dibaca manusia. |
| recent_activity[].date | string (ISO 8601) | Kapan peristiwa terjadi. |
| recent_activity[].recap_id | string (uuid) | null | Ada untuk peristiwa terkait rekap/sesi. |
get_memory_overview
Tanpa biaya alat tambahan
Blob kesadaran situasional GM terkaya: distribusi, tren keterlibatan + skor keseluruhan, partisipasi per-sesi, pilar permainan.
Contoh input
{
"campaign_id": "a1b2c3d4-…"
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dibaca. |
Contoh output
{
"distribution": [
{
"label": "Roleplay",
"pct": 58
}
],
"engagement": {
"overall": {
"score": 74,
"label": "Playful / tense"
}
},
"pillars": [
"The green-eyed stranger",
"The old inn",
"The white moose hunt"
]
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| distribution | array | Porsi permainan berdasarkan kategori. |
| distribution[].label | string | Nama kategori. |
| distribution[].pct | number | Porsi, 0–100. |
| engagement.overall.score | number | null | Skor keterlibatan komposit, 0–100. |
| engagement.overall.label | string | null | Label kualitatif, mis. "Playful / tense". |
| pillars | string[] | null | Tema berulang / pilar permainan. |
get_quest_log
Tanpa biaya alat tambahan
Log quest yang terlihat oleh pemain. Penambahan dan suntingan GM dibagikan ke party melalui Discord /questlog. Jauhkan rahasia GM.
Contoh input
{
"campaign_id": "a1b2c3d4-…",
"page": 1
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye Anda yang akan dibaca. |
| page | integer | Opsional, dimulai dari 1. Sepuluh quest per halaman. |
Contoh output
{
"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
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| quests | array | Aktif/stale lebih dulu, lalu completed/abandoned. Metadata penyuntingan internal dan tautan sumber dikecualikan. |
| quests[].id | string (uuid) | Pengenal quest. |
| quests[].title | string | Judul quest. |
| quests[].objective | string | Tujuan party. |
| quests[].status | string | active, stale, completed atau abandoned. |
| quests[].progress | string | Progres terakhir yang disimpan. |
| page | integer | Halaman saat ini. |
| has_more | boolean | Minta halaman berikutnya saat true. |
get_open_hooks
Tanpa biaya alat tambahan
Hook naratif yang belum terselesaikan — apa yang perlu disiapkan untuk sesi berikutnya.
Contoh input
{
"campaign_id": "a1b2c3d4-…"
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dibaca. |
Contoh output
{
"hooks": [
{
"text": "Nobody bypasses the Choosing.",
"session_ref": "S01AB",
"session_date": "2026-06-20"
}
]
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| hooks | array | Hook naratif yang saat ini terbuka. |
| hooks[].text | string | Deskripsi hook. |
| hooks[].session_ref | string | Sesi tempat hook diperkenalkan. |
| hooks[].session_date | string (YYYY-MM-DD) | Tanggal sesi tersebut. |
get_previously_on
Tanpa biaya alat tambahan
Konteks previously-on untuk kampanye, dibangun dari memori yang terbatas pada pemilik.
Contoh input
{
"campaign_id": "a1b2c3d4-…"
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dibaca. |
Contoh output
{
"sections": [
{
"title": "Last time",
"bullets": [
"The party followed the white moose into the mist."
]
}
]
}
Deskripsi bidang
| Bidang | Tipe | Deskripsi |
|---|---|---|
| sections | array | Bagian memori kampanye untuk rekap/konteks. |
| sections[].title | string | Judul bagian. |
| sections[].bullets | string[] | Poin memori ringkas. |
get_next_session_prep_pack
Tanpa biaya alat tambahan
Penasihat persiapan sesi berikutnya khusus GM dari cache persiapan Recap Raven. Ini dapat dihasilkan sekali, lalu tetap di-cache hingga rekap berikutnya di-ingest. Mengembalikan credit_cost: 0.
Contoh input
{
"campaign_id": "a1b2c3d4-…"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dipersiapkan. Harus dimiliki oleh akun Anda. |
Contoh output
{
"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"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| likely_directions | array | Kemungkinan arah berikutnya yang ditujukan untuk GM. |
| threads_to_watch | string[] | Thread yang mungkin ingin diingat oleh GM. |
| prep_suggestions | string[] | Prompt persiapan konkret untuk GM. |
| credit_cost | number | Selalu 0 untuk tool MCP ini. |
| cache_policy | string | cached_until_next_recap_ingested. |
get_chronicle
Tanpa biaya tool tambahan
Peta adegan-per-sesi — kronik kampanye terstruktur.
Contoh input
{
"campaign_id": "a1b2c3d4-…"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dibaca. |
Contoh output
{
"sessions": [
{
"recap_id": "…",
"session_ref": "S01AB",
"scenes": [
"The market",
"The hunt",
"The banshee fight"
]
}
]
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| sessions | array | Satu entri per sesi. |
| sessions[].recap_id | string (uuid) | Id rekap/sesi. |
| sessions[].scenes | string[] | Label adegan terurut untuk sesi tersebut. |
get_entity
Tanpa biaya tool tambahan
Ledger entitas yang terlihat oleh pemain yang diturunkan dari sesi yang direkam; lore privat yang diunggah dikecualikan. Tanpa nama, ia mengembalikan daftar entitas. Dengan nama atau alias, ia mengembalikan kartu yang cocok, riwayat interaksi, tautan giliran transkrip, relasi, atau kandidat ambigu.
Contoh input
{
"campaign_id": "a1b2c3d4-…",
"name": "Captain Vale"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dibaca. |
| name | string | omitted | Nama/alias entitas untuk diresolusikan ke satu kartu. Hilangkan untuk daftar entitas. |
Contoh output
{
"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"
}
]
}
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| entities | array (mode daftar) | Saat tidak ada nama yang diberikan: {canonical_name, kind, aliases, search_aliases} untuk setiap entitas. |
| entity | object | null (mode kartu) | Saat nama diberikan: kartu entitas yang diresolusikan, atau null jika nama tidak cocok dengan apa pun. |
| candidates | array | Kartu entitas yang mungkin saat alias ambigu; kosong saat resolusi unik. |
| entity.id | string (uuid) | Id entitas kampanye yang stabil. |
| entity.canonical_name | string | Nama kanonis entitas. |
| entity.kind | string | Jenis entitas. nilai: pc | npc | creature | place | item | faction | deity | other |
| entity.aliases | string[] | Alias tampilan. |
| entity.search_aliases | string[] | Alias khusus untuk pengambilan. |
| entity.interactions | array | Entri riwayat yang ter-ground dengan tautan rekap dan giliran transkrip. |
| entity.interactions[].recap_id | string (uuid) | Sesi yang berisi interaksi tersebut. |
| entity.interactions[].turn_start | integer | null | Giliran transkrip pertama untuk tautan bukti. |
| entity.interactions[].turn_end | integer | null | Giliran transkrip terakhir untuk tautan bukti. |
| entity.interactions[].identity_match | string | confirmed atau suggested; tautan suggested adalah kemungkinan kecocokan alias, bukan klaim identitas kanonis. nilai: confirmed | suggested |
| entity.relations | array | Graf relasi (terlama → terbaru). |
| entity.relations[].predicate | string | mis. located_in, ally_of, owns. |
| entity.relations[].recap_id | string (uuid) | Sesi yang membuktikan relasi tersebut. |
| entity.relations[].visibility | string | Visibilitas edge bagi GM. Data lama pra-witness dapat membawa edge dm_only — jangan tampilkan ke pemain. nilai: player_known | dm_only |
| entity.relations[].is_current | boolean | Kaki aktif dari predikat stateful. |
get_mechanics_events
Tanpa biaya tool tambahan
Peristiwa mekanika yang berjangkar pada giliran (serangan, mantra, damage, istirahat, kondisi) untuk satu sesi — data yang sama dengan tab mekanika.
Contoh input
{
"recap_id": "…"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| recap_id | string (uuid) | Sesi yang akan dibaca. Gunakan list_sessions untuk menemukan id. |
Contoh output
{
"recap_id": "…",
"mechanics": [
{
"action": "attack",
"actor": "Mira",
"target": "Goblin",
"damage_amount": 7,
"damage_type": "slashing",
"evidence_turn_start": 41,
"evidence_turn_end": 41
}
]
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| recap_id | string (uuid) | Sesi tempat peristiwa ini berada. |
| mechanics | array | Peristiwa mekanika yang berjangkar pada giliran. |
| mechanics[].action | string | Jenis peristiwa. nilai: attack | spell_cast | short_rest | long_rest | consumable_used | condition_applied | ability_used | form_changed |
| mechanics[].actor | string | Siapa yang bertindak. |
| mechanics[].evidence_turn_start | integer | Giliran pertama yang membuktikan peristiwa. |
| mechanics[].evidence_turn_end | integer | Giliran terakhir yang membuktikan peristiwa. |
get_lore_documents
Tanpa biaya tool tambahan
Daftar dokumen lore untuk kampanye.
Contoh input
{
"campaign_id": "a1b2c3d4-…"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dibaca. |
Contoh output
{
"documents": [
{
"id": "…",
"title": "The Choosing",
"updated_at": "2026-06-20"
}
]
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| documents | array | Dokumen lore. |
| documents[].id | string (uuid) | Pengenal dokumen. |
| documents[].title | string | Judul dokumen. |
get_lore_document
Tanpa biaya tool tambahan
Satu dokumen lore dengan isi lengkapnya.
Contoh input
{
"campaign_id": "a1b2c3d4-…",
"doc_id": "…"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dibaca. |
| doc_id | string (uuid) | Dokumen lore yang akan diambil. |
Contoh output
{
"document": {
"id": "…",
"title": "The Choosing",
"body": "…"
}
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| document.id | string (uuid) | Pengenal dokumen. |
| document.title | string | Judul dokumen. |
| document.body | string | Isi lengkap dokumen (markdown). |
get_lexicon
Tanpa biaya tool tambahan
Entri leksikon (nama kanonis, alias, tipe, keyakinan).
Contoh input
{
"campaign_id": "a1b2c3d4-…"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dibaca. |
Contoh output
{
"entries": [
{
"id": "…",
"canonical": "Sol’Thun",
"type": "npc",
"aliases": [
"the archmage"
],
"confidence": 0.92,
"enabled": true
}
]
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| entries | array | Entri leksikon. |
| entries[].canonical | string | Nama kanonis. |
| entries[].type | string | Jenis entitas. nilai: npc | place | item | creature | other |
| entries[].aliases | string[] | Nama alternatif / alias. |
| entries[].confidence | number | Keyakinan ekstraksi, 0–1. |
| entries[].enabled | boolean | Apakah entri ini aktif. |
get_transcript_window
Tanpa biaya tool tambahan
Potongan posisional dari giliran tersimpan suatu sesi (tanpa pencarian konten — hanya indeks giliran dari/ke).
Contoh input
{
"recap_id": "…",
"from": 0,
"to": 20
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| recap_id | string (uuid) | Rekap/sesi yang akan dibaca. Gunakan list_sessions untuk menemukan id. |
| from | integer | Indeks giliran awal (inklusif, default 0). |
| to | integer | Indeks giliran akhir. Hilangkan untuk jendela 50 giliran dari indeks awal. |
Contoh output
{
"recap_id": "…",
"total_turns": 184,
"from": 0,
"to": 20,
"turns": [
{
"index": 0,
"t": "~00:01",
"speaker": "GM",
"text": "…"
}
]
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| total_turns | integer | Total giliran dalam sesi. |
| from | integer | Indeks awal yang dikembalikan. |
| to | integer | Indeks akhir yang dikembalikan. |
| turns | array | Giliran dalam jendela yang diminta. |
| turns[].index | integer | Indeks posisional dalam sesi. |
| turns[].t | string | Timestamp relatif, mis. ~00:01. |
| turns[].speaker | string | Nama tampilan pembicara. |
| turns[].text | string | Teks yang diucapkan. |
get_recap
Tanpa biaya tool tambahan
HTML rekap yang aman untuk pemain untuk rekap yang siap. Jenis artefak dimiliki server; tidak ada input tipe.
Contoh input
{
"recap_id": "…"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| recap_id | string (uuid) | Rekap/sesi yang rekap aman untuk pemainnya harus diambil. |
Contoh output
{
"recap": {
"recap_id": "…",
"content_type": "player_recap_html",
"html": "<!doctype html>…",
"truncated": false
}
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| recap.recap_id | string (uuid) | Id rekap/sesi. |
| recap.content_type | string | Selalu player_recap_html. nilai: player_recap_html |
| recap.html | string | HTML rekap yang aman untuk pemain. |
| recap.truncated | boolean | True saat batas respons MCP memangkas HTML. |
search_transcript
Tanpa biaya tool tambahan
Pencarian kata kunci persis (full-text) atas giliran transkrip kampanye Anda. Mengembalikan giliran yang berisi frasa persis, beserta sesi, pembicara, dan timestamp-nya — tanpa LLM, tanpa embedding, tanpa kredit.
Contoh input
{
"campaign_id": "a1b2c3d4-…",
"query": "white moose",
"recap_id": "r1e2c3a4-…"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dicari. |
| query | string | Frasa persis yang dicocokkan (pencarian full-text terhadap teks transkrip). |
| recap_id | string (uuid) | omitted | Cakupan sesi opsional. Gunakan list_sessions untuk menemukan id rekap. |
Contoh output
{
"query": "white moose",
"matches": [
{
"recap_id": "…",
"speaker": "GM",
"t": "~01:04",
"text": "All you know is that it’s a white moose."
}
]
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| query | string | Gema dari query yang dikirim. |
| matches | array | Giliran transkrip yang berisi frasa persis, kecocokan terbaik lebih dulu. |
| matches[].recap_id | string (uuid) | Rekap/sesi asal kecocokan. |
| matches[].speaker | string | Pembicara dari giliran yang cocok. |
| matches[].t | string | Timestamp relatif, mis. ~01:04. |
| matches[].text | string | Teks transkrip yang cocok. |
search_facts
Tanpa biaya tool tambahan
Pencarian full-text kata kunci atas beat adegan kampanye Anda — ringkasan padat per-beat yang menjadi dasar penalaran jalur chat. Terbaik untuk istilah persis (nama, item, tempat). Mengembalikan teks beat dengan konteks adegan/sesi dan rentang gilirannya, sehingga agen dapat menemukan momen tersebut dan mengambil jendela transkrip persisnya berikutnya. Tanpa LLM, tanpa embedding, tanpa kredit. Untuk pencarian berbasis makna dengan bahasa alami, gunakan search_corpus.
Contoh input
{
"campaign_id": "a1b2c3d4-…",
"query": "white moose hunt",
"recap_id": "r1e2c3a4-…"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dicari. |
| query | string | Kata kunci yang dicocokkan terhadap teks beat (pencarian full-text). |
| recap_id | string (uuid) | omitted | Cakupan sesi opsional. Gunakan list_sessions untuk menemukan id rekap. |
Contoh output
{
"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
}
]
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| matches | array | Beat yang cocok, kecocokan terbaik lebih dulu. |
| matches[].recap_id | string (uuid) | Sesi asal beat. |
| matches[].session_number | integer | null | Nomor sesi milik GM, jika diatur. |
| matches[].session_title | string | null | Judul sesi, jika diatur. |
| matches[].scene_title | string | null | Judul adegan tempat beat berada. |
| matches[].beat_index | integer | Posisi beat dalam adegannya. |
| matches[].turn_start | integer | Giliran pertama jendela beat (umpankan ke get_transcript_window). |
| matches[].turn_end | integer | Giliran terakhir jendela beat. |
| matches[].text | string | Teks beat (dibatasi 1200 karakter). |
| matches[].truncated | boolean | True saat teks beat dipangkas. |
Menggunakan kredit chat
Tiga tool menghabiskan kredit chat terukur. Pikirkan pencari vs jawaban: search_corpus (kredit chat rendah) memberi Anda kecocokan terkuat sebagai bukti terstruktur untuk penalaran model Anda sendiri — pencari cepat, bukan indeks menyeluruh; ask_campaign_cited menjawab pertanyaan yang ditujukan untuk GM dengan kutipan transkrip verbatim dan sitasi giliran; dan ask_player_campaign_cited memberikan versi lebih singkat yang ditujukan untuk pemain melalui jalur pemain. Semuanya dibatasi lajunya per kunci API selain saldo Anda.
search_corpus
Menggunakan kredit chat rendah
search_corpus menemukan momen kampanye yang relevan bahkan ketika Anda tidak mengetahui kata-kata persisnya. Alat ini menggunakan pencarian semantik dan peringkat ulang untuk mengembalikan kecocokan bukti terkuat, termasuk ringkasan, konteks sesi, dan rentang giliran. Ini adalah pencari, bukan indeks menyeluruh: hanya kecocokan teratas yang dikembalikan, jadi anggap hasil kosong atau tipis sebagai "tidak ada yang kuat muncul," bukan bukti bahwa tidak ada apa-apa. Gunakan kecocokan tersebut untuk menemukan istilah atau nama sebenarnya yang digunakan tabel, lalu jalankan pencarian kata kunci gratis yang menyeluruh dengan search_facts / search_transcript, atau bawa rentang giliran langsung ke get_transcript_window untuk segmen verbatim. Untuk jawaban yang pasti dan terverifikasi atas sebuah pertanyaan — kutipan verbatim dan sitasi — gunakan ask_campaign_cited sebagai gantinya (lebih mahal, berupa balasan tertulis alih-alih baris terstruktur). Setel player_safe: true untuk mengecualikan konten khusus GM dari hasil pencarian. Ini menggunakan kredit chat rendah per pencarian, ditagih pada setiap pencarian yang selesai, bahkan yang tidak menemukan kecocokan.
Contoh input
{
"campaign_id": "a1b2c3d4-…",
"query": "when did the party first distrust the mayor?",
"player_safe": false
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan dicari. |
| query | string | Deskripsi bahasa alami tentang apa yang Anda cari. |
| player_safe | boolean (default false) | Ketika true, pengambilan difilter berdasarkan visibilitas — memori khusus GM, memori yang disimpulkan dan spekulasi, serta lore yang diketik GM dikecualikan. Gunakan untuk apa pun yang akan dilihat pemain. |
Contoh output
{
"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>"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| matches | array | Kecocokan memori yang diperingkat, kecocokan terbaik lebih dulu. |
| matches[].object_id | string (uuid) | Id objek memori. |
| matches[].type | string | Jenis memori (mis. plot_event, npc_fact). |
| matches[].visibility | string | Siapa yang mengetahui ini. Pada pencarian player_safe, nilainya selalu hanya yang terlihat oleh pemain. |
| matches[].recap_id | string (uuid) | null | Sesi asal memori tersebut. |
| matches[].session_number | integer | null | Nomor sesi GM, jika diatur. |
| matches[].session_title | string | null | Judul sesi, jika diatur. |
| matches[].turn_start | integer | null | Giliran pertama dari jendela bukti (masukkan ke get_transcript_window). |
| matches[].turn_end | integer | null | Giliran terakhir dari jendela bukti. |
| matches[].text | string | Ringkasan memori (dibatasi 1200 karakter). |
| matches[].truncated | boolean | True ketika ringkasan dipotong. |
| credit_cost | number | Kredit chat yang ditagih untuk pencarian yang selesai ini. |
ask_campaign_cited
Menggunakan kredit chat
Ajukan pertanyaan faktual yang ditujukan untuk GM kepada kampanye Anda dan dapatkan jawaban AI — mesin jawaban beat yang sama seperti di chat dalam aplikasi, dengan kutipan transkrip verbatim dan sitasi giliran. Menggunakan kredit chat GM, biaya yang sama dengan chat dalam aplikasi. Dibatasi lajunya per kunci API selain saldo Anda.
Contoh input
{
"campaign_id": "a1b2c3d4-…",
"question": "Where did the hunter see the moose?"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan ditanyai. |
| question | string | Pertanyaan Anda. |
| clarification | object | omitted | Opsional: jawab pertanyaan klarifikasi yang diajukan mesin (hanya jalur GM). |
| clarification.question | string | Pertanyaan klarifikasi dari mesin. |
| clarification.answer | string | Jawaban Anda untuk pertanyaan tersebut. |
| supersedes | string | omitted | Id pesan dari jawaban sebelumnya yang akan diganti (hanya jalur GM). |
Contoh output
{
"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
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| answer_markdown | string | Jawaban yang disitasi, dengan penanda [n] inline. |
| citations | array | Metadata sitasi yang mendukung setiap penanda. |
| quotes | array | Kutipan transkrip verbatim yang digunakan sebagai bukti. |
| confidence_label | string | Pita keyakinan kasar. nilai: high | medium | low |
| credit_cost | number | Kredit yang ditagih untuk jawaban ini. |
| quotes[].turn | integer | Indeks giliran yang disitasi. |
| quotes[].recap_id | string (uuid) | null | Sesi asal kutipan tersebut. |
ask_player_campaign_cited
Menggunakan kredit chat
Ajukan pertanyaan kampanye faktual yang ditujukan untuk pemain dan dapatkan jawaban singkat yang aman untuk pemain dengan sitasi transkrip. Konten khusus GM dikecualikan oleh jalur pemain di sisi server. Menggunakan kredit chat pemain.
Contoh input
{
"campaign_id": "a1b2c3d4-…",
"question": "What do we know about the harbour?"
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| campaign_id | string (uuid) | Kampanye yang akan ditanyai. |
| question | string | Pertanyaan Anda. |
Contoh output
{
"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
}
Deskripsi field
| Field | Tipe | Deskripsi |
|---|---|---|
| answer_markdown | string | Jawaban yang disitasi, dengan penanda [n] inline. |
| citations | array | Metadata sitasi yang mendukung setiap penanda. |
| quotes | array | Kutipan transkrip verbatim yang digunakan sebagai bukti. |
| confidence_label | string | Pita keyakinan kasar. nilai: high | medium | low |
| credit_cost | number | Kredit yang ditagih untuk jawaban ini. |
Contoh aman untuk pemain
Membangun bot atau overlay yang ditujukan untuk pemain? Gunakan alat sitasi pemain agar jawaban berasal dari jalur pemain, yang ledger terfilter visibilitasnya tidak pernah menyertakan konten khusus GM:
{
"tool": "ask_player_campaign_cited",
"arguments": {
"campaign_id": "a1b2c3d4-…",
"question": "What do we know about the harbour?"
}
}
Ke mana data Anda pergi
Ketika Anda menghubungkan klien MCP dan menggunakan alat-alat ini, konten kampanye Anda dikirim ke klien AI yang Anda pilih — misalnya ChatGPT, Claude, atau Gemini. Ketentuan penggunaan data dan pelatihan penyedia tersebut berlaku untuk apa yang Anda kirimkan kepadanya, bukan ketentuan kami.
Jaminan tanpa pelatihan Recap Raven mencakup pipeline kami sendiri dan penyedia model yang kami ungkapkan. Jaminan ini tidak dapat mencakup klien yang Anda hubungkan: dengan menghubungkannya, Anda memilih prosesor baru untuk data kampanye Anda. Harap periksa ketentuan klien tersebut sebelum menghubungkannya, dan gunakan ask_player_campaign_cited atau filter pencarian aman untuk pemain (serta hindari pembacaan khusus GM seperti lore dan chronicle) untuk apa pun yang akan dilihat pemain.
Ada pertanyaan atau masukan? Lihat cara kerja Recap Raven atau undang bot di bawah ini.
Jalankan Recap Raven di sesi berikutnya
Undang bot, buat kampanye Anda, dan dapatkan rekap gratis setiap bulan.
Jalankan Recap Raven di sesi berikutnya
Tanpa kartu · Rekam hanya dengan persetujuan meja Anda · Hapus atau ekspor data Anda kapan saja
Ada pertanyaan atau masukan? Bergabunglah dengan komunitas Discord kami →
Dibuat untuk suara Discord. Kami merekam seluruh sesi untuk Anda — tanpa perlu login setelahnya, tanpa file yang harus dikirim kepada kami, dan tanpa menebak siapa yang berbicara. Paket memori menjaga wiki dunia Anda yang dapat diedit tetap mutakhir saat Anda bermain, siap untuk pertanyaan tentang apa yang terjadi, siapa mengatakan apa, hook yang terbuka, dan apa yang harus disiapkan selanjutnya.