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

  1. На сайте ChatGPT откройте Plugins, выберите +, затем Add custom MCP server. Введите «Recap Raven» и URL сервера ниже.
  2. Когда вход в Raven включён, выберите OAuth и опцию опубликованной идентичности клиента (CIMD) с аутентификацией публичного клиента. Секрет клиента или API-ключ Raven не нужен. Автоматическая регистрация клиента Raven не поддерживается.
  3. Создайте плагин, установите его, затем войдите в Raven и проверьте идентичность приложения и запрашиваемый доступ. Одобряйте только то подключение, которое начали вы сами.
  4. В беседе выберите Recap Raven через @ и спросите: «Use Recap Raven to list my campaigns.»
  5. Инструменты чтения и записи зависят от ваших разрешений и подтверждений. Если настройка отсутствует, проверьте ограничения рабочего пространства и официальное руководство по настройке 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 по планам

Бесплатный тарифНедоступно
PremiumAPI-ключи, доступные резюме, транскрипты и ручные данные 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"
    }
  ]
}

Описания полей

ПолеТипОписание
campaignsarrayКампании, принадлежащие вашему аккаунту.
campaigns[].campaign_idstring (uuid)Используйте этот id с инструментами MCP, привязанными к кампании.
campaigns[].namestringНазвание кампании.
campaigns[].modulestring | nullНеобязательная метка модуля/системы.

list_sessions Без дополнительной платы за инструмент

Инструмент обнаружения: перечисляет готовые сессии с их session_number и названием, чтобы агент мог сопоставить «сессию 12» с правильным recap_id.

Пример ввода

{
  "campaign_id": "a1b2c3d4-…"
}

Описания полей

ПолеТипОписание
campaign_idstring (uuid) | omittedНеобязательный фильтр по кампании.

Пример вывода

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

Описания полей

ПолеТипОписание
recapsarrayГотовые сессии, видимые вашему аккаунту.
recaps[].recap_idstring (uuid)Используйте этот id с get_recap, get_transcript_window и get_mechanics_events.
recaps[].campaign_idstring (uuid) | nullКампания, которой принадлежит сессия.
recaps[].session_numberinteger | nullСобственная нумерация сессий мастера с отсчётом от 1 (редактируемая DM), если задана.
recaps[].titlestring | nullНазвание сессии.
recaps[].statusstringПеречисляются только готовые сессии.

get_engagement Без дополнительной платы за инструмент

Панель вовлечённости кампании: тренд участия по каждому говорящему и кэшированный межсессионный синтез (сводка + хронология ключевых событий).

Пример ввода

{
  "campaign_id": "a1b2c3d4-…"
}

Описания полей

ПолеТипОписание
campaign_idstring (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
        }
      ]
    }
  ]
}

Описания полей

ПолеТипОписание
sessionsarrayОдна запись на каждую готовую сессию в кампании.
sessions[].recap_idstring (uuid)Id резюме/сессии.
sessions[].session_refstringКороткая человекочитаемая ссылка, например S01AB.
sessions[].session_atstring (ISO 8601)Когда началась сессия (UTC).
playersarrayОдна запись на каждого распознанного говорящего.
players[].speakerstringОтображаемое имя говорящего.
players[].pointsarrayМетрики по сессиям для этого говорящего.
players[].points[].participation_pctnumberДоля разговора, 0–100.
players[].points[].turn_countintegerКоличество сделанных реплик.
players[].points[].talk_time_secondsintegerОбщее время речи в секундах.
players[].points[].word_countintegerОбщее количество произнесённых слов.

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_usedintegerИспользование Ask целым числом от 0 до 100.
recent_activityarrayЛента от новых к старым (события session-recorded, recap-ready, credit-ledger).
recent_activity[].typestringВид события.
значения: recap_ready | session_recorded | credit
recent_activity[].labelstringЧеловекочитаемая сводка.
recent_activity[].datestring (ISO 8601)Когда произошло событие.
recent_activity[].recap_idstring (uuid) | nullПрисутствует для событий, связанных с резюме/сессией.

get_memory_overview Без дополнительной платы за инструмент

