---
name: transcript1
description: Transcribe audio and video from file uploads or YouTube links with transcript1 through its MCP server or REST API. Use when the user asks for a transcript, subtitles (SRT/VTT), speaker labels, or the text of a video or recording.
---

# transcript1

transcript1 transcribes audio and video from file uploads or YouTube links into
text with timestamps. It uses YouTube captions when a video has them and
AI transcription for everything else. This skill explains how to work with a
user's transcript1 account through the MCP server or the REST API.

## Connect

Node.js code can use `@transcript1/sdk`; see the [SDK docs](https://transcript1.com/docs/sdk).

Agents with a shell can install the [CLI](https://transcript1.com/docs/cli),
set `TRANSCRIPT1_API_KEY` and run `transcript1 <link>` or `transcript1 <file>`
instead of setting up MCP. Add `--json` for one JSON line per input.

- MCP endpoint: `https://api.transcript1.com/mcp` (MCP Streamable HTTP)
- Auth: OAuth 2.1 with PKCE and dynamic client registration
  (discovery: `https://api.transcript1.com/.well-known/oauth-authorization-server`),
  or an API key (`t1_…`) created at
  `https://transcript1.com/dashboard/account/tokens` and sent as a Bearer token.
- REST base: `https://api.transcript1.com/v1`
- Docs: `https://transcript1.com/docs/mcp`

## Tools

- `transcribe` — transcribe a YouTube video by URL; waits for the result and
  returns the first page of the transcript.
- `get_transcription` — status or transcript of one transcription by id; long
  transcripts are paged.
- `list_transcriptions` — recent transcriptions, newest first, without
  transcripts.
- `create_upload` — reserve a chunked upload for a local audio or video file.
- `get_upload_status` — which chunks of an upload arrived, to resume it.
- `complete_upload` — verify the chunks and queue the transcription.
- `delete_transcription` — cancel a running transcription or delete a finished
  one and its transcript.
- `get_account` — minutes remaining, plan and renewal date.

## Guidance

- Call `transcribe` once, then use `get_transcription` with the returned id
  instead of retrying; a retry can start a second job.
- Use `source: stt` or `diarize: true` when the user wants AI transcription or
  speaker labels; the default `auto` takes YouTube captions when they exist.
- Page long transcripts with `from_seconds` (pass the returned
  `next_from_seconds`).
- Check `get_account` before large jobs: one credit is one audio minute,
  rounded up.
- Files go through `create_upload` and HTTP chunk uploads outside MCP, then
  `complete_upload`; the user can also upload on the dashboard page
  `https://transcript1.com/dashboard/upload`.
- `delete_transcription` is destructive: confirm with the user first.
- `transcript_source` tells YouTube captions from AI transcription.
