> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tiro.ooo/llms.txt
> Use this file to discover all available pages before exploring further.

# get_note_transcript

> 会議ノートの会話トランスクリプト全文を取得します

## 概要

<Warning>
  **最終手段。** トランスクリプトはトークンを大量に消費します（1 時間の会議で 30K トークンを超えることがあります）。まず [`search_notes`](./search-notes) をお試しください。通常 10 倍コンパクトで同等に有用な、整理されたドキュメント（ワンページャー、カスタム）を返します。このツールは、直接引用のために正確に書き起こされた言葉が必要な場合にのみ使用してください。
</Warning>

<Warning>
  **破壊的変更 (2026-05-06)。** レスポンスの形が話者帰属セグメントを中心に統一されました。`transcription`、`paragraphs[].text`、`hasDiarization`、`totalParagraphs` の各フィールドは**削除**されました。各段落は `{content, speaker}` を持つ `segments[]` 配列を公開するようになりました。`speaker` は diarization データが利用可能な場合は `{label, name}`、そうでない場合は `null` です。新しい形から古いフィールドを再構成する方法については、下記の [Migration](#migration) セクションをご覧ください。
</Warning>

`get_note_transcript` は、ノートの**トランスクリプト全文**を話者帰属セグメントの段落として、ノートのメタデータとともに返します。ノートに diarization データがあるかどうかにかかわらず形は一様です。各段落は `segments[]` 配列を持ち、各セグメントは `content` 文字列と `speaker` オブジェクト（または `null`）を持ちます。`content` と `speaker.name` はどちらも MCP レイヤーで HTML が除去されます。

**主なユースケース:**

* 会議で話された言葉を正確に引用する。
* **誰が何を言ったか**を把握する。セグメントごとの `speaker` フィールドは、このツールの主なユースケースです。
* 構造化された `paragraphs` 配列を使って、トランスクリプトを時間範囲で切り出す。
* ドキュメントでは必要な言い回しが捉えられていないときに、会話のコンテキストを分析する。

**主な特長:**

* 一様な形: diarization の有無にかかわらず、各段落は `segments[]` を含みます。
* 話者情報: diarization が存在する場合 `segment.speaker` は `{label, name}`、そうでない場合は `null`。
* MCP レイヤーで HTML 除去済み（`content` と `speaker.name` の両方がサニタイズされます）。

<Note>
  **無料・未決済のノートでは、トランスクリプトの一部がマスクされて返ることがあります。** ノートが無料利用の上限を超えていて、かつ有料プランでない場合、上限を超えた段落の `content` はマスクされた状態で返ります。文字数や構造はそのままですが、単語がプレースホルダー文字に置き換えられるため、実際の発話ではなく意味のないテキストとして表示されます。トランスクリプトが途中で切れているように見える場合は、ほとんどがバグではなくこのマスクです。有料プランを始めるとノートのロックが解除され、トランスクリプト全文が返ります。
</Note>

## パラメータ

| Parameter  | Type   | Required | Description |
| ---------- | ------ | -------- | ----------- |
| `noteGuid` | string | Yes      | ノートの一意な識別子  |

### noteGuid (required)

取得するノートの一意な識別子です。

**例:**

```json theme={"system"}
{
  "noteGuid": "abc-123-def"
}
```

**ノート GUID の取得方法:**

1. [`list_notes`](./list-notes)（軽量）を使って、フォルダ・日付・キーワードから候補を見つけます。
2. 結果の `noteGuid` を使用します。コンテキスト用にドキュメントの内容も必要な場合は、まず [`search_notes`](./search-notes) で取得してください。話された言葉そのものが必要なときにのみ、このツールにフォールバックします。

## レスポンス形式

### 成功レスポンス — Diarization 済みノート

ノートに diarization データがある場合、段落には 1 つ以上のセグメントが含まれ、各セグメントの `speaker` は `label`（エンジンが割り当て、ノート内で安定）と `name`（解決された人物名、話者が未マッピングの場合は `null`）を持つオブジェクトになります。

```json theme={"system"}
{
  "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 データがない場合、各段落は `speaker` が `null` の単一セグメントに集約されます。それ以外の形は同一なので、呼び出し元は分岐なしに `paragraphs[].segments[]` を反復処理できます。

```json theme={"system"}
{
  "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
        }
      ]
    }
  ]
}
```

**フィールドの説明:**

| Field                                   | Type           | Description                                               |
| --------------------------------------- | -------------- | --------------------------------------------------------- |
| `noteGuid`                              | string         | ノートの一意な識別子。                                               |
| `title`                                 | string         | ノートのタイトル。                                                 |
| `participants`                          | string\[]      | 参加者名（名前が利用できない場合はメールアドレス）。                                |
| `createdAt`                             | string         | ISO 8601 形式の作成タイムスタンプ。                                    |
| `recordingDurationSeconds`              | number         | 録音の長さ（秒）。                                                 |
| `paragraphs[]`                          | array          | 構造化された段落。各段落は、1 つ以上の話者帰属セグメントを含む時間で区切られたまとまりです。           |
| `paragraphs[].timeFrom`                 | string \| null | ISO 8601 形式の段落の開始時刻。                                      |
| `paragraphs[].timeTo`                   | string \| null | ISO 8601 形式の段落の終了時刻。                                      |
| `paragraphs[].segments[]`               | array          | 段落の話者帰属スライス。段落が返される場合は常に空ではありません（空のセグメントや空の段落は除外されます）。    |
| `paragraphs[].segments[].content`       | string         | セグメントの HTML 除去済みプレーンテキストコンテンツ。                            |
| `paragraphs[].segments[].speaker`       | object \| null | diarization データが利用可能な場合は `{label, name}`、そうでない場合は `null`。 |
| `paragraphs[].segments[].speaker.label` | string         | diarization エンジンのラベル（例: `SPEAKER_0`）。単一のノート内で安定しています。     |
| `paragraphs[].segments[].speaker.name`  | string \| null | ユーザーが話者をマッピングした場合の解決された人物名、そうでない場合は `null`。               |

## Migration

2026-05-06 より前のレスポンスは、`transcription`（結合された文字列）、`paragraphs[].text`（段落ごとのプレーンテキスト）、`hasDiarization`、`totalParagraphs` を持っていました。これら 4 つはすべてなくなりました。新しい形から再構成できます。

```js theme={"system"}
// 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 呼び出し:**

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "get_note_transcript",
    "arguments": {
      "noteGuid": "abc-123-def"
    }
  },
  "id": 1
}
```

**レスポンス:**

```json theme={"system"}
{
  "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: トランスクリプト全文（必要な場合のみ）**

```
Show me the exact conversation about budget allocation
```

`get_note_transcript` を使用 - 低速（\~5 秒、\~4,000 トークン）

## トークン使用量

**一般的な会議（1 時間）:** \~3,000-5,000 トークン

2026-05-06 より前の形と比べて、単一話者のノートは**約 30% 削減**されます。冗長な `transcription` 結合文字列が出力されなくなったためです。複数話者（diarization 済み）のノートはおおむね同等です。セグメントごとの `speaker` メタデータが古い `transcription` ペイロードを置き換えており、セグメントのコンテンツは古い `text` フィールドが持っていたものと同じデータです。

**比較（3 階層の探索）:**

| Tool                               | Token Usage                    | When to Use                       |
| ---------------------------------- | ------------------------------ | --------------------------------- |
| `list_notes`                       | ノートあたり \~50 トークン               | どのノートが存在するかを見つける（メタデータのみ）         |
| `search_notes`                     | ノートあたり \~1,500 トークン            | トピックの背後にある**コンテンツ**を読む（ドキュメントを返す） |
| **`get_note_transcript`**          | **1 時間あたり \~3,000-5,000 トークン** | **最終手段 — 引用のために話された言葉そのもの**       |
| `get_note(include: ['summary'])`   | \~200-800 トークン                 | 1 つのノートの素早い AI 要約                 |
| `get_note(include: ['documents'])` | \~300-2,000 トークン               | 特定の生成ドキュメント                       |

<Tip>
  **トークンの節約**

  まず [`search_notes`](./search-notes) をお試しください。そのドキュメント出力は生のトランスクリプトより通常 10 倍コンパクトで、「チームは何を決めたのか」という質問のほとんどに答えられます。言葉そのものが本当に必要なときにのみ `get_note_transcript` を使ってください。
</Tip>

## ベストプラクティス

<AccordionGroup>
  <Accordion title="Use Progressive Disclosure (3-tier)">
    必ずこの順序に従ってください。

    1. **list\_notes** — どのノートが存在するかを見つける（ノートあたり \~50 トークン）
    2. **search\_notes** — 一致したトピックのドキュメントを読む（ノートあたり \~1,500 トークン）
    3. **get\_note\_transcript** — 言葉そのものが必要な場合のみ（1 時間あたり \~4,000 トークン）

    「何を決めたのか」という質問のほとんどはステップ 2 で止まります。これにより、いきなりトランスクリプトに飛ぶ場合と比べて最大 90% のトークンを節約できます。
  </Accordion>

  <Accordion title="When to Use Transcripts">
    次の場合にトランスクリプト全文を使用してください。

    * 正確な引用や発言を見つける
    * 詳細な会話の流れを分析する
    * 完全なコンテキストを理解する
    * 特定の議論を参照する
    * **誰が何を言ったかを把握する** — `segments[].speaker` フィールドにより、これがこのツールの主なユースケースになります。

    次の場合にはトランスクリプトを使わないでください。

    * 素早い概要（代わりに `get_note(include: ['summary'])` を使用）
    * アクションアイテム（`get_note(include: ['documents'])` を使用）
    * 一般的な理解（`get_note(include: ['summary'])` を使用）
  </Accordion>

  <Accordion title="Handle Large Transcripts">
    非常に長い会議（2 時間以上）の場合:

    * 5,000-10,000 トークンを見込んでください
    * タイムアウト（60 秒）が発生することがあります
    * まず要約経由で特定のセクションを要求することを検討してください
    * トランスクリプト全文を読み込む前に、要約を使って関連部分を特定してください
  </Accordion>
</AccordionGroup>

## よくあるエラー

### ノート GUID がない

<Error>
  ```json theme={"system"}
  {
    "error": "noteGuid is required",
    "code": "MISSING_NOTE_GUID",
    "statusCode": 400
  }
  ```
</Error>

**解決方法:** `noteGuid` パラメータを指定してください。

### ノートが見つからない

<Error>
  ```json theme={"system"}
  {
    "error": "Note not found",
    "code": "NOTE_NOT_FOUND",
    "statusCode": 404
  }
  ```
</Error>

**考えられる原因:**

* ノートが存在しない
* ノートが削除された
* このノートへのアクセス権がない

**解決方法:** `search_notes` を使ってノート GUID を確認してください。

### リクエストのタイムアウト

<Error>
  ```json theme={"system"}
  {
    "error": "Request timeout",
    "code": "REQUEST_TIMEOUT",
    "statusCode": 504
  }
  ```
</Error>

**原因:**

* 非常に長い会議トランスクリプト（2 時間以上）
* サーバー負荷

**解決方法:**

1. 代わりに `get_note(include: ['summary'])` を使用してください
2. 少し待ってから再試行してください
3. 問題が解決しない場合はサポートにお問い合わせください

## パフォーマンス

**レスポンス時間:**

| Meeting Length | Tokens   | Response Time       |
| -------------- | -------- | ------------------- |
| 30 分           | \~1,500  | \~2 秒               |
| 1 時間           | \~3,000  | \~3 秒               |
| 2 時間           | \~6,000  | \~5 秒               |
| 3 時間以上         | \~9,000+ | \~8 秒（タイムアウトの可能性あり） |

<Note>
  **キャッシュの動作**

  トランスクリプトは 15 分間キャッシュされます。同じノートに対する以降のリクエストはより高速になります。
</Note>