Самый богатый блок ситуационной осведомлённости мастера: распределение, тренд вовлечённости + общая оценка, участие по сессиям, столпы игры.

Пример ввода

{
  "campaign_id": "a1b2c3d4-…"
}

Описания полей

ПолеТипОписание
campaign_idstring (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"
  ]
}

Описания полей

ПолеТипОписание
distributionarrayДоля игры по категориям.
distribution[].labelstringНазвание категории.
distribution[].pctnumberДоля, 0–100.
engagement.overall.scorenumber | nullСоставная оценка вовлечённости, 0–100.
engagement.overall.labelstring | nullКачественная метка, например «Playful / tense».
pillarsstring[] | nullПовторяющиеся темы / столпы игры.

get_quest_log Без дополнительной платы за инструмент

Журнал заданий, видимый игрокам. Добавления и правки мастера передаются группе через Discord /questlog. Держите секреты мастера вне его.

Пример ввода

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

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Ваша кампания для чтения.
pageintegerНеобязательно, начиная с 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
}

Описания полей

ПолеТипОписание
questsarrayСначала активные/устаревшие, затем завершённые/заброшенные. Внутренние метаданные редактирования и ссылки на источники исключены.
quests[].idstring (uuid)Идентификатор задания.
quests[].titlestringНазвание задания.
quests[].objectivestringЦель группы.
quests[].statusstringactive, stale, completed или abandoned.
quests[].progressstringПоследний сохранённый прогресс.
pageintegerТекущая страница.
has_morebooleanЗапрашивайте следующую страницу, когда true.

get_open_hooks Без дополнительной платы за инструмент

Неразрешённые сюжетные зацепки — что готовить к следующей сессии.

Пример ввода

{
  "campaign_id": "a1b2c3d4-…"
}

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Кампания для чтения.

Пример вывода

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

Описания полей

ПолеТипОписание
hooksarrayТекущие открытые сюжетные зацепки.
hooks[].textstringОписание зацепки.
hooks[].session_refstringСессия, в которой была введена зацепка.
hooks[].session_datestring (YYYY-MM-DD)Дата этой сессии.

get_previously_on Без дополнительной платы за инструмент

Контекст «ранее в кампании», построенный из памяти, привязанной к владельцу.

Пример ввода

{
  "campaign_id": "a1b2c3d4-…"
}

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Кампания для чтения.

Пример вывода

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

Описания полей

ПолеТипОписание
sectionsarrayРазделы памяти кампании для резюме/контекста.
sections[].titlestringЗаголовок раздела.
sections[].bulletsstring[]Краткие пункты памяти.

get_next_session_prep_pack Без дополнительной платы за инструмент

Рекомендация по подготовке к следующей сессии только для мастера из кэша подготовки Recap Raven. Может сгенерироваться один раз, затем остаётся в кэше до приёма следующего пересказа. Возвращает credit_cost: 0.

Пример входных данных

{
  "campaign_id": "a1b2c3d4-…"
}

Описания полей

ПолеТипОписание
campaign_idstring (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_directionsarrayВероятные дальнейшие направления, ориентированные на мастера.
threads_to_watchstring[]Сюжетные линии, которые мастеру стоит держать в уме.
prep_suggestionsstring[]Конкретные подсказки по подготовке для мастера.
credit_costnumberВсегда 0 для этого инструмента MCP.
cache_policystringcached_until_next_recap_ingested.

get_chronicle Без дополнительной платы за инструмент

Карта сцен по сессиям — структурированная хроника кампании.

Пример входных данных

{
  "campaign_id": "a1b2c3d4-…"
}

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Кампания для чтения.

Пример выходных данных

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

Описания полей

ПолеТипОписание
sessionsarrayОдна запись на сессию.
sessions[].recap_idstring (uuid)Идентификатор пересказа/сессии.
sessions[].scenesstring[]Упорядоченные метки сцен для этой сессии.

get_entity Без дополнительной платы за инструмент

Реестр сущностей, видимых игрокам, построенный по записанным сессиям; приватные загруженные материалы лора исключены. Без имени возвращает список. С именем или псевдонимом возвращает соответствующую карточку, историю взаимодействий, ссылки на реплики транскрипта, связи или кандидатов при неоднозначности.

Пример входных данных

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

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Кампания для чтения.
namestring | 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"
      }
    ]
  }
}

Описания полей

ПолеТипОписание
entitiesarray (режим списка)Когда имя не указано: {canonical_name, kind, aliases, search_aliases} для каждой сущности.
entityobject | null (режим карточки)Когда имя указано: сопоставленная карточка сущности или null, если имя ни с чем не совпадает.
candidatesarrayВозможные карточки сущностей, когда псевдоним неоднозначен; пусто, когда сопоставление однозначно.
entity.idstring (uuid)Стабильный идентификатор сущности кампании.
entity.canonical_namestringКаноническое имя сущности.
entity.kindstringВид сущности.
values: pc | npc | creature | place | item | faction | deity | other
entity.aliasesstring[]Отображаемые псевдонимы.
entity.search_aliasesstring[]Псевдонимы только для поиска.
entity.interactionsarrayОбоснованные записи истории со ссылками на пересказ и реплики транскрипта.
entity.interactions[].recap_idstring (uuid)Сессия, содержащая взаимодействие.
entity.interactions[].turn_startinteger | nullПервая реплика транскрипта для ссылки на свидетельство.
entity.interactions[].turn_endinteger | nullПоследняя реплика транскрипта для ссылки на свидетельство.
entity.interactions[].identity_matchstringconfirmed или suggested; suggested-связи — это возможные совпадения по псевдониму, а не утверждения о канонической идентичности.
values: confirmed | suggested
entity.relationsarrayГраф связей (от старых к новым).
entity.relations[].predicatestringНапример, located_in, ally_of, owns.
entity.relations[].recap_idstring (uuid)Сессия, подтверждающая связь.
entity.relations[].visibilitystringВидимость ребра для мастера. Устаревшие данные до появления свидетелей могут содержать рёбра dm_only — не показывайте их игрокам.
values: player_known | dm_only
entity.relations[].is_currentbooleanАктуальное звено для предиката с состоянием.

get_mechanics_events Без дополнительной платы за инструмент

События механики, привязанные к репликам (атаки, заклинания, урон, отдых, состояния), для одной сессии — те же данные, что на вкладке механики.

Пример входных данных

{
  "recap_id": "…"
}

Описания полей

ПолеТипОписание
recap_idstring (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_idstring (uuid)Сессия, к которой относятся эти события.
mechanicsarrayСобытия механики, привязанные к репликам.
mechanics[].actionstringВид события.
values: attack | spell_cast | short_rest | long_rest | consumable_used | condition_applied | ability_used | form_changed
mechanics[].actorstringКто действовал.
mechanics[].evidence_turn_startintegerПервая реплика, подтверждающая событие.
mechanics[].evidence_turn_endintegerПоследняя реплика, подтверждающая событие.

get_lore_documents Без дополнительной платы за инструмент

Список документов лора для кампании.

Пример входных данных

{
  "campaign_id": "a1b2c3d4-…"
}

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Кампания для чтения.

Пример выходных данных

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

Описания полей

ПолеТипОписание
documentsarrayДокументы лора.
documents[].idstring (uuid)Идентификатор документа.
documents[].titlestringЗаголовок документа.

get_lore_document Без дополнительной платы за инструмент

Один документ лора с полным содержимым.

Пример входных данных

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

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Кампания для чтения.
doc_idstring (uuid)Документ лора для получения.

Пример выходных данных

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

Описания полей

ПолеТипОписание
document.idstring (uuid)Идентификатор документа.
document.titlestringЗаголовок документа.
document.bodystringПолное содержимое документа (markdown).

get_lexicon Без дополнительной платы за инструмент

Записи лексикона (канонические имена, псевдонимы, тип, уверенность).

Пример входных данных

{
  "campaign_id": "a1b2c3d4-…"
}

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Кампания для чтения.

Пример выходных данных

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

Описания полей

ПолеТипОписание
entriesarrayЗаписи лексикона.
entries[].canonicalstringКаноническое имя.
entries[].typestringВид сущности.
values: npc | place | item | creature | other
entries[].aliasesstring[]Альтернативные имена / псевдонимы.
entries[].confidencenumberУверенность извлечения, 0–1.
entries[].enabledbooleanАктивна ли эта запись.

get_transcript_window Без дополнительной платы за инструмент

Позиционный срез сохранённых реплик сессии (без поиска по содержимому — только индексы реплик от/до).

Пример входных данных

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

Описания полей

ПолеТипОписание
recap_idstring (uuid)Пересказ/сессия для чтения. Используйте list_sessions, чтобы узнать идентификаторы.
fromintegerНачальный индекс реплики (включительно, по умолчанию 0).
tointegerКонечный индекс реплики. Опустите для окна в 50 реплик от начального индекса.

Пример выходных данных

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

Описания полей

ПолеТипОписание
total_turnsintegerВсего реплик в сессии.
fromintegerВозвращённый начальный индекс.
tointegerВозвращённый конечный индекс.
turnsarrayРеплики в запрошенном окне.
turns[].indexintegerПозиционный индекс в сессии.
turns[].tstringОтносительная метка времени, например ~00:01.
turns[].speakerstringОтображаемое имя говорящего.
turns[].textstringПроизнесённый текст.

get_recap Без дополнительной платы за инструмент

Безопасный для игроков HTML-пересказ для готового пересказа. Тип артефакта задаётся сервером; входного параметра типа нет.

Пример входных данных

{
  "recap_id": "…"
}

Описания полей

ПолеТипОписание
recap_idstring (uuid)Пересказ/сессия, для которой нужно получить безопасный для игроков пересказ.

Пример выходных данных

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

Описания полей

ПолеТипОписание
recap.recap_idstring (uuid)Идентификатор пересказа/сессии.
recap.content_typestringВсегда player_recap_html.
values: player_recap_html
recap.htmlstringБезопасный для игроков HTML-пересказ.
recap.truncatedbooleanTrue, когда ограничение размера ответа MCP обрезало HTML.

search_transcript Без дополнительной платы за инструмент

Точный поиск по ключевым словам (полнотекстовый) по репликам транскрипта вашей кампании. Возвращает реплики, содержащие точную фразу, с их сессией, говорящим и меткой времени — без LLM, без эмбеддингов, без кредитов.

Пример входных данных

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

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Кампания для поиска.
querystringТочная фраза для сопоставления (полнотекстовый поиск по тексту транскрипта).
recap_idstring (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."
    }
  ]
}

Описания полей

ПолеТипОписание
querystringЭхо отправленного запроса.
matchesarrayРеплики транскрипта, содержащие точную фразу, лучшее совпадение первым.
matches[].recap_idstring (uuid)Пересказ/сессия, откуда пришло совпадение.
matches[].speakerstringГоворящий в совпавшей реплике.
matches[].tstringОтносительная метка времени, например ~01:04.
matches[].textstringСовпавший текст транскрипта.

search_facts Без дополнительной платы за инструмент

Полнотекстовый поиск по ключевым словам по сюжетным битам вашей кампании — плотным, пошаговым сводкам, на которых рассуждает чат-канал. Лучше всего подходит для точных терминов (имя, предмет, место). Возвращает текст бита с контекстом сцены/сессии и диапазоном реплик, чтобы агент мог найти момент и затем получить точное окно транскрипта. Без LLM, без эмбеддингов, без кредитов. Для поиска по смыслу на естественном языке используйте search_corpus.

Пример входных данных

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

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Кампания для поиска.
querystringКлючевые слова для сопоставления с текстом бита (полнотекстовый поиск).
recap_idstring (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
    }
  ]
}

Описания полей

ПолеТипОписание
matchesarrayСовпавшие биты, лучшее совпадение первым.
matches[].recap_idstring (uuid)Сессия, откуда пришёл бит.
matches[].session_numberinteger | nullНомер сессии по версии мастера, если задан.
matches[].session_titlestring | nullЗаголовок сессии, если задан.
matches[].scene_titlestring | nullЗаголовок сцены, к которой относится бит.
matches[].beat_indexintegerПозиция бита внутри его сцены.
matches[].turn_startintegerПервая реплика окна бита (передайте в get_transcript_window).
matches[].turn_endintegerПоследняя реплика окна бита.
matches[].textstringТекст бита (не более 1200 символов).
matches[].truncatedbooleanTrue, когда текст бита был обрезан.

Использует чат-кредиты

Три инструмента расходуют оплачиваемые чат-кредиты. Думайте в терминах «поисковик против ответа»: 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_idstring (uuid)Кампания для поиска.
querystringОписание того, что вы ищете, на естественном языке.
player_safeboolean (по умолчанию 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>"
}

Описания полей

ПолеТипОписание
matchesarrayРанжированные совпадения по памяти, лучшее совпадение первым.
matches[].object_idstring (uuid)Идентификатор объекта памяти.
matches[].typestringТип памяти (например, plot_event, npc_fact).
matches[].visibilitystringКто это знает. При поиске с player_safe это всегда только видимое игрокам.
matches[].recap_idstring (uuid) | nullСессия, из которой пришла память.
matches[].session_numberinteger | nullНомер сессии мастера, если задан.
matches[].session_titlestring | nullНазвание сессии, если задано.
matches[].turn_startinteger | nullПервый ход окна доказательств (передайте в get_transcript_window).
matches[].turn_endinteger | nullПоследний ход окна доказательств.
matches[].textstringСводка памяти (не более 1200 символов).
matches[].truncatedbooleanTrue, когда сводка была обрезана.
credit_costnumberЧат-кредиты, списанные за этот завершённый поиск.

ask_campaign_cited Использует чат-кредиты

Задайте своей кампании фактический вопрос, ориентированный на мастера, и получите ответ ИИ — тот же движок ответов по битам, что и во встроенном чате, с дословными цитатами из транскрипта и ссылками на ходы. Использует чат-кредиты мастера, та же стоимость, что и во встроенном чате. Ограничение частоты на API-ключ в дополнение к вашему балансу.

Пример входных данных

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

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Кампания, которой задаётся вопрос.
questionstringВаш вопрос.
clarificationobject | omittedНеобязательно: ответ на уточняющий вопрос, заданный движком (только для мастера).
clarification.questionstringУточняющий вопрос от движка.
clarification.answerstringВаш ответ на этот вопрос.
supersedesstring | 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_markdownstringОтвет со ссылками, с встроенными маркерами [n].
citationsarrayМетаданные ссылок, соответствующие каждому маркеру.
quotesarrayДословные цитаты из транскрипта, использованные как доказательства.
confidence_labelstringГрубая полоса уверенности.
значения: high | medium | low
credit_costnumberКредиты, списанные за этот ответ.
quotes[].turnintegerИндекс цитируемого хода.
quotes[].recap_idstring (uuid) | nullСессия, из которой пришла цитата.

ask_player_campaign_cited Использует чат-кредиты

Задайте фактический вопрос о кампании, ориентированный на игроков, и получите короткий безопасный для игроков ответ со ссылками на транскрипт. Контент только для мастера исключается серверным игровым каналом. Использует чат-кредиты игрока.

Пример входных данных

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

Описания полей

ПолеТипОписание
campaign_idstring (uuid)Кампания, которой задаётся вопрос.
questionstringВаш вопрос.

Пример выходных данных

{
  "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_markdownstringОтвет со ссылками, с встроенными маркерами [n].
citationsarrayМетаданные ссылок, соответствующие каждому маркеру.
quotesarrayДословные цитаты из транскрипта, использованные как доказательства.
confidence_labelstringГрубая полоса уверенности.
значения: high | medium | low
credit_costnumberКредиты, списанные за этот ответ.

Пример для игроков

Создаёте бота или оверлей для игроков? Используйте инструмент с цитированием для игроков, чтобы ответ приходил из игрового канала, чей отфильтрованный по видимости реестр никогда не включает контент только для мастера:

{
  "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, не нужно отправлять нам файлы и не нужно угадывать, кто говорил. Планы памяти поддерживают вашу редактируемую вики мира в актуальном состоянии по мере игры, готовую к вопросам о том, что произошло, кто что сказал, открытых зацепках и о том, что готовить дальше.