fetchworks-mcp
OfficialFetches YouTube transcripts for single videos, entire channels, and search results, with support for timestamped segments, plain text, SRT, and VTT formats, language preferences, auto-generated captions, translation, metadata, and chapter extraction.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fetchworks-mcpSummarize the last 5 videos from @3blue1brown"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fetchworks-mcp
An MCP server that gives AI agents YouTube transcripts — from single videos, whole channels, and YouTube search — with timestamped segments, plain text, SRT, and VTT.
The server is a thin client for the Fetchworks YouTube Transcript Scraper on Apify. The extraction runs on Apify's infrastructure; you bring your own Apify token. Pricing is $2 per 1,000 transcripts — only delivered transcripts are billed. Failed videos (no captions, blocked, unavailable) cost nothing.
Get a token by signing up at apify.com (free tier included), then copy it from console.apify.com/settings/integrations.
Tools
Tool | What it does |
| Transcripts for one or more video URLs / Shorts links / bare 11-char IDs |
| Transcripts for a channel's newest uploads ( |
| Transcripts for the top results of a YouTube search (default 5 videos) |
All tools accept languages (priority list), preferAutoGenerated, translateTo, outputFormats (segments/text/srt/vtt, default ["text"]), includeMetadata, and includeChapters. Every video comes back with an honest status (ok, no_captions, blocked, live_stream, age_restricted, unavailable, translation_unavailable, po_token_required, error) — never a silently empty transcript.
Related MCP server: ytmcp
Setup
Requires Node.js 18+ and the APIFY_TOKEN environment variable.
Claude Desktop
Add to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"youtube-transcripts": {
"command": "npx",
"args": ["-y", "fetchworks-mcp"],
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}Claude Code
claude mcp add youtube-transcripts --env APIFY_TOKEN=your-apify-token -- npx -y fetchworks-mcpCursor
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in your project):
{
"mcpServers": {
"youtube-transcripts": {
"command": "npx",
"args": ["-y", "fetchworks-mcp"],
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}Example prompts
"Get the transcript of https://www.youtube.com/watch?v=jNQXAC9IVRw and summarize it."
"What has @3blue1brown covered in their last 5 videos?"
"Search YouTube for 'context windows explained' and compare what the top 3 videos say."
Links
Actor page and pricing: https://apify.com/fetchworks/youtube-transcript-scraper
Apify API tokens: https://console.apify.com/settings/integrations
License
MIT
Available Tools
3 toolsget_channel_transcriptsGet channel transcriptsA
Get transcripts for a YouTube channel's most recent uploads (newest first). Accepts a channel URL or a bare @handle. Bounded by maxVideos (default 10 to keep responses fast).
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel URL (youtube.com/@handle, /channel/UC…, /c/…, /user/…) or bare @handle. | |
| languages | No | Language priority list (ISO codes, e.g. ["en", "de"]). First available caption track wins. Default ["en"]. | |
| maxVideos | No | Upper bound on videos taken from the channel, newest first. Default 10. | |
| translateTo | No | Target language code (e.g. "es") for YouTube caption auto-translation. Best-effort. | |
| outputFormats | No | Transcript representations to include. Default ["text"] for compact tool output. | |
| includeChapters | No | Include video chapters. Default false. | |
| includeMetadata | No | Include title, channel, duration, views, publish date. Default true. | |
| preferAutoGenerated | No | Prefer auto-generated (ASR) captions over manual ones. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It usefully discloses ordering ('newest first'), input forms (channel URL or bare @handle), and the maxVideos bound with a performance rationale. It does not disclose error behavior, what happens when no captions exist, or the shape of the returned data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. It front-loads the core purpose, then adds input flexibility and a practical bound. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, no output schema, and no annotations, the description leaves important context unspecified: what the returned transcript payload looks like, how outputFormats affects the response, and likely failure modes. It is adequate for basic selection but not fully complete for a tool with this much configuration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all parameters. The description adds only a rationale for the maxVideos default ('to keep responses fast'), which is minor context rather than new semantic meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Get transcripts') and the resource scope ('YouTube channel's most recent uploads, newest first'), so an agent can understand what the tool does. However, it does not explicitly contrast this with the sibling tools get_youtube_transcript or search_youtube_transcripts, leaving some differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this tool is for channel-level transcript retrieval of recent uploads, with a bounded number of videos. It does not explicitly state when not to use it or mention the sibling alternatives, but the intended usage is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_youtube_transcriptGet YouTube transcript(s)A
Get transcripts for one or more YouTube videos (URLs, Shorts/youtu.be links, or bare 11-character video IDs). Returns one item per video with an honest status (ok, no_captions, blocked, live_stream, age_restricted, unavailable, translation_unavailable, po_token_required, error) and the transcript as text/segments/SRT/VTT.
| Name | Required | Description | Default |
|---|---|---|---|
| videos | Yes | YouTube video URLs or bare 11-character video IDs. One transcript per video. | |
| languages | No | Language priority list (ISO codes, e.g. ["en", "de"]). First available caption track wins. Default ["en"]. | |
| translateTo | No | Target language code (e.g. "es") for YouTube caption auto-translation. Best-effort. | |
| outputFormats | No | Transcript representations to include. Default ["text"] for compact tool output. | |
| includeChapters | No | Include video chapters. Default false. | |
| includeMetadata | No | Include title, channel, duration, views, publish date. Default true. | |
| preferAutoGenerated | No | Prefer auto-generated (ASR) captions over manual ones. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses an honest per-video status list (including failure modes like no_captions, blocked, live_stream, age_restricted) and the transcript representations returned. It does not mention rate limits or batch behavior, but the failure-status disclosure is unusually transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and input forms, followed by output details. Every phrase earns its place: status enumeration, per-video behavior, and supported formats. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no annotations and no output schema, the description covers accepted inputs, per-video return behavior, possible failure statuses, and output formats. It does not describe the exact JSON shape or mention batch-size limits, and it misses an opportunity to route agents to sibling tools, but it remains sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a slight nuance by mentioning Shorts and youtu.be links, which enrich the videos parameter's meaning, but it does not elaborate beyond what the schema already documents for other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb (get) and resource (transcripts for one or more YouTube videos), and clarifies accepted input forms (URLs, Shorts/youtu.be links, bare 11-charater IDs). It also distinguishes itself from siblings like get_channel_transcripts and search_youtube_transcripts by being scoped to specific videos rather than channels or searchees.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when an agent has specific video URLs/IDs and wants their transcripts, but it does not explicitly state when to choose this tool over get_channel_transcripts or search_youtube_transcripts, nor does it provide exclusions. The context is clear but not directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_youtube_transcriptsSearch YouTube and get transcriptsC
Search YouTube and get transcripts for the top video results. Bounded by maxResults (default 5 to keep responses fast).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | YouTube search query. | |
| languages | No | Language priority list (ISO codes, e.g. ["en", "de"]). First available caption track wins. Default ["en"]. | |
| maxResults | No | Upper bound on videos taken from the search results. Default 5. | |
| translateTo | No | Target language code (e.g. "es") for YouTube caption auto-translation. Best-effort. | |
| outputFormats | No | Transcript representations to include. Default ["text"] for compact tool output. | |
| includeChapters | No | Include video chapters. Default false. | |
| includeMetadata | No | Include title, channel, duration, views, publish date. Default true. | |
| preferAutoGenerated | No | Prefer auto-generated (ASR) captions over manual ones. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, yet it only adds a speed rationale ('to keep responses fast') beyond what the schema already states. It fails to disclose that transcript availability varies by video, that auto-translation is best-effort, or that this is a network operation subject to latency, rate limits, and potentially missing captions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the core purpose front-loaded and no filler. The second sentence earns only partial keep: the default value is already in the schema, though 'to keep responses fast' adds a small performance rationale. Appropriately sized, with minor redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no annotations and no output schema, the description is under-specified. It does not describe the combined search-plus-transcript response shape, what happens for videos without captions, or how outputFormats map to concrete results — all of which an agent needs since there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies — the schema already documents all 8 parameters with defaults, units, and examples. The description repeats the maxResults default without adding any meaning beyond the schema, so it neither compensates for gaps nor adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') plus resource ('YouTube') and scope ('top video results'), making the core function clear. However, it does not explicitly differentiate from siblings get_youtube_transcript or get_channel_transcripts — the search-based discovery model is implied but never contrasted with single-video or channel-scoped alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to choose this tool over get_youtube_transcript (e.g., when you have a query but no video ID) or get_channel_transcripts (e.g., when you need an entire channel's catalog). The only usage hint is the maxResults speed note, which is operational rather than a routing decision between alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.1- First observed
get_channel_transcripts - First observed
get_youtube_transcript - First observed
search_youtube_transcripts
TDQS
Scored across 3 tools
Each tool targets a distinct entry point: explicit video IDs/URLs, a channel handle/URL, or a text search. Even though the resulting transcript output overlaps, the input mechanism is unambiguous, so an agent should not confuse the tools.
All tool names follow the same snake_case pattern with get_ or search_ prefixes and consistently use 'transcripts' as the object. The naming clearly indicates both the action and the data source.
Three tools is compact but well-scoped for the server's purpose: known video URLs, channel browsing, and search-based discovery each earn a place. No tool is redundant, and the count is appropriate for a focused YouTube transcript server.
The server covers the primary transcript workflows: direct video lookup, channel-level retrieval, and search. Missing playlist support and explicit language filtering are minor gaps, but agents can still accomplish the main tasks without dead ends.
Maintenance
Related MCP Connectors
YouTube transcripts, search, channel/playlist listings and upload tracking for AI agents.
YouTube transcripts, search, channels, playlists and bulk transcript jobs for AI agents. 14 tools.
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
YouTube data for AI agents: channels, videos, transcripts, comments, search. Video research.
Related MCP Servers
- FlicenseDqualityDmaintenanceEnables AI assistants to fetch and analyze transcripts from YouTube videos using video IDs or URLs, with support for multiple language preferences.1-
- AlicenseAqualityDmaintenanceEnables AI assistants to fetch YouTube video transcripts with precise timestamps, multi-language support, and time-range filtering.31MIT
- AlicenseAqualityDmaintenanceEnables AI tools to access YouTube content, including transcript extraction, video/channel info, and search.413 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to interact with YouTube videos by fetching transcripts, summarizing content, and answering questions based on video context.-