메인 콘텐츠로 건너뛰기

개요

최후의 수단. transcript는 토큰을 많이 써요(1시간짜리 회의는 30K 토큰을 넘을 수 있어요). 먼저 search_notes를 사용하세요. 보통 10배 더 압축적이면서 정보량은 동등한 정제된 문서(one-pager, custom)를 반환해요. 직접 인용을 위해 정확히 받아 적은 단어가 필요할 때만 이 도구를 사용하세요.
호환성 변경 (2026-05-06). 응답 형태가 화자 귀속 segment 중심으로 통합됐어요. transcription, paragraphs[].text, hasDiarization, totalParagraphs 필드는 제거됐어요. 이제 모든 단락은 {content, speaker}를 담은 segments[] 배열을 노출해요. diarization 데이터가 있으면 speaker{label, name}이고, 없으면 null이에요. 아래 Migration 섹션을 참고해 새 형태에서 옛 필드를 재구성하세요.
get_note_transcript는 노트의 전체 transcript를 화자 귀속 segment의 단락들로, 노트 메타데이터와 함께 반환해요. 노트에 diarization 데이터가 있든 없든 형태는 동일해요. 모든 단락은 segments[] 배열을 가지며, 각 segment에는 content 문자열과 speaker 객체(또는 null)가 있어요. contentspeaker.name은 둘 다 MCP 레이어에서 HTML이 제거돼요. 주요 사용 사례:
  • 회의에서 실제로 말한 단어를 그대로 인용.
  • 누가 무엇을 말했는지 파악. segment별 speaker 필드가 이 도구의 주요 사용 사례예요.
  • 구조화된 paragraphs 배열을 사용해 transcript를 시간 범위로 잘라내기.
  • 문서가 필요한 표현을 담지 못할 때 대화 맥락 분석.
핵심 기능:
  • 일관된 형태: diarization 가용 여부와 관계없이 모든 단락이 segments[]를 포함해요.
  • 화자 정보: segment.speaker는 diarization이 있으면 {label, name}, 없으면 null이에요.
  • MCP 레이어에서 HTML 제거(contentspeaker.name 모두 정제됨).

파라미터

ParameterTypeRequiredDescription
noteGuidstringYes고유 노트 식별자

noteGuid (필수)

가져올 노트의 고유 식별자예요. 예시:
{
  "noteGuid": "abc-123-def"
}
노트 GUID를 얻는 방법:
  1. list_notes(가벼움)를 사용해 폴더, 날짜, keyword로 후보를 찾으세요.
  2. 결과에서 noteGuid를 사용하세요. 맥락을 위한 문서 내용도 필요하면 먼저 search_notes로 가져오고, 그대로 받아 적은 발화가 필요할 때만 이 도구로 돌아오세요.

응답 형식

성공 응답 — diarization된 노트

노트에 diarization 데이터가 있으면 단락은 하나 이상의 segment를 포함하고, 각 segment의 speakerlabel(엔진이 할당하고 노트 내에서 안정적)과 name(해석된 사람 이름, 화자가 매핑되지 않으면 null)을 가진 객체예요:
{
  "noteGuid": "abc-123-def",
  "title": "Weekly Team Meeting",
  "participants": ["Alice Kim", "Bob Park"],
  "createdAt": "2024-01-15T10:30:00Z",
  "recordingDurationSeconds": 3625,
  "paragraphs": [
    {
      "timeFrom": "2024-01-15T10:30:05Z",
      "timeTo":   "2024-01-15T10:30:18Z",
      "segments": [
        {
          "content": "Let's start with the project update.",
          "speaker": { "label": "SPEAKER_0", "name": "Alice Kim" }
        },
        {
          "content": "Sure, I've completed the migration.",
          "speaker": { "label": "SPEAKER_1", "name": "Bob Park" }
        }
      ]
    }
  ]
}

성공 응답 — diarization되지 않은 노트

