Transcript Dock
OfficialSupports transcribing Instagram Reels (beta) through AI transcription modes; caption-only mode is not available for Reels.
Enables listing up to 10 videos from a TikTok profile, optionally fetching detailed stats, dates, hashtags, and music, and transcribing TikTok videos using captions or AI transcription.
Enables searching YouTube, listing channel and playlist videos, and submitting YouTube video URLs for caption-based or AI transcription, then retrieving transcript text, SRT, VTT, or segments.
TranscriptDock MCP server
An MCP server that wraps the TranscriptDock public API, so Claude, Cursor and other agents can submit transcription jobs and read back transcripts without you leaving the chat.
It only calls the public /v1 API (API reference). The hosted server signs you in with OAuth; the local one needs a TranscriptDock API key (td_live_...).
Remote (no install)
The hosted server is https://www.transcriptdock.com/mcp (Streamable HTTP). Use that exact URL: the apex domain redirects, and clients drop the Authorization header on a cross origin redirect.
Claude (claude.ai, Desktop, mobile)
Open Customize, Connectors, choose Add custom connector, and paste https://www.transcriptdock.com/mcp. Choose Add, then Connect, sign in to TranscriptDock and allow access. No API key needed: the server publishes RFC 9728 metadata and signs people in through OAuth 2.1 (dynamic client registration, S256 PKCE). An OAuth connection can read and submit jobs and read transcripts, nothing else.
Claude Code and other clients
claude mcp add --transport http transcriptdock https://www.transcriptdock.com/mcpThen run /mcp and choose Authenticate. To use an API key instead, send it as a bearer header:
claude mcp add --transport http transcriptdock https://www.transcriptdock.com/mcp \
--header "Authorization: Bearer td_live_..."{ "mcpServers": { "transcriptdock": { "url": "https://www.transcriptdock.com/mcp", "headers": { "Authorization": "Bearer td_live_..." } } } }Ask for a video and the agent calls get_video_transcript(url): submit, wait, text back in one tool call.
Related MCP server: rippr
Install locally (npx)
Claude Desktop (stdio)
Claude Desktop users can add the remote connector above instead. For the local server, add this to your Claude Desktop config (Settings, Developer, Edit config):
{
"mcpServers": {
"transcriptdock": {
"command": "npx",
"args": ["-y", "@transcriptdock/mcp"],
"env": {
"TRANSCRIPTDOCK_API_KEY": "td_live_...",
"TRANSCRIPTDOCK_BASE_URL": "https://www.transcriptdock.com"
}
}
}
}Claude Code
claude mcp add --transport stdio transcriptdock --env TRANSCRIPTDOCK_API_KEY=td_live_... --env TRANSCRIPTDOCK_BASE_URL=https://www.transcriptdock.com -- npx -y @transcriptdock/mcpCursor
Add a server in Cursor Settings, MCP, using the same command and environment variables:
{
"mcpServers": {
"transcriptdock": {
"command": "npx",
"args": ["-y", "@transcriptdock/mcp"],
"env": {
"TRANSCRIPTDOCK_API_KEY": "td_live_...",
"TRANSCRIPTDOCK_BASE_URL": "https://www.transcriptdock.com"
}
}
}
}Sources and modes
mode defaults to captions_only: the existing captions of a YouTube or TikTok video, 1
credit each. AI transcription (auto/transcribe modes, 2 credits per started minute)
needs a paid plan, so the trial answers 402 PLAN_REQUIRED. Instagram Reels (beta) have no
caption path: send them with mode: "auto" or "transcribe"; captions_only answers 422
CAPABILITY_UNAVAILABLE. GET /v1/capabilities lists what your plan can do. For local
development use a loopback URL such as http://127.0.0.1:3000 for TRANSCRIPTDOCK_BASE_URL.
Configuration
Variable | Required | Purpose |
| yes | Your workspace API key. The server exits with a clear message if it is missing. |
| yes | Explicit HTTPS API origin, |
Tools
get_video_transcript: submit, wait and return the transcript text (or srt, vtt, segments) in one call. Example prompt: "What does this video say?"transcribe: submit a video or audio URL and get back the created job. Example prompt: "Transcribe this YouTube link and give me the SRT."get_job: look up a job's status, stage, error, and billing by ID. Example prompt: "Check on job 11111111-1111-4111-8111-111111111111."get_transcript: fetch a completed transcript as normalized JSON segments or as a text, SRT, or VTT export. Example prompt: "Get the VTT for transcript 22222222-2222-4222-8222-222222222222."list_jobs: list jobs for the workspace, newest first, with cursor pagination. Example prompt: "Show my last 10 transcription jobs."wait_for_job: poll a job every few seconds until it succeeds, fails, or is cancelled, then return it. Example prompt: "Transcribe this TikTok and wait until it is done."search_youtube: search YouTube by query with cursor paging. Example prompt: "Search YouTube for lofi study music and transcribe the top result"list_channel_videos: list videos from one channel with cursor paging. Example prompt: "List the latest videos from @veritasium"get_channel_latest_videos: get the latest videos from one channel newest first with no cursor input. Example prompt: "Find the latest five videos on @veritasium and transcribe the first one"search_channel_videos: search within one channel by query with cursor paging. Example prompt: "Search @veritasium for black holes and transcribe the best match"list_playlist_videos: list videos from one playlist with cursor paging. Example prompt: "List the videos in this playlist and transcribe the first one"list_tiktok_user_videos: list up to 10 videos from one TikTok profile with the profile stats. TikTok search and further pages are not available. Setinclude_detailsto fetch each video page for full stats, dates, hashtags, and music. Example prompt: "List the latest TikTok videos from @tiktokuser"get_video_discovery: get one video discovery by ID. Example prompt: "Check on my latest video discovery and show the video list"
Each listing tool creates one video discovery with a generated idempotency key then polls to completion with a bounded timeout. A timeout returns the last body with a flag and a hint to call get_video_discovery. A failed discovery returns an error result with the error object.
Every response is the raw API payload, pretty printed as JSON, except get_transcript with format: text, srt, or vtt, which returns the export file body directly. API errors come back as a readable tool error with the error code, message, and request ID; the API key is never included in output.
Development
npm install
npm run typecheck
npm run build
npm test
npm run devLicense
MIT
Available Tools
13 toolsget_channel_latest_videosBRead-onlyIdempotent
Get the latest videos from one YouTube channel. The channel videos tab is newest first.
Inputs: channel (required), limit, timeout_seconds.
get_jobBRead-onlyIdempotent
Look up a TranscriptDock job's status, stage, error, and billing by ID.
Inputs: job_id (required).
get_transcriptARead-onlyIdempotent
Fetch a completed transcript by ID, as normalized JSON segments or as a text/SRT/VTT export.
Inputs: transcript_id (required), format.
get_video_discoveryARead-onlyIdempotent
Get one video discovery by ID, including status, videos, cursor, and error.
Inputs: id (required).
get_video_transcriptAIdempotent
Get the transcript of a YouTube or TikTok video in one step: submits a job, waits for it (long polling), and returns the transcript text (or srt/vtt/segments). Use this for 'what does this video say' questions. Default mode captions_only (1 credit); pass mode auto to fall back to AI transcription when the video has no captions. Same video and options are served from cache without a new charge.
Inputs: url (required), mode, format, timeout_seconds.
list_channel_videosARead-onlyIdempotent
List videos from one YouTube channel and return the listing. Pass cursor unchanged for the next page.
Inputs: channel (required), limit, cursor, timeout_seconds.
list_jobsARead-onlyIdempotent
List jobs for the workspace, newest first, with cursor pagination.
Inputs: limit, cursor.
list_playlist_videosARead-onlyIdempotent
List videos from one YouTube playlist and return the listing. Pass cursor unchanged for the next page.
Inputs: playlist (required), limit, cursor, timeout_seconds.
list_tiktok_user_videosARead-onlyIdempotent
List TikTok videos for one user. TikTok search is not available. TikTok returns at most 10 videos from its embed page and no further pages. Set include_details to also fetch each video page for full stats, dates, hashtags, and music.
Inputs: user (required), limit, include_details, timeout_seconds.
search_channel_videosARead-onlyIdempotent
Search videos within one YouTube channel and return the listing. Pass cursor unchanged for the next page.
Inputs: query (required), channel (required), limit, cursor, +1 more.
search_youtubeARead-onlyIdempotent
Search YouTube videos by query and return the listing. Pass cursor unchanged for the next page.
Inputs: query (required), limit, cursor, timeout_seconds.
transcribeAIdempotent
Submit a YouTube or TikTok URL to TranscriptDock and return the created job. captions_only costs 1 credit; auto uses captions when the video has them (1 credit) and AI transcription otherwise; transcribe always runs AI transcription (2 credits per started minute, paid plans).
Inputs: url (required), idempotency_key (required), mode, language, +1 more.
wait_for_jobARead-onlyIdempotent
Wait for a job to reach a terminal status (succeeded, failed, or cancelled) using API long polling, then return it.
Inputs: job_id (required), timeout_seconds.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 13 tools
Most tools are cleanly separable by resource+action, but list_channel_videos and get_channel_latest_videos both list videos from a single channel with only an unspecified ordering distinction, making selection guesswork. The transcript trio (transcribe, get_video_transcript, get_transcript) is saved largely by explicit descriptions contrasting job-submission vs one-step vs by-ID retrieval.
Names overwhelmingly follow verb_noun (get_job, list_jobs, search_youtube, list_playlist_videos), which makes the surface predictable. Minor deviations: the bare verb 'transcribe' and the near-duplicate prefix pair get_transcript/get_video_transcript blur specificity.
13 tools is well within a healthy range and covers job, discovery, and listing concerns without bloat. Slightly overweight because get_channel_latest_videos overlaps list_channel_videos rather than adding a distinct capability.
Core lifecycle is covered: submit (transcribe), poll (get_job, wait_for_job), enumerate (list_jobs), and retrieve output (get_transcript, get_video_transcript), plus discovery/listing across YouTube, playlists, and TikTok. Gaps are minor but real — wait_for_job references a 'cancelled' state yet no cancel tool exists, and get_video_discovery has no listing or creation counterpart.
Maintenance
Related MCP Connectors
Transcript retrieval for YouTube, TikTok and Instagram: whole channels, playlists and searches.
Get transcripts from YouTube, TikTok, X, Instagram and more - even when captions are off.
Transcribe public videos & audio (YouTube, TikTok, IG) into accurate, timestamped text via API.
Turn YouTube, TikTok, Instagram, Facebook, X and article URLs into transcripts, comments and JSON.
Related MCP Servers
- AlicenseAqualityCmaintenanceTranscribes videos from 1000+ platforms (YouTube, TikTok, Vimeo, etc.) and local video files using OpenAI's Whisper model, with support for 90+ languages and multiple output formats.844 npm8MIT
- AlicenseAqualityDmaintenanceExtract YouTube transcripts for AI agents, RAG pipelines, and LLM workflows. Supports any YouTube URL. Returns clean text or timestamped segments. No API keys required.14MIT
- AlicenseNot gradedqualityDmaintenanceTranscribe any video URL to text with one command, supporting 1000+ sites via yt-dlp and multiple ASR providers.4MIT
- AlicenseNot gradedqualityCmaintenanceEnables extracting timestamped transcripts from YouTube and TikTok URLs, including title, channel, and duration, via a single tool.MIT