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 크레딧을 사용합니다.

백그라운드 액세스를 승인하면 앱이 Raven에서 로그아웃된 상태에서도 최대 30일 동안 연결을 갱신할 수 있습니다. 만료되거나 취소된 후에는 다시 연결하고 승인하세요. 계정 설정에서 승인된 AI 연결을 검토하고 하나의 연결을 해제하거나 모든 AI 연결 해제를 사용하세요. 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 키당 요청 상한(모든 도구 호출 합산) — 단일 키가 엔드포인트를 범람하는 것을 방지합니다. 한도를 초과한 응답은 Retry-After와 함께 429를 반환합니다.
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 추가 도구 비용 없음

검색 도구: 다른 도구가 올바른 campaign_id를 사용할 수 있도록 MCP 키에서 사용 가능한 캠페인을 나열합니다.

예제 입력

{}

예제 출력

{
  "campaigns": [
    {
      "campaign_id": "a1b2c3d4-…",
      "name": "The White Moose",
      "module": "Dolmenwood"
    }
  ]
}

필드 설명

필드유형설명
campaignsarray계정이 소유한 캠페인.
campaigns[].campaign_idstring (uuid)캠페인 범위 MCP 도구와 함께 이 id를 사용하세요.
campaigns[].namestring캠페인 이름.
campaigns[].modulestring | null선택적 모듈/시스템 레이블.

list_sessions 추가 도구 비용 없음

검색 도구: session_number와 제목이 있는 준비된 세션을 나열하여 에이전트가 "session 12"를 올바른 recap_id에 매핑할 수 있게 합니다.

예제 입력

{
  "campaign_id": "a1b2c3d4-…"
}

필드 설명

필드유형설명
campaign_idstring (uuid) | 생략선택적 캠페인 필터.

예제 출력

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

필드 설명

필드유형설명
recapsarray계정에 표시되는 준비된 세션.
recaps[].recap_idstring (uuid)get_recap, get_transcript_window, get_mechanics_events와 함께 이 id를 사용하세요.
recaps[].campaign_idstring (uuid) | null세션을 소유한 캠페인.
recaps[].session_numberinteger | null설정된 경우 GM 자신의 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부터 시작. 페이지당 퀘스트 10개.

예제 출력

{
  "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_morebooleantrue이면 다음 페이지를 요청하세요.

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_directionsarrayGM을 위한 예상 다음 전개 방향.
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)읽을 세션. id를 찾으려면 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이벤트 종류.
값: 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)읽을 리캡/세션. id를 찾으려면 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)리캡/세션 id.
recap.content_typestring항상 player_recap_html.
값: player_recap_html
recap.htmlstring플레이어 안전 리캡 HTML.
recap.truncatedbooleanMCP 응답 한도로 HTML이 잘린 경우 true.

search_transcript 추가 도구 비용 없음

캠페인 대화록 턴에 대한 정확한 키워드(전문) 검색. 정확한 구문을 포함하는 턴을 세션, 화자, 타임스탬프와 함께 반환합니다 — LLM 없음, 임베딩 없음, 크레딧 없음.

입력 예시

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

필드 설명

필드타입설명
campaign_idstring (uuid)검색할 캠페인.
querystring일치시킬 정확한 구문 (대화록 텍스트에 대한 전문 검색).
recap_idstring (uuid) | omitted선택적 세션 범위. 리캡 id를 찾으려면 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선택적 세션 범위. 리캡 id를 찾으려면 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 | 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.

채팅 크레딧 사용

세 가지 도구가 사용량 기반 채팅 크레딧을 소비합니다. 찾기 vs 답변으로 생각하세요: 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를 사용하세요(비용이 더 들고, 구조화된 행이 아닌 서면 답변). 검색 결과에서 GM 전용 콘텐츠를 제외하려면 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일 때 검색은 가시성 필터링됩니다 — 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 | null설정된 경우 GM의 세션 번호.
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 답변을 받으세요 — 앱 내 채팅과 동일한 비트 답변 엔진으로, 축자 트랜스크립트 인용과 턴 출처 표시가 포함됩니다. 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 음성용으로 제작되었습니다. 세션 전체를 대신 캡처합니다 — 나중에 로그인할 필요도, 보낼 파일도, 누가 말했는지 추측할 필요도 없습니다. 메모리 플랜은 플레이 중에도 편집 가능한 세계 위키를 최신 상태로 유지하여, 무슨 일이 있었는지, 누가 무슨 말을 했는지, 열린 훅, 다음에 준비할 것에 대한 질문에 바로 답할 수 있습니다.