# list_available_transcripts

List all available transcripts for a YouTube video, including language codes and whether each transcript is auto-generated or manually created.

Use this tool to check what languages are available before fetching a specific transcript with [`get_transcript`](get-transcript.md).

## Parameters

| Name | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| `video_url` | `string` | Yes | — | YouTube URL or video ID |

Accepts the same URL formats as [`get_transcript`](get-transcript.md#supported-url-formats).

## Response Format

### Success Response

```json
{
  "video_id": "dQw4w9WgXcQ",
  "transcripts": [
    {
      "language": "English",
      "language_code": "en",
      "is_generated": false
    },
    {
      "language": "English (auto-generated)",
      "language_code": "en",
      "is_generated": true
    },
    {
      "language": "Spanish",
      "language_code": "es",
      "is_generated": false
    }
  ],
  "count": 3
}
```

| Field | Type | Description |
|-------|------|-------------|
| `video_id` | `string` | The 11-character YouTube video ID |
| `transcripts` | `array` | List of available transcripts |
| `transcripts[].language` | `string` | Human-readable language name |
| `transcripts[].language_code` | `string` | ISO language code |
| `transcripts[].is_generated` | `boolean` | `true` if auto-generated by YouTube |
| `count` | `integer` | Total number of available transcripts |

### Empty Result

If transcripts are disabled or the video is unavailable, the tool returns an empty list rather than an error:

```json
{
  "video_id": "dQw4w9WgXcQ",
  "transcripts": [],
  "count": 0
}
```

## Error Handling

| Code | Category | Description |
|------|----------|-------------|
| `INVALID_URL` | `client_error` | The `video_url` could not be parsed into a valid video ID |
| `INTERNAL_ERROR` | `server_error` | An unexpected error occurred on the server |

!!! note
    Unlike `get_transcript`, this tool does **not** raise `TRANSCRIPTS_DISABLED` or `VIDEO_UNAVAILABLE` errors. When transcripts are unavailable, it returns an empty list with `count: 0`.

## Examples

### List Transcripts for a Video

```
list_available_transcripts(video_url="https://www.youtube.com/watch?v=dQw4w9WgXcQ")
```

### Check Before Fetching

A common pattern is to list available transcripts first, then fetch the preferred one:

```
# Step 1: Check what's available
list_available_transcripts(video_url="dQw4w9WgXcQ")
# → Shows: en, es, fr available

# Step 2: Fetch the one you want
get_transcript(video_url="dQw4w9WgXcQ", language="es")
```

## Source

Defined in [`src/__main__.py`](https://github.com/appmilla/youtube-transcript-mcp/blob/main/src/__main__.py) using `TranscriptClient.list_transcripts()` from [`src/services/transcript_client.py`](https://github.com/appmilla/youtube-transcript-mcp/blob/main/src/services/transcript_client.py).
