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 设置
- 在 ChatGPT 网站上,打开 Plugins,选择 +,然后选择 Add custom MCP server。输入“Recap Raven”和下方的服务器 URL。
- 启用 Raven 登录后,选择 OAuth 和已发布的客户端身份(CIMD)选项,并使用公共客户端身份验证。无需客户端密钥或 Raven API 密钥。Raven 不支持自动客户端注册。
- 创建插件,安装它,然后登录 Raven 并查看应用身份和请求的访问权限。只批准你发起的连接。
- 在对话中,使用 @ 选择 Recap Raven 并提问:“Use Recap Raven to list my campaigns。”
- 读取和写入工具取决于你的权限和确认。如果缺少设置,请检查工作区限制以及你的应用对应的官方 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 可用性
| 免费层级 | 不可用 |
| Premium | API 密钥、可用回顾、转录和手动 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"
}
]
}
字段说明
| 字段 | 类型 | 描述 |
|---|---|---|
| campaigns | array | 你的账户拥有的战役。 |
| campaigns[].campaign_id | string (uuid) | 将此 id 与战役范围的 MCP 工具一起使用。 |
| campaigns[].name | string | 战役名称。 |
| campaigns[].module | string | null | 可选的模块/系统标签。 |
list_sessions
无额外工具费用
发现工具:列出就绪会话及其 session_number 和标题,以便代理将“session 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 | GM 自己的从 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 | 0 到 100 的整数 Ask 使用量。 |
| 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
无额外工具费用
最丰富的 GM 情境感知数据块:分布、参与趋势 + 总体评分、每会话参与度、游戏支柱。
示例输入
{
"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
无额外工具费用
玩家可见的任务日志。GM 的添加和编辑会通过 Discord /questlog 与队伍共享。请勿包含 GM 秘密。
示例输入
{
"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
无额外工具费用
仅限 GM 的下一场游戏准备建议,来自 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 | 面向 GM 的可能后续方向。 |
| threads_to_watch | string[] | GM 可能需要留意的线索。 |
| prep_suggestions | string[] | 给 GM 的具体准备提示。 |
| credit_cost | number | 此 MCP 工具始终为 0。 |
| 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) | 回顾/场次 id。 |
| 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) | 稳定的战役实体 id。 |
| entity.canonical_name | string | 规范实体名称。 |
| entity.kind | string | 实体种类。 取值: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 链接是可能的别名匹配,并非规范身份断言。 取值:confirmed | suggested |
| entity.relations | array | 关系图(最旧 → 最新)。 |
| entity.relations[].predicate | string | 例如 located_in、ally_of、owns。 |
| entity.relations[].recap_id | string (uuid) | 为该关系提供证据的场次。 |
| entity.relations[].visibility | string | 边的 GM 可见性。旧版见证前数据可能带有 dm_only 边——不要向玩家展示。 取值:player_known | dm_only |
| entity.relations[].is_current | boolean | 有状态谓词的当前有效分支。 |
get_mechanics_events
无额外工具费用
单场次中以回合为锚点的机制事件(攻击、法术、伤害、休息、状态)——与机制标签页相同的数据。
示例输入
{
"recap_id": "…"
}
字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| recap_id | string (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_id | string (uuid) | 这些事件所属的场次。 |
| mechanics | array | 以回合为锚点的机制事件。 |
| mechanics[].action | string | 事件种类。 取值: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 | 实体种类。 取值:npc | place | item | creature | other |
| entries[].aliases | string[] | 备用名称/别名。 |
| entries[].confidence | number | 抽取置信度,0–1。 |
| entries[].enabled | boolean | 此条目是否启用。 |
get_transcript_window
无额外工具费用
某场次已存储回合的位置切片(无内容搜索——仅按 from/to 回合索引)。
示例输入
{
"recap_id": "…",
"from": 0,
"to": 20
}
字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| recap_id | string (uuid) | 要读取的回顾/场次。使用 list_sessions 发现 id。 |
| 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) | 回顾/场次 id。 |
| recap.content_type | string | 始终为 player_recap_html。 取值:player_recap_html |
| recap.html | string | 玩家安全回顾 HTML。 |
| recap.truncated | boolean | 当 MCP 响应上限截断了 HTML 时为 true。 |
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 发现回顾 id。 |
示例输出
{
"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 发现回顾 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
}
]
}
字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| matches | array | 匹配的节拍,最佳匹配在前。 |
| matches[].recap_id | string (uuid) | 节拍来源的场次。 |
| matches[].session_number | integer | null | GM 的场次编号(若已设置)。 |
| 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 用逐字转录引用和回合引文回答面向 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_id | string (uuid) | 要搜索的战役。 |
| query | string | 对你正在寻找的内容的自然语言描述。 |
| player_safe | boolean (默认 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>"
}
字段说明
| 字段 | 类型 | 描述 |
|---|---|---|
| matches | array | 按排名排列的记忆匹配,最佳匹配在前。 |
| matches[].object_id | string (uuid) | 记忆对象的 id。 |
| matches[].type | string | 记忆的类型(例如 plot_event、npc_fact)。 |
| matches[].visibility | string | 谁知道这条信息。在 player_safe 搜索中,它始终仅为玩家可见。 |
| matches[].recap_id | string (uuid) | null | 该记忆来自的会话。 |
| matches[].session_number | integer | null | GM 的会话编号(若已设置)。 |
| 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
使用聊天额度
向你的战役提出一个面向 GM 的事实性问题,获取 AI 答案——与站内聊天相同的 beats 答案引擎,附带逐字记录引用和回合引文。使用 GM 聊天额度,成本与站内聊天相同。除余额外,还按 API 密钥进行速率限制。
示例输入
{
"campaign_id": "a1b2c3d4-…",
"question": "Where did the hunter see the moose?"
}
字段说明
| 字段 | 类型 | 描述 |
|---|---|---|
| campaign_id | string (uuid) | 要提问的战役。 |
| question | string | 你的问题。 |
| clarification | object | 省略 | 可选:回答引擎提出的澄清问题(仅限 GM 通道)。 |
| clarification.question | string | 引擎提出的澄清问题。 |
| clarification.answer | string | 你对那个问题的回答。 |
| supersedes | string | 省略 | 要替换的先前答案的消息 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_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
使用聊天额度
提出一个面向玩家的战役事实性问题,获取简短的玩家安全答案及记录引文。仅限 GM 的内容会被服务器端玩家通道排除。使用玩家聊天额度。
示例输入
{
"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 | 此答案所扣除的额度。 |
玩家安全示例
正在构建面向玩家的机器人或叠加层?使用玩家引文工具,让答案来自玩家通道,其经过可见性过滤的账本绝不会包含仅限 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
邀请机器人,创建你的战役,每月获取免费回顾。
无需信用卡 · 仅在桌面同意的情况下录制 · 随时删除或导出你的数据
有问题或反馈?加入我们的 Discord 社区 →
为 Discord 语音而构建。我们为你捕获整个会话——无需事后登录,无需向我们发送文件,也无需猜测谁在说话。记忆计划会在你游玩时保持你可编辑的世界 wiki 为最新状态,随时准备回答关于发生了什么、谁说了什么、未解线索以及下一步该准备什么的问题。