Recap Raven
официальныйЗаметки для D&D в Discord: ищите и цитируйте записи сессий TTRPG, квесты, NPC и расшифровки из любого ИИ. Требуется ключ API Recap Raven.
Что можно делать с Recap Raven MCP?
- Список кампаний и сессий — Попросите ваш ИИ перечислить ваши кампании и сопоставить номер сессии с нужным пересказом, прежде чем запрашивать подробности.
- Поиск по транскриптам и сценам — Выполняйте точный поиск по ключевым словам среди реплик транскрипта или сцен, чтобы найти, где упоминалось имя, предмет или место.
- Чтение пересказов и фрагментов транскрипта — Получите безопасный для игроков пересказ или позиционный срез сохранённых реплик сессии по диапазону индексов.
- Просмотр подготовки и открытых сюжетных линий — Извлеките неразрешённые сюжетные зацепки, пакет подготовки к следующей сессии и сводку «ранее в кампании».
- Поиск сущностей и лора — Получите список сущностей или карточку отдельной сущности, а также документы лора и словарные статьи.
- Проверка вовлечённости и квестов — Просмотрите тенденции участия по каждому говорящему, видимый игрокам журнал квестов и использование ваших кредитов Ask.
Размещённый MCP-сервер
npx add-mcp 'https://mcp.recapraven.com/mcp'Устанавливается в Claude Code, Codex, Cursor и другие
Документация
Для пользовательских ИИ-процессов
Ваши инструменты кампании в совместимом ИИ-клиенте.
Читайте свои резюме и данные кампании через MCP. Существующий доступ по API-ключу работает с совместимыми клиентами. Войдите из ИИ-приложения, которое поддерживает публичную идентичность клиента; перед подключением проверьте требования вашего клиента ниже.
Что такое MCP?
MCP позволяет совместимым ИИ-приложениям напрямую вызывать инструменты Recap Raven. Вместо копирования резюме в другой ИИ ваш ИИ может запрашивать у Recap Raven сессии, окна транскриптов, зацепки, сущности, цитаты и ответы по кампании.
Начало работы
Удалённая конечная точка MCP Raven — https://mcp.recapraven.com/mcp . Выберите клиент для инструкций по настройке. Premium включает детерминированные чтения; для поиска по памяти и ответов ИИ требуется Searchable Memory.
Конечная точка MCP
https://mcp.recapraven.com/mcp
Настройка ChatGPT
- На сайте ChatGPT откройте Plugins, выберите +, затем Add custom MCP server. Введите «Recap Raven» и URL сервера ниже.
- Когда вход в Raven включён, выберите OAuth и опцию опубликованной идентичности клиента (CIMD) с аутентификацией публичного клиента. Секрет клиента или API-ключ Raven не нужен. Автоматическая регистрация клиента Raven не поддерживается.
- Создайте плагин, установите его, затем войдите в Raven и проверьте идентичность приложения и запрашиваемый доступ. Одобряйте только то подключение, которое начали вы сами.
- В беседе выберите Recap Raven через @ и спросите: «Use Recap Raven to list my campaigns.»
- Инструменты чтения и записи зависят от ваших разрешений и подтверждений. Если настройка отсутствует, проверьте ограничения рабочего пространства и официальное руководство по настройке ChatGPT для вашего приложения.
URL удалённого сервера ChatGPT
https://mcp.recapraven.com/mcp
Согласие и помощь с подключением
Подключение при входе в Raven запросит разрешение на доступ к вашим кампаниям, транскриптам и информации только для мастера. Результаты инструментов передаются выбранному вами поставщику ИИ, а платные инструменты расходуют ваши существующие кредиты Ask.
Если вы одобрите фоновый доступ, приложение сможет обновлять своё подключение до 30 дней, даже когда вы вышли из Raven. После истечения срока или отзыва подключитесь заново и одобрите снова. В Настройках аккаунта просмотрите одобренные ИИ-подключения и отключите одно подключение или используйте Disconnect all AI connections. API-ключи управляются отдельно.
Пустые результаты? Проверьте, что вы вошли в аккаунт Raven, которому принадлежат ваши кампании. Изменение плана может лишить доступа к инструментам; для ответов ИИ также нужны доступные кредиты. Если согласие истекло или не удалось, перезапустите подключение из клиента.
Отсутствующие меню или неподдерживаемое рабочее пространство нельзя исправить, изменив ваш ключ Raven. Проверьте требования поставщика по ссылке или свяжитесь с нашим сообществом в Discord, указав название приложения, версию и сообщение об ошибке. Не отправляйте токены или ключи.
Доступно на Premium и Searchable Memory
Premium включает API-ключи и доступ к вашим доступным резюме, транскриптам и ручным данным World. Для инструментов памяти, поиска по кампании и ответов ИИ требуется Searchable Memory. Семантический поиск и ответы ИИ расходуют ваши существующие кредиты Ask.
Доступность MCP по планам
| Бесплатный тариф | Недоступно |
| Premium | API-ключи, доступные резюме, транскрипты и ручные данные World. Инструменты памяти не включены. |
| Планы с памятью | Детерминированные инструменты без дополнительной платы; search_corpus использует низкие чат-кредиты за поиск, а инструменты ask с цитированием расходуют кредиты Ask. |
| API-ключ | Создайте один персональный API-ключ в API Keys. Отзывайте в любое время; доступ по MCP прекращается, когда аккаунт возвращается на Free. |
Добросовестное использование и ограничения скорости
Сервер MCP — это общая поверхность с учётом использования. Чтобы поддерживать её устойчивость (и не дать вышедшему из-под контроля циклу агента сжечь всю лицензию за минуты), каждый API-ключ имеет ограничение скорости в дополнение к вашей квоте Ask.
Ограничения скорости MCP
| Добросовестное использование сервера | Потолок запросов на API-ключ на самом сервере MCP (все вызовы инструментов вместе) — не даёт одному ключу завалить конечную точку. Ответы сверх лимита возвращают 429 с Retry-After. |
| Premium · все планы / Memory · 5 сессий | 15 запросов/минуту и 150 запросов/час. |
| Memory · 10 сессий | 30 запросов/минуту и 450 запросов/час. |
| Memory · 20 сессий | 60 запросов/минуту и 1200 запросов/час. |
| Бесплатные инструменты | Ограничены по скорости на API-ключ. Детерминированные чтения и поиск по ключевым словам (search_transcript, search_facts) не стоят кредитов. Семантический search_corpus здесь не включён; он использует низкие чат-кредиты за завершённый поиск. |
| Инструменты с чат-кредитами | search_corpus (низкие чат-кредиты) и инструменты ask с цитированием ограничены как вашей квотой Ask, так и лимитом скорости на ключ. Шлюз использования останавливает расход, когда квота исчерпана; ограничение скорости не даёт всплеску мгновенно её опустошить. Отдельной квоты MCP нет — ваш агент расходует те же чат-кредиты на лицензию, что и в приложении. |
Включено без дополнительной платы
Детерминированные инструменты чтения — сессии, сущности и журнал, зацепки, механики, вовлечённость, поиск по транскриптам и битам, резюме, лор и лексикон. Они возвращают сохранённые данные кампании без ИИ-вывода, поэтому доступные инструменты не стоят кредитов. Инструменты памяти по-прежнему требуют Searchable Memory. Семантический search_corpus не входит в этот список; он использует низкие чат-кредиты. Разверните любой инструмент, чтобы увидеть пример ввода, пример вывода и справку по полям.
list_campaigns
Без дополнительной платы за инструмент
Инструмент обнаружения: перечисляет кампании, доступные вашему ключу MCP, чтобы другие инструменты могли использовать правильный campaign_id.
Пример ввода
{}
Пример вывода
{
"campaigns": [
{
"campaign_id": "a1b2c3d4-…",
"name": "The White Moose",
"module": "Dolmenwood"
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaigns | array | Кампании, принадлежащие вашему аккаунту. |
| campaigns[].campaign_id | string (uuid) | Используйте этот id с инструментами MCP, привязанными к кампании. |
| campaigns[].name | string | Название кампании. |
| campaigns[].module | string | null | Необязательная метка модуля/системы. |
list_sessions
Без дополнительной платы за инструмент
Инструмент обнаружения: перечисляет готовые сессии с их session_number и названием, чтобы агент мог сопоставить «сессию 12» с правильным recap_id.
Пример ввода
{
"campaign_id": "a1b2c3d4-…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | omitted | Необязательный фильтр по кампании. |
Пример вывода
{
"recaps": [
{
"recap_id": "r1e2c3a4-…",
"campaign_id": "a1b2c3d4-…",
"session_number": 12,
"title": "The Choosing",
"status": "ready"
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| recaps | array | Готовые сессии, видимые вашему аккаунту. |
| recaps[].recap_id | string (uuid) | Используйте этот id с get_recap, get_transcript_window и get_mechanics_events. |
| recaps[].campaign_id | string (uuid) | null | Кампания, которой принадлежит сессия. |
| recaps[].session_number | integer | null | Собственная нумерация сессий мастера с отсчётом от 1 (редактируемая DM), если задана. |
| recaps[].title | string | null | Название сессии. |
| recaps[].status | string | Перечисляются только готовые сессии. |
get_engagement
Без дополнительной платы за инструмент
Панель вовлечённости кампании: тренд участия по каждому говорящему и кэшированный межсессионный синтез (сводка + хронология ключевых событий).
Пример ввода
{
"campaign_id": "a1b2c3d4-…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для чтения. Должна принадлежать вашему аккаунту. |
Пример вывода
{
"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
}
]
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| sessions | array | Одна запись на каждую готовую сессию в кампании. |
| sessions[].recap_id | string (uuid) | Id резюме/сессии. |
| sessions[].session_ref | string | Короткая человекочитаемая ссылка, например S01AB. |
| sessions[].session_at | string (ISO 8601) | Когда началась сессия (UTC). |
| players | array | Одна запись на каждого распознанного говорящего. |
| players[].speaker | string | Отображаемое имя говорящего. |
| players[].points | array | Метрики по сессиям для этого говорящего. |
| players[].points[].participation_pct | number | Доля разговора, 0–100. |
| players[].points[].turn_count | integer | Количество сделанных реплик. |
| players[].points[].talk_time_seconds | integer | Общее время речи в секундах. |
| players[].points[].word_count | integer | Общее количество произнесённых слов. |
get_credit_balance
Без дополнительной платы за инструмент
Ваша квота Ask в процентах использования плюс лента недавней активности. Сырые значения квоты не раскрываются клиентам MCP.
Пример ввода
{}
Пример вывода
{
"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"
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| usage.percent_used | integer | Использование Ask целым числом от 0 до 100. |
| recent_activity | array | Лента от новых к старым (события session-recorded, recap-ready, credit-ledger). |
| recent_activity[].type | string | Вид события. значения: recap_ready | session_recorded | credit |
| recent_activity[].label | string | Человекочитаемая сводка. |
| recent_activity[].date | string (ISO 8601) | Когда произошло событие. |
| recent_activity[].recap_id | string (uuid) | null | Присутствует для событий, связанных с резюме/сессией. |
get_memory_overview
Без дополнительной платы за инструмент
Самый богатый блок ситуационной осведомлённости мастера: распределение, тренд вовлечённости + общая оценка, участие по сессиям, столпы игры.
Пример ввода
{
"campaign_id": "a1b2c3d4-…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для чтения. |
Пример вывода
{
"distribution": [
{
"label": "Roleplay",
"pct": 58
}
],
"engagement": {
"overall": {
"score": 74,
"label": "Playful / tense"
}
},
"pillars": [
"The green-eyed stranger",
"The old inn",
"The white moose hunt"
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| distribution | array | Доля игры по категориям. |
| distribution[].label | string | Название категории. |
| distribution[].pct | number | Доля, 0–100. |
| engagement.overall.score | number | null | Составная оценка вовлечённости, 0–100. |
| engagement.overall.label | string | null | Качественная метка, например «Playful / tense». |
| pillars | string[] | null | Повторяющиеся темы / столпы игры. |
get_quest_log
Без дополнительной платы за инструмент
Журнал заданий, видимый игрокам. Добавления и правки мастера передаются группе через Discord /questlog. Держите секреты мастера вне его.
Пример ввода
{
"campaign_id": "a1b2c3d4-…",
"page": 1
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Ваша кампания для чтения. |
| page | integer | Необязательно, начиная с 1. Десять заданий на страницу. |
Пример вывода
{
"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
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| quests | array | Сначала активные/устаревшие, затем завершённые/заброшенные. Внутренние метаданные редактирования и ссылки на источники исключены. |
| quests[].id | string (uuid) | Идентификатор задания. |
| quests[].title | string | Название задания. |
| quests[].objective | string | Цель группы. |
| quests[].status | string | active, stale, completed или abandoned. |
| quests[].progress | string | Последний сохранённый прогресс. |
| page | integer | Текущая страница. |
| has_more | boolean | Запрашивайте следующую страницу, когда true. |
get_open_hooks
Без дополнительной платы за инструмент
Неразрешённые сюжетные зацепки — что готовить к следующей сессии.
Пример ввода
{
"campaign_id": "a1b2c3d4-…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для чтения. |
Пример вывода
{
"hooks": [
{
"text": "Nobody bypasses the Choosing.",
"session_ref": "S01AB",
"session_date": "2026-06-20"
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| hooks | array | Текущие открытые сюжетные зацепки. |
| hooks[].text | string | Описание зацепки. |
| hooks[].session_ref | string | Сессия, в которой была введена зацепка. |
| hooks[].session_date | string (YYYY-MM-DD) | Дата этой сессии. |
get_previously_on
Без дополнительной платы за инструмент
Контекст «ранее в кампании», построенный из памяти, привязанной к владельцу.
Пример ввода
{
"campaign_id": "a1b2c3d4-…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для чтения. |
Пример вывода
{
"sections": [
{
"title": "Last time",
"bullets": [
"The party followed the white moose into the mist."
]
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| sections | array | Разделы памяти кампании для резюме/контекста. |
| sections[].title | string | Заголовок раздела. |
| sections[].bullets | string[] | Краткие пункты памяти. |
get_next_session_prep_pack
Без дополнительной платы за инструмент
Рекомендация по подготовке к следующей сессии только для мастера из кэша подготовки Recap Raven. Может сгенерироваться один раз, затем остаётся в кэше до приёма следующего пересказа. Возвращает credit_cost: 0.
Пример входных данных
{
"campaign_id": "a1b2c3d4-…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для подготовки. Должна принадлежать вашей учётной записи. |
Пример выходных данных
{
"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"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| likely_directions | array | Вероятные дальнейшие направления, ориентированные на мастера. |
| threads_to_watch | string[] | Сюжетные линии, которые мастеру стоит держать в уме. |
| prep_suggestions | string[] | Конкретные подсказки по подготовке для мастера. |
| credit_cost | number | Всегда 0 для этого инструмента MCP. |
| cache_policy | string | cached_until_next_recap_ingested. |
get_chronicle
Без дополнительной платы за инструмент
Карта сцен по сессиям — структурированная хроника кампании.
Пример входных данных
{
"campaign_id": "a1b2c3d4-…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для чтения. |
Пример выходных данных
{
"sessions": [
{
"recap_id": "…",
"session_ref": "S01AB",
"scenes": [
"The market",
"The hunt",
"The banshee fight"
]
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| sessions | array | Одна запись на сессию. |
| sessions[].recap_id | string (uuid) | Идентификатор пересказа/сессии. |
| sessions[].scenes | string[] | Упорядоченные метки сцен для этой сессии. |
get_entity
Без дополнительной платы за инструмент
Реестр сущностей, видимых игрокам, построенный по записанным сессиям; приватные загруженные материалы лора исключены. Без имени возвращает список. С именем или псевдонимом возвращает соответствующую карточку, историю взаимодействий, ссылки на реплики транскрипта, связи или кандидатов при неоднозначности.
Пример входных данных
{
"campaign_id": "a1b2c3d4-…",
"name": "Captain Vale"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для чтения. |
| name | string | omitted | Имя/псевдоним сущности для сопоставления с одной карточкой. Опустите для получения списка. |
Пример выходных данных
{
"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"
}
]
}
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| entities | array (режим списка) | Когда имя не указано: {canonical_name, kind, aliases, search_aliases} для каждой сущности. |
| entity | object | null (режим карточки) | Когда имя указано: сопоставленная карточка сущности или null, если имя ни с чем не совпадает. |
| candidates | array | Возможные карточки сущностей, когда псевдоним неоднозначен; пусто, когда сопоставление однозначно. |
| entity.id | string (uuid) | Стабильный идентификатор сущности кампании. |
| entity.canonical_name | string | Каноническое имя сущности. |
| entity.kind | string | Вид сущности. values: pc | npc | creature | place | item | faction | deity | other |
| entity.aliases | string[] | Отображаемые псевдонимы. |
| entity.search_aliases | string[] | Псевдонимы только для поиска. |
| entity.interactions | array | Обоснованные записи истории со ссылками на пересказ и реплики транскрипта. |
| entity.interactions[].recap_id | string (uuid) | Сессия, содержащая взаимодействие. |
| entity.interactions[].turn_start | integer | null | Первая реплика транскрипта для ссылки на свидетельство. |
| entity.interactions[].turn_end | integer | null | Последняя реплика транскрипта для ссылки на свидетельство. |
| entity.interactions[].identity_match | string | confirmed или suggested; suggested-связи — это возможные совпадения по псевдониму, а не утверждения о канонической идентичности. values: confirmed | suggested |
| entity.relations | array | Граф связей (от старых к новым). |
| entity.relations[].predicate | string | Например, located_in, ally_of, owns. |
| entity.relations[].recap_id | string (uuid) | Сессия, подтверждающая связь. |
| entity.relations[].visibility | string | Видимость ребра для мастера. Устаревшие данные до появления свидетелей могут содержать рёбра dm_only — не показывайте их игрокам. values: player_known | dm_only |
| entity.relations[].is_current | boolean | Актуальное звено для предиката с состоянием. |
get_mechanics_events
Без дополнительной платы за инструмент
События механики, привязанные к репликам (атаки, заклинания, урон, отдых, состояния), для одной сессии — те же данные, что на вкладке механики.
Пример входных данных
{
"recap_id": "…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| recap_id | string (uuid) | Сессия для чтения. Используйте list_sessions, чтобы узнать идентификаторы. |
Пример выходных данных
{
"recap_id": "…",
"mechanics": [
{
"action": "attack",
"actor": "Mira",
"target": "Goblin",
"damage_amount": 7,
"damage_type": "slashing",
"evidence_turn_start": 41,
"evidence_turn_end": 41
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| recap_id | string (uuid) | Сессия, к которой относятся эти события. |
| mechanics | array | События механики, привязанные к репликам. |
| mechanics[].action | string | Вид события. values: attack | spell_cast | short_rest | long_rest | consumable_used | condition_applied | ability_used | form_changed |
| mechanics[].actor | string | Кто действовал. |
| mechanics[].evidence_turn_start | integer | Первая реплика, подтверждающая событие. |
| mechanics[].evidence_turn_end | integer | Последняя реплика, подтверждающая событие. |
get_lore_documents
Без дополнительной платы за инструмент
Список документов лора для кампании.
Пример входных данных
{
"campaign_id": "a1b2c3d4-…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для чтения. |
Пример выходных данных
{
"documents": [
{
"id": "…",
"title": "The Choosing",
"updated_at": "2026-06-20"
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| documents | array | Документы лора. |
| documents[].id | string (uuid) | Идентификатор документа. |
| documents[].title | string | Заголовок документа. |
get_lore_document
Без дополнительной платы за инструмент
Один документ лора с полным содержимым.
Пример входных данных
{
"campaign_id": "a1b2c3d4-…",
"doc_id": "…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для чтения. |
| doc_id | string (uuid) | Документ лора для получения. |
Пример выходных данных
{
"document": {
"id": "…",
"title": "The Choosing",
"body": "…"
}
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| document.id | string (uuid) | Идентификатор документа. |
| document.title | string | Заголовок документа. |
| document.body | string | Полное содержимое документа (markdown). |
get_lexicon
Без дополнительной платы за инструмент
Записи лексикона (канонические имена, псевдонимы, тип, уверенность).
Пример входных данных
{
"campaign_id": "a1b2c3d4-…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для чтения. |
Пример выходных данных
{
"entries": [
{
"id": "…",
"canonical": "Sol’Thun",
"type": "npc",
"aliases": [
"the archmage"
],
"confidence": 0.92,
"enabled": true
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| entries | array | Записи лексикона. |
| entries[].canonical | string | Каноническое имя. |
| entries[].type | string | Вид сущности. values: npc | place | item | creature | other |
| entries[].aliases | string[] | Альтернативные имена / псевдонимы. |
| entries[].confidence | number | Уверенность извлечения, 0–1. |
| entries[].enabled | boolean | Активна ли эта запись. |
get_transcript_window
Без дополнительной платы за инструмент
Позиционный срез сохранённых реплик сессии (без поиска по содержимому — только индексы реплик от/до).
Пример входных данных
{
"recap_id": "…",
"from": 0,
"to": 20
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| recap_id | string (uuid) | Пересказ/сессия для чтения. Используйте list_sessions, чтобы узнать идентификаторы. |
| from | integer | Начальный индекс реплики (включительно, по умолчанию 0). |
| to | integer | Конечный индекс реплики. Опустите для окна в 50 реплик от начального индекса. |
Пример выходных данных
{
"recap_id": "…",
"total_turns": 184,
"from": 0,
"to": 20,
"turns": [
{
"index": 0,
"t": "~00:01",
"speaker": "GM",
"text": "…"
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| total_turns | integer | Всего реплик в сессии. |
| from | integer | Возвращённый начальный индекс. |
| to | integer | Возвращённый конечный индекс. |
| turns | array | Реплики в запрошенном окне. |
| turns[].index | integer | Позиционный индекс в сессии. |
| turns[].t | string | Относительная метка времени, например ~00:01. |
| turns[].speaker | string | Отображаемое имя говорящего. |
| turns[].text | string | Произнесённый текст. |
get_recap
Без дополнительной платы за инструмент
Безопасный для игроков HTML-пересказ для готового пересказа. Тип артефакта задаётся сервером; входного параметра типа нет.
Пример входных данных
{
"recap_id": "…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| recap_id | string (uuid) | Пересказ/сессия, для которой нужно получить безопасный для игроков пересказ. |
Пример выходных данных
{
"recap": {
"recap_id": "…",
"content_type": "player_recap_html",
"html": "<!doctype html>…",
"truncated": false
}
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| recap.recap_id | string (uuid) | Идентификатор пересказа/сессии. |
| recap.content_type | string | Всегда player_recap_html. values: player_recap_html |
| recap.html | string | Безопасный для игроков HTML-пересказ. |
| recap.truncated | boolean | True, когда ограничение размера ответа MCP обрезало HTML. |
search_transcript
Без дополнительной платы за инструмент
Точный поиск по ключевым словам (полнотекстовый) по репликам транскрипта вашей кампании. Возвращает реплики, содержащие точную фразу, с их сессией, говорящим и меткой времени — без LLM, без эмбеддингов, без кредитов.
Пример входных данных
{
"campaign_id": "a1b2c3d4-…",
"query": "white moose",
"recap_id": "r1e2c3a4-…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для поиска. |
| query | string | Точная фраза для сопоставления (полнотекстовый поиск по тексту транскрипта). |
| recap_id | string (uuid) | omitted | Необязательное ограничение по сессии. Используйте list_sessions, чтобы узнать идентификаторы пересказов. |
Пример выходных данных
{
"query": "white moose",
"matches": [
{
"recap_id": "…",
"speaker": "GM",
"t": "~01:04",
"text": "All you know is that it’s a white moose."
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| query | string | Эхо отправленного запроса. |
| matches | array | Реплики транскрипта, содержащие точную фразу, лучшее совпадение первым. |
| matches[].recap_id | string (uuid) | Пересказ/сессия, откуда пришло совпадение. |
| matches[].speaker | string | Говорящий в совпавшей реплике. |
| matches[].t | string | Относительная метка времени, например ~01:04. |
| matches[].text | string | Совпавший текст транскрипта. |
search_facts
Без дополнительной платы за инструмент
Полнотекстовый поиск по ключевым словам по сюжетным битам вашей кампании — плотным, пошаговым сводкам, на которых рассуждает чат-канал. Лучше всего подходит для точных терминов (имя, предмет, место). Возвращает текст бита с контекстом сцены/сессии и диапазоном реплик, чтобы агент мог найти момент и затем получить точное окно транскрипта. Без LLM, без эмбеддингов, без кредитов. Для поиска по смыслу на естественном языке используйте search_corpus.
Пример входных данных
{
"campaign_id": "a1b2c3d4-…",
"query": "white moose hunt",
"recap_id": "r1e2c3a4-…"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для поиска. |
| query | string | Ключевые слова для сопоставления с текстом бита (полнотекстовый поиск). |
| recap_id | string (uuid) | omitted | Необязательное ограничение по сессии. Используйте list_sessions, чтобы узнать идентификаторы пересказов. |
Пример выходных данных
{
"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
}
]
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| matches | array | Совпавшие биты, лучшее совпадение первым. |
| matches[].recap_id | string (uuid) | Сессия, откуда пришёл бит. |
| matches[].session_number | integer | null | Номер сессии по версии мастера, если задан. |
| matches[].session_title | string | null | Заголовок сессии, если задан. |
| matches[].scene_title | string | null | Заголовок сцены, к которой относится бит. |
| matches[].beat_index | integer | Позиция бита внутри его сцены. |
| matches[].turn_start | integer | Первая реплика окна бита (передайте в get_transcript_window). |
| matches[].turn_end | integer | Последняя реплика окна бита. |
| matches[].text | string | Текст бита (не более 1200 символов). |
| matches[].truncated | boolean | True, когда текст бита был обрезан. |
Использует чат-кредиты
Три инструмента расходуют оплачиваемые чат-кредиты. Думайте в терминах «поисковик против ответа»: search_corpus (мало чат-кредитов) выдаёт вам сильнейшие совпадения как структурированные свидетельства для рассуждений вашей собственной модели — быстрый поисковик, а не исчерпывающий индекс; ask_campaign_cited отвечает на вопрос, обращённый к мастеру, дословными цитатами из транскрипта и ссылками на реплики; а ask_player_campaign_cited даёт более короткую версию для игроков через игровой канал. Все они ограничены по частоте запросов на каждый API-ключ в дополнение к вашему балансу.
search_corpus
Использует мало чат-кредитов
search_corpus находит релевантные моменты кампании, даже если вы не знаете точных формулировок. Он использует семантический поиск и переранжирование, чтобы вернуть наиболее сильные совпадения по доказательствам, включая сводку, контекст сессии и диапазоны ходов. Это инструмент поиска, а не исчерпывающий индекс: возвращаются только лучшие совпадения, поэтому пустой или скудный результат означает «ничего сильного не всплыло», а не доказательство того, что ничего не существует. Используйте совпадения, чтобы обнаружить реальные термины или имена, которые использовала таблица, затем выполните исчерпывающий свободный поиск по ключевым словам с помощью search_facts / search_transcript или сразу передайте диапазоны ходов в get_transcript_window для дословного фрагмента. Для окончательного, проверенного ответа на вопрос — дословных цитат и ссылок — используйте вместо этого ask_campaign_cited (дороже, письменный ответ вместо структурированных строк). Установите player_safe: true, чтобы исключить контент только для мастера из результатов поиска. Использует низкое количество чат-кредитов за поиск, списываемых за любой завершённый поиск, даже без совпадений.
Пример входных данных
{
"campaign_id": "a1b2c3d4-…",
"query": "when did the party first distrust the mayor?",
"player_safe": false
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания для поиска. |
| query | string | Описание того, что вы ищете, на естественном языке. |
| player_safe | boolean (по умолчанию false) | Когда true, выборка фильтруется по видимости — память только для мастера, выведенная и спекулятивная память, а также лор, введённый мастером, исключаются. Используйте для всего, что увидят игроки. |
Пример выходных данных
{
"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>"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| matches | array | Ранжированные совпадения по памяти, лучшее совпадение первым. |
| matches[].object_id | string (uuid) | Идентификатор объекта памяти. |
| matches[].type | string | Тип памяти (например, plot_event, npc_fact). |
| matches[].visibility | string | Кто это знает. При поиске с player_safe это всегда только видимое игрокам. |
| matches[].recap_id | string (uuid) | null | Сессия, из которой пришла память. |
| matches[].session_number | integer | null | Номер сессии мастера, если задан. |
| matches[].session_title | string | null | Название сессии, если задано. |
| matches[].turn_start | integer | null | Первый ход окна доказательств (передайте в get_transcript_window). |
| matches[].turn_end | integer | null | Последний ход окна доказательств. |
| matches[].text | string | Сводка памяти (не более 1200 символов). |
| matches[].truncated | boolean | True, когда сводка была обрезана. |
| credit_cost | number | Чат-кредиты, списанные за этот завершённый поиск. |
ask_campaign_cited
Использует чат-кредиты
Задайте своей кампании фактический вопрос, ориентированный на мастера, и получите ответ ИИ — тот же движок ответов по битам, что и во встроенном чате, с дословными цитатами из транскрипта и ссылками на ходы. Использует чат-кредиты мастера, та же стоимость, что и во встроенном чате. Ограничение частоты на API-ключ в дополнение к вашему балансу.
Пример входных данных
{
"campaign_id": "a1b2c3d4-…",
"question": "Where did the hunter see the moose?"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания, которой задаётся вопрос. |
| question | string | Ваш вопрос. |
| clarification | object | omitted | Необязательно: ответ на уточняющий вопрос, заданный движком (только для мастера). |
| clarification.question | string | Уточняющий вопрос от движка. |
| clarification.answer | string | Ваш ответ на этот вопрос. |
| supersedes | string | omitted | Идентификатор сообщения предыдущего ответа, который нужно заменить (только для мастера). |
Пример выходных данных
{
"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
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| answer_markdown | string | Ответ со ссылками, с встроенными маркерами [n]. |
| citations | array | Метаданные ссылок, соответствующие каждому маркеру. |
| quotes | array | Дословные цитаты из транскрипта, использованные как доказательства. |
| confidence_label | string | Грубая полоса уверенности. значения: high | medium | low |
| credit_cost | number | Кредиты, списанные за этот ответ. |
| quotes[].turn | integer | Индекс цитируемого хода. |
| quotes[].recap_id | string (uuid) | null | Сессия, из которой пришла цитата. |
ask_player_campaign_cited
Использует чат-кредиты
Задайте фактический вопрос о кампании, ориентированный на игроков, и получите короткий безопасный для игроков ответ со ссылками на транскрипт. Контент только для мастера исключается серверным игровым каналом. Использует чат-кредиты игрока.
Пример входных данных
{
"campaign_id": "a1b2c3d4-…",
"question": "What do we know about the harbour?"
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| campaign_id | string (uuid) | Кампания, которой задаётся вопрос. |
| question | string | Ваш вопрос. |
Пример выходных данных
{
"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
}
Описания полей
| Поле | Тип | Описание |
|---|---|---|
| answer_markdown | string | Ответ со ссылками, с встроенными маркерами [n]. |
| citations | array | Метаданные ссылок, соответствующие каждому маркеру. |
| quotes | array | Дословные цитаты из транскрипта, использованные как доказательства. |
| confidence_label | string | Грубая полоса уверенности. значения: high | medium | low |
| credit_cost | number | Кредиты, списанные за этот ответ. |
Пример для игроков
Создаёте бота или оверлей для игроков? Используйте инструмент с цитированием для игроков, чтобы ответ приходил из игрового канала, чей отфильтрованный по видимости реестр никогда не включает контент только для мастера:
{
"tool": "ask_player_campaign_cited",
"arguments": {
"campaign_id": "a1b2c3d4-…",
"question": "What do we know about the harbour?"
}
}
Куда уходят ваши данные
Когда вы подключаете MCP-клиент и используете эти инструменты, содержимое вашей кампании отправляется выбранному вами ИИ-клиенту — например, ChatGPT, Claude или Gemini. Условия использования данных и обучения этого провайдера применяются к тому, что вы ему отправляете, а не к нам.
Гарантия отсутствия обучения Recap Raven распространяется на наш собственный конвейер и раскрываемых нами поставщиков моделей. Она не может распространяться на клиент, который вы подключаете: подключая его, вы выбираете нового обработчика данных вашей кампании. Пожалуйста, проверьте условия этого клиента перед подключением и используйте ask_player_campaign_cited или фильтры поиска, безопасные для игроков (и избегайте чтения только для мастера, такого как лор и хроника), для всего, что увидят игроки.
Вопросы или отзывы? Узнайте, как работает Recap Raven или пригласите бота ниже.
Запустите Recap Raven на своей следующей сессии
Пригласите бота, создайте кампанию и получайте бесплатные пересказы каждый месяц.
Запустите Recap Raven на своей следующей сессии
Карта не требуется · Записывайте только с согласия вашей группы · Удаляйте или экспортируйте свои данные в любое время
Вопросы или отзывы? Присоединяйтесь к нашему сообществу Discord →
Создано для голосового Discord. Мы записываем всю сессию за вас — не нужно входить afterwards, не нужно отправлять нам файлы и не нужно угадывать, кто говорил. Планы памяти поддерживают вашу редактируемую вики мира в актуальном состоянии по мере игры, готовую к вопросам о том, что произошло, кто что сказал, открытых зацепках и о том, что готовить дальше.