노트에 diarization 데이터가 없으면 각 단락은 speakernull인 단일 segment로 축약돼요. 그 외 형태는 동일하므로 호출자는 분기 없이 paragraphs[].segments[]를 순회할 수 있어요:
{
  "noteGuid": "abc-123-def",
  "title": "Solo Voice Memo",
  "participants": ["Alice Kim"],
  "createdAt": "2024-01-15T10:30:00Z",
  "recordingDurationSeconds": 120,
  "paragraphs": [
    {
      "timeFrom": "2024-01-15T10:30:05Z",
      "timeTo":   "2024-01-15T10:30:18Z",
      "segments": [
        {
          "content": "Reminder to send the contract by Friday.",
          "speaker": null
        }
      ]
    }
  ]
}
필드 설명:
FieldTypeDescription
noteGuidstring고유 노트 식별자.
titlestring노트 제목.
participantsstring[]참가자 이름(이름을 쓸 수 없으면 이메일).
createdAtstringISO 8601 생성 타임스탬프.
recordingDurationSecondsnumber녹음 길이(초).
paragraphs[]array구조화된 단락. 각 단락은 하나 이상의 화자 귀속 segment를 담은 시간 경계 청크예요.
paragraphs[].timeFromstring | null단락의 ISO 8601 시작 시각.
paragraphs[].timeTostring | null단락의 ISO 8601 종료 시각.
paragraphs[].segments[]array단락의 화자 귀속 조각들. 단락이 반환될 때는 항상 비어 있지 않아요(빈 segment와 빈 단락은 필터링됨).
paragraphs[].segments[].contentstringsegment의 HTML 제거된 일반 텍스트 내용.
paragraphs[].segments[].speakerobject | nulldiarization 데이터가 있으면 {label, name}, 없으면 null.
paragraphs[].segments[].speaker.labelstringdiarization 엔진 라벨(예: SPEAKER_0). 단일 노트 내에서 안정적.
paragraphs[].segments[].speaker.namestring | null사용자가 화자를 매핑한 경우 해석된 사람 이름, 아니면 null.

Migration

2026-05-06 이전 응답은 transcription(연결된 문자열), paragraphs[].text(단락별 일반 텍스트), hasDiarization, totalParagraphs를 담았어요. 이 네 가지 모두 사라졌어요. 새 형태에서 다음과 같이 재구성할 수 있어요:
// Reconstruct the old `paragraphs[].text` field.
const text = paragraph.segments.map(s => s.content).join(" ");

// Reconstruct the old `transcription` joined string.
const transcription = response.paragraphs
  .map(p => {
    const ts = p.timeFrom ? `[${p.timeFrom.slice(11, 19)}] ` : "";
    return ts + p.segments.map(s => s.content).join(" ");
  })
  .join("\n");

// Reconstruct the old `hasDiarization` flag.
const hasDiarization = response.paragraphs.some(p =>
  p.segments.some(s => s.speaker !== null)
);

// Reconstruct the old `totalParagraphs` count.
const totalParagraphs = response.paragraphs.length;
“누가 무엇을 말했는지”가 필요하면 segments[].speaker를 직접 읽으세요. 그게 이 도구의 새로운 주요 사용 사례예요.

사용 예시

예시 1: 기본 사용

AI 요청:
Show me the full transcript of meeting abc-123-def
MCP 호출:
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "get_note_transcript",
    "arguments": {
      "noteGuid": "abc-123-def"
    }
  },
  "id": 1
}
응답:
{
  "jsonrpc": "2.0",
  "result": {
    "noteGuid": "abc-123-def",
    "title": "Q4 Marketing Strategy Meeting",
    "participants": ["Sarah Kim", "John Park"],
    "createdAt": "2025-11-10T10:00:00Z",
    "recordingDurationSeconds": 3625,
    "paragraphs": [
      {
        "timeFrom": "2025-11-10T10:00:05Z",
        "timeTo":   "2025-11-10T10:00:18Z",
        "segments": [
          {
            "content": "Welcome to the Q4 marketing strategy meeting.",
            "speaker": { "label": "SPEAKER_0", "name": "Sarah Kim" }
          }
        ]
      },
      {
        "timeFrom": "2025-11-10T10:00:18Z",
        "timeTo":   "2025-11-10T10:00:42Z",
        "segments": [
          {
            "content": "Thanks. Let me present our website analytics.",
            "speaker": { "label": "SPEAKER_1", "name": "John Park" }
          }
        ]
      }
    ]
  },
  "id": 1
}

예시 2: 점진적 공개 패턴

1단계: 검색
Find recent marketing meetings
search_notes 사용 - 빠름(~1초, ~100 토큰) 2단계: 요약
What was discussed in meeting abc-123-def?
get_note(include: ['summary']) 사용 - 중간(~2초, ~500 토큰) 3단계: 전체 transcript (필요할 때만)
Show me the exact conversation about budget allocation
get_note_transcript 사용 - 느림(~5초, ~4,000 토큰)

토큰 사용량

일반적인 회의 (1시간): ~3,000-5,000 토큰 2026-05-06 이전 형태와 비교하면 단일 화자 노트는 중복되던 transcription 연결 문자열이 더 이상 방출되지 않아 약 30% 감소해요. 다중 화자(diarization된) 노트는 거의 비슷해요. segment별 speaker 메타데이터가 옛 transcription 페이로드를 대체하고, segment 내용은 옛 text 필드가 담던 것과 같은 데이터예요. 비교 (3단계 디스커버리):
ToolToken UsageWhen to Use
list_notes노트당 ~50 토큰어떤 노트가 있는지 찾기(메타데이터만)
search_notes노트당 ~1,500 토큰주제 이면의 내용 읽기(문서 반환)
get_note_transcript시간당 ~3,000-5,000 토큰최후의 수단 — 인용을 위한 정확한 발화
get_note(include: ['summary'])~200-800 토큰노트 하나의 빠른 AI 요약
get_note(include: ['documents'])~300-2,000 토큰특정 생성 문서
토큰 절감먼저 search_notes를 사용하세요. 문서 출력이 보통 원본 transcript보다 10배 더 압축적이고 “팀이 무엇을 결정했나” 같은 질문 대부분에 답해줘요. 정말로 그대로 받아 적은 표현이 필요할 때만 get_note_transcript를 사용하세요.

권장 사례

항상 이 순서를 따르세요:
  1. list_notes — 어떤 노트가 있는지 찾기(노트당 ~50 토큰)
  2. search_notes — 매칭된 주제의 문서 읽기(노트당 ~1,500 토큰)
  3. get_note_transcript — 정확한 표현이 필요할 때만(시간당 ~4,000 토큰)
“우리가 무엇을 결정했지?” 같은 질문 대부분은 2단계에서 멈춰요. 곧바로 transcript로 가는 것보다 최대 90%의 토큰을 절약할 수 있어요.
다음이 필요할 때 전체 transcript를 사용하세요:
  • 정확한 인용이나 발언 찾기
  • 상세한 대화 흐름 분석
  • 완전한 맥락 이해
  • 특정 논의 참조
  • 누가 무엇을 말했는지 파악. segments[].speaker 필드가 이를 이 도구의 주요 사용 사례로 만들어요.
다음에는 transcript를 사용하지 마세요:
  • 빠른 개요(대신 get_note(include: ['summary']))
  • action item(get_note(include: ['documents']))
  • 전반적 이해(get_note(include: ['summary']))
아주 긴 회의(2시간 이상)에서는:
  • 5,000~10,000 토큰을 예상하세요
  • timeout(60초)이 발생할 수 있어요
  • 먼저 요약으로 특정 섹션을 요청하는 것을 고려하세요
  • 전체 transcript를 불러오기 전에 요약으로 관련 부분을 파악하세요

자주 발생하는 오류

노트 GUID 누락

해결 방법: noteGuid 파라미터를 제공하세요.

노트를 찾을 수 없음

가능한 원인:
  • 노트가 존재하지 않음
  • 노트가 삭제됨
  • 이 노트에 접근할 권한이 없음
해결 방법: search_notes로 노트 GUID를 확인하세요.

요청 timeout

원인:
  • 아주 긴 회의 transcript(2시간 이상)
  • 서버 부하
해결 방법:
  1. 대신 get_note(include: ['summary'])를 사용하세요
  2. 잠시 후 재시도하세요
  3. 문제가 계속되면 지원팀에 문의하세요

성능

응답 시간:
Meeting LengthTokensResponse Time
30분~1,500~2초
1시간~3,000~3초
2시간~6,000~5초
3시간 이상~9,000+~8초(timeout 가능)
캐시 동작transcript는 15분간 캐시돼요. 같은 노트에 대한 후속 요청은 더 빨라요.