Recap Raven

官方

Discord D&D 笔记记录器:可从任何 AI 搜索并引用你的 TTRPG 会话回顾、任务、NPC 和转录文本。需要 Recap Raven API 密钥。

你可以用 Recap Raven MCP 做什么?

  • 列出战役和会话 — 让 AI 列出你的战役,并在拉取详情前将会话编号映射到正确的回顾。
  • 搜索转录和节拍 — 对转录轮次或场景节拍执行精确关键词搜索,找出某个名字、物品或地点出现的位置。
  • 读取回顾和转录窗口 — 按索引范围获取玩家安全的回顾或某次会话已存储轮次的位置切片。
  • 查看准备和未闭合线索 — 拉取未解决的叙事线索、下次会话准备包,以及某场战役的前情提要。
  • 查找实体和设定 — 获取实体名册或单个实体卡片,以及设定文档和词典条目。
  • 检查参与度和任务 — 读取每位发言者的参与趋势、玩家可见的任务日志,以及你的 Ask 额度使用情况。

托管 MCP 服务器

npx add-mcp 'https://mcp.recapraven.com/mcp'

可安装到 Claude Code、Codex、Cursor 等客户端

文档

用于自定义 AI 工作流

你的战役工具,接入兼容的 AI 客户端。

通过 MCP 读取你的回顾和战役数据。现有的 API 密钥访问可与兼容客户端配合使用。请从支持公共客户端身份的 AI 应用登录;连接前请查看下方你的客户端要求。

什么是 MCP?

MCP 让兼容的 AI 应用直接调用 Recap Raven 工具。你的 AI 无需将回顾复制到另一个 AI 中,而是可以直接向 Recap Raven 请求会话、转录窗口、钩子、实体、引文和战役答案。

开始使用

Raven 的远程 MCP 端点是 https://mcp.recapraven.com/mcp 。选择一个客户端以获取设置说明。Premium 包含确定性读取;记忆搜索和 AI 答案需要 Searchable Memory。


MCP 端点

https://mcp.recapraven.com/mcp

ChatGPT 设置

  1. 在 ChatGPT 网站上,打开 Plugins,选择 +,然后选择 Add custom MCP server。输入“Recap Raven”和下方的服务器 URL。
  2. 启用 Raven 登录后,选择 OAuth 和已发布的客户端身份(CIMD)选项,并使用公共客户端身份验证。无需客户端密钥或 Raven API 密钥。Raven 不支持自动客户端注册。
  3. 创建插件,安装它,然后登录 Raven 并查看应用身份和请求的访问权限。只批准你发起的连接。
  4. 在对话中,使用 @ 选择 Recap Raven 并提问:“Use Recap Raven to list my campaigns。”
  5. 读取和写入工具取决于你的权限和确认。如果缺少设置,请检查工作区限制以及你的应用对应的官方 ChatGPT 设置指南。

ChatGPT 远程服务器 URL

https://mcp.recapraven.com/mcp

同意与连接帮助

Raven 登录连接会请求访问你的战役、转录和仅限 GM 的信息的权限。工具结果会发送到你选择的 AI 提供商,付费工具会消耗你现有的 Ask 额度。

如果你批准后台访问,应用可以在最长 30 天内刷新其连接,即使你已退出 Raven 登录。过期或撤销后,请重新连接并再次批准。在账户设置中,查看已批准的 AI 连接,并断开单个连接或使用 Disconnect all AI connections。API 密钥单独管理。

结果为空?请检查你是否登录了拥有你战役的 Raven 账户。套餐变更可能会移除工具访问权限;AI 答案还需要可用额度。如果同意过期或失败,请从客户端重新启动连接。

缺少菜单或不受支持的工作区无法通过更改你的 Raven 密钥来解决。请查看链接的供应商要求,或携带应用名称、版本和错误消息联系我们的 Discord 社区。请勿发送令牌或密钥。

在 Premium 和 Searchable Memory 中可用

Premium 包含 API 密钥以及访问你可用的回顾、转录和手动 World 数据。记忆工具、战役搜索和 AI 答案需要 Searchable Memory。语义搜索和 AI 答案会消耗你现有的 Ask 额度。

按套餐划分的 MCP 可用性

免费层级不可用
PremiumAPI 密钥、可用回顾、转录和手动 World 数据。不包含记忆工具。
含记忆的套餐确定性工具无需额外费用;search_corpus 每次搜索使用低聊天额度,带引用的 ask 工具会消耗 Ask 额度。
API 密钥从 API Keys 创建一个个人 API 密钥。可随时撤销;当账户回到 Free 时,MCP 访问结束。

公平使用与速率限制

MCP 服务器是一个共享的、按量计费的接口。为了保持其可持续性(并阻止失控的代理循环在几分钟内耗尽整个许可证),每个 API 密钥除了你的 Ask 额度外还受到速率限制。

MCP 速率限制

服务器公平使用MCP 服务器本身对每个 API 密钥的请求上限(所有工具调用合计)——防止单个密钥淹没端点。超过限制的响应会返回 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 配额——你的代理消耗与应用中相同的按许可证聊天额度。

无需额外费用即可包含

确定性读取工具——会话、实体和账本、钩子、机制、参与度、转录和节拍搜索、回顾、传说和词典。它们返回存储的战役数据,不进行 AI 推理,因此可用工具不消耗额度。记忆工具仍需要 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 和标题,以便代理将“session 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 | nullGM 自己的从 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_usedinteger0 到 100 的整数 Ask 使用量。
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 无额外工具费用

最丰富的 GM 情境感知数据块:分布、参与趋势 + 总体评分、每会话参与度、游戏支柱。

示例输入

{
  "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 无额外工具费用

玩家可见的任务日志。GM 的添加和编辑会通过 Discord /questlog 与队伍共享。请勿包含 GM 秘密。

示例输入

{
  "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 无额外工具费用

仅限 GM 的下一场游戏准备建议,来自 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面向 GM 的可能后续方向。
threads_to_watchstring[]GM 可能需要留意的线索。
prep_suggestionsstring[]给 GM 的具体准备提示。
credit_costnumber此 MCP 工具始终为 0。
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)回顾/场次 id。
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)稳定的战役实体 id。
entity.canonical_namestring规范实体名称。
entity.kindstring实体种类。
取值: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 链接是可能的别名匹配,并非规范身份断言。
取值:confirmed | suggested
entity.relationsarray关系图(最旧 → 最新)。
entity.relations[].predicatestring例如 located_in、ally_of、owns。
entity.relations[].recap_idstring (uuid)为该关系提供证据的场次。
entity.relations[].visibilitystring边的 GM 可见性。旧版见证前数据可能带有 dm_only 边——不要向玩家展示。
取值:player_known | dm_only
entity.relations[].is_currentboolean有状态谓词的当前有效分支。

get_mechanics_events 无额外工具费用

单场次中以回合为锚点的机制事件(攻击、法术、伤害、休息、状态)——与机制标签页相同的数据。

示例输入

{
  "recap_id": "…"
}

字段说明

字段类型说明
recap_idstring (uuid)要读取的场次。使用 list_sessions 发现 id。

示例输出

{
  "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事件种类。
取值: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实体种类。
取值:npc | place | item | creature | other
entries[].aliasesstring[]备用名称/别名。
entries[].confidencenumber抽取置信度,0–1。
entries[].enabledboolean此条目是否启用。

get_transcript_window 无额外工具费用

某场次已存储回合的位置切片(无内容搜索——仅按 from/to 回合索引)。

示例输入

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

字段说明

字段类型说明
recap_idstring (uuid)要读取的回顾/场次。使用 list_sessions 发现 id。
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)回顾/场次 id。
recap.content_typestring始终为 player_recap_html。
取值:player_recap_html
recap.htmlstring玩家安全回顾 HTML。
recap.truncatedboolean当 MCP 响应上限截断了 HTML 时为 true。

search_transcript 无额外工具费用

对你的战役转录回合进行精确关键词(全文)搜索。返回包含精确短语的回合,并附带其场次、说话者和时间戳——无 LLM、无嵌入、无积分消耗。

示例输入

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

字段说明

字段类型说明
campaign_idstring (uuid)要搜索的战役。
querystring要匹配的精确短语(针对转录文本的全文搜索)。
recap_idstring (uuid) | omitted可选的场次范围。使用 list_sessions 发现回顾 id。

示例输出

{
  "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 发现回顾 id。

示例输出

{
  "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 | nullGM 的场次编号(若已设置)。
matches[].session_titlestring | null场次标题(若已设置)。
matches[].scene_titlestring | null节拍所属场景的标题。
matches[].beat_indexinteger节拍在其场景中的位置。
matches[].turn_startinteger节拍窗口的第一个回合(可传入 get_transcript_window)。
matches[].turn_endinteger节拍窗口的最后一个回合。
matches[].textstring节拍文本(上限 1200 字符)。
matches[].truncatedboolean节拍文本被截断时为 true。

使用聊天积分

有三个工具会消耗计量的聊天积分。可以理解为查找器与答案:search_corpus(低聊天积分)将最强匹配作为结构化证据交给你自己的模型去推理——它是快速查找器,而非详尽索引;ask_campaign_cited 用逐字转录引用和回合引文回答面向 GM 的问题;ask_player_campaign_cited 通过玩家通道给出更短的面向玩家版本。除余额外,所有工具均按 API 密钥限流。

search_corpus 使用低聊天积分 search_corpus 即使在你不知道确切措辞的情况下,也能找到相关的战役时刻。它使用语义搜索和重排序来返回最有力的证据匹配,包括摘要、会话上下文和回合范围。它是一个查找器,而非穷尽式索引:只返回最匹配的结果,因此请将空结果或单薄结果视为“没有浮现出强有力的内容”,而不是证明不存在任何内容。利用这些匹配来发现表格实际使用的真实术语或名称,然后用 search_facts / search_transcript 运行一次穷尽式的自由关键词搜索,或者直接将回合范围交给 get_transcript_window 以获取逐字片段。若要对某个问题获得确定、经过验证的答案——逐字引用和引文——请改用 ask_campaign_cited(价格更高,返回书面回复而非结构化行)。设置 player_safe: true 可将仅限 GM 的内容从搜索结果中排除。每次搜索消耗较低的聊天额度,任何已完成的搜索都会计费,即使没有匹配结果。

示例输入

{
  "campaign_id": "a1b2c3d4-…",
  "query": "when did the party first distrust the mayor?",
  "player_safe": false
}

字段说明

字段类型描述
campaign_idstring (uuid)要搜索的战役。
querystring对你正在寻找的内容的自然语言描述。
player_safeboolean (默认 false)为 true 时,检索会进行可见性过滤——仅限 GM、推断和推测类记忆以及 GM 录入的设定将被排除。用于玩家会看到的任何内容。

示例输出

{
  "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)记忆对象的 id。
matches[].typestring记忆的类型(例如 plot_event、npc_fact)。
matches[].visibilitystring谁知道这条信息。在 player_safe 搜索中,它始终仅为玩家可见。
matches[].recap_idstring (uuid) | null该记忆来自的会话。
matches[].session_numberinteger | nullGM 的会话编号(若已设置)。
matches[].session_titlestring | null会话标题(若已设置)。
matches[].turn_startinteger | null证据窗口的第一个回合(可传入 get_transcript_window)。
matches[].turn_endinteger | null证据窗口的最后一个回合。
matches[].textstring记忆摘要(上限 1200 字符)。
matches[].truncatedboolean当摘要被截断时为 true。
credit_costnumber本次已完成搜索所扣除的聊天额度。

ask_campaign_cited 使用聊天额度

向你的战役提出一个面向 GM 的事实性问题,获取 AI 答案——与站内聊天相同的 beats 答案引擎,附带逐字记录引用和回合引文。使用 GM 聊天额度,成本与站内聊天相同。除余额外,还按 API 密钥进行速率限制。

示例输入

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

字段说明

字段类型描述
campaign_idstring (uuid)要提问的战役。
questionstring你的问题。
clarificationobject | 省略可选:回答引擎提出的澄清问题(仅限 GM 通道)。
clarification.questionstring引擎提出的澄清问题。
clarification.answerstring你对那个问题的回答。
supersedesstring | 省略要替换的先前答案的消息 id(仅限 GM 通道)。

示例输出

{
  "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 使用聊天额度

提出一个面向玩家的战役事实性问题,获取简短的玩家安全答案及记录引文。仅限 GM 的内容会被服务器端玩家通道排除。使用玩家聊天额度。

示例输入

{
  "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此答案所扣除的额度。

玩家安全示例

正在构建面向玩家的机器人或叠加层?使用玩家引文工具,让答案来自玩家通道,其经过可见性过滤的账本绝不会包含仅限 GM 的内容:

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

你的数据去向

当你连接 MCP 客户端并使用这些工具时,你的战役内容会发送到你选择的 AI 客户端——例如 ChatGPT、Claude 或 Gemini。该提供商的数据使用和训练条款适用于你发送给它的内容,而非我们的条款。

Recap Raven 的不训练保证涵盖我们自己的流水线以及我们披露的模型提供商。它无法涵盖你连接的客户端:接入一个客户端即意味着你为你的战役数据选择了一个新的处理者。请在连接前查看该客户端的条款,并对玩家会看到的任何内容使用 ask_player_campaign_cited 或玩家安全搜索过滤器(并避免仅限 GM 的读取,如设定和编年史)。

有问题或反馈?了解 Recap Raven 如何运作或在下方邀请机器人。

在下次团务中运行 Recap Raven

邀请机器人,创建你的战役,每月获取免费回顾。

在下次团务中运行 Recap Raven

无需信用卡 · 仅在桌面同意的情况下录制 · 随时删除或导出你的数据

有问题或反馈?加入我们的 Discord 社区 →

为 Discord 语音而构建。我们为你捕获整个会话——无需事后登录,无需向我们发送文件,也无需猜测谁在说话。记忆计划会在你游玩时保持你可编辑的世界 wiki 为最新状态,随时准备回答关于发生了什么、谁说了什么、未解线索以及下一步该准备什么的问题。