tubescout
Provides tools for searching YouTube videos with filters, retrieving video metadata and engagement metrics, fetching video transcripts, batch transcript retrieval, channel video analysis, and search suggestion-based keyword research.
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., "@tubescoutFind the most-viewed videos about n8n this month and summarize key complaints."
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.
TubeScout ðŸ”
Turn YouTube into a research engine for your AI agent. An MCP server (no API key) plus a skill pack that make Claude Code, Codex, and OpenCode search YouTube like a database, read transcripts at scale, and mine videos for evidence — claims, numbers, demand signals — instead of vibes.
Idea-engine tools scan Reddit and forums. YouTube is where founders show receipts — revenue dashboards, playbooks, real numbers on camera — and nothing mines it. TubeScout does.
Quickstart (60 seconds)
Claude Code
claude mcp add --scope user tubescout -- npx -y tubescoutCodex
codex mcp add tubescout -- npx -y tubescoutOpenCode — add to ~/.config/opencode/opencode.json under "mcp":
"tubescout": { "type": "local", "command": ["npx", "-y", "tubescout"], "enabled": true }That's it — no API key, no config. Then ask your agent things like:
"Find the 5 most-viewed videos about n8n from the last month and summarize what people are struggling with."
Easiest all-in-one (Claude Code): install as a plugin — MCP server + all 6 skills in two commands:
/plugin marketplace add not0lucky/tubescout
/plugin install tubescout@tubescoutOr install the skill pack manually (works for Claude Code, Codex, and OpenCode):
git clone https://github.com/not0lucky/tubescout && cd tubescout
./scripts/install-skills.sh # installs into ~/.claude/skills, ~/.codex/skills, ~/.config/opencode/skillsRelated MCP server: youtube-mcp
Tools
Tool | What it does |
| Search with filters (upload window, duration, sort by views/date) |
| Full metadata + engagement ( |
| Plain-text transcript via a resilient 3-strategy fallback chain |
| Batch transcripts (up to 10 videos), per-video error tolerant |
| Channel positioning + recent uploads with view counts |
| YouTube autocomplete = real search demand for keyword research |
Skills (the research methods)
Skill | Use it to |
| Skeptic's analysis of videos: extract every claim and number, stress-test for incentives, survivorship bias, verifiability |
| Mine a niche for product ideas backed by demand signals + pains real builders describe on camera |
| Go/no-go verdict: demand, saturation, what competitors' numbers actually show |
| Read a channel's strategy: cadence, outliers, what performs vs what they publish |
| Turn a tutorial into executable steps — exact commands, settings, and the gotchas said in passing — adapted to your stack |
| Find demand-vs-supply gaps: heavily searched topics served by weak, old, or misfit videos — for content plans or product angles |
All skills are context-aware: they read the conversation for what you're building, your stack, and videos already analyzed, and tailor verdicts to your actual leverage instead of giving generic advice.
See a real /yt-breakdown run on three "how I make $X/month" videos — including what survived the skeptic pass and what didn't.
How it works (honestly)
There's no magic here, and that's the point:
youtubei.js talks to YouTube's internal InnerTube API — the same one the site uses. No key, no quota.
Transcripts are YouTube's own captions, fetched through a fallback chain: the ANDROID-client timedtext track → the InnerTube transcript endpoint (known to 400 intermittently — retried with backoff) → local
yt-dlpif you have it. Each response tells you whichsourceserved it.All analysis happens in your agent. The server ships data; the skills ship method.
Limitations
Run it locally. YouTube aggressively rate-limits datacenter IPs — this is a local stdio server by design, not a hosted service.
YouTube changes internals without notice; when it breaks, update (
npxalways pulls latest) and file an issue with the failing video ID.Videos with captions disabled can't be transcribed (rare; the error says so explicitly).
Caption scraping lives in YouTube ToS gray area — fine for local research tooling, don't build a hosted paid product on it.
Development
npm install && npm run build
npm test # unit tests (offline)
npm run test:live # live smoke tests against real videos — run before publishing
npm run inspect # MCP Inspector against the built serverMIT — see LICENSE.
Built by Anir — I automate things. More at agramprojects.com.
Available Tools
6 toolsget_channel_videosScan a channelA
Channel metadata (name, subscribers, description) plus its recent uploads with views — enough to read a channel's strategy, cadence, and what performs.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel ID (UC…), @handle, or channel URL | |
| maxVideos | No | How many recent videos to return (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries behavioral disclosure. It conveys a read-style operation through words like 'metadata' and 'read a channel's strategy', and it lists the returned content. It does not address ordering, pagination, error behavior, or whether missing channels are handled gracefully, but for a read-only channel-scan tool the gaps are moderate.
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 a single, front-loaded sentence that packs the output contents and the intended analytic value without filler. Every part 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?
With no output schema, the description does the work of explaining return values, and it names the major components: channel metadata and recent uploads with views. It omits precise object shape and ordering, but the schema covers maxVideos limits and the tool's purpose is complete enough for an agent to select and invoke it correctly.
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?
The input schema already covers both parameters thoroughly: 'channel' accepts ID/@handle/URL and 'maxVideos' has a range and default. The description adds only the general concept of 'recent uploads', so it does not materially enrich the parameter semantics beyond the schema.
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 resource (a channel) and the returned data: channel metadata (name, subscribers, description) plus recent uploads with views. It is immediately distinguishable from sibling tools like get_video, search_videos, or transcript tools because it is channel-scoped and returns channel-level analytics.
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 a use case: reading a channel's strategy, cadence, and performance. However, it does not explicitly state when to use this tool over siblings, nor does it mention exclusions or when another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_suggestionsGet YouTube search suggestionsA
YouTube's autocomplete for a seed term — a direct read on real search demand. Use for keyword research: seed a niche term, get what people actually type. Chain suggestions of suggestions to map a topic space.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Seed term, e.g. 'stamp identifier' or 'n8n' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It clearly states this is a 'direct read' on live YouTube search demand, implying no side effects, and describes the iterative chaining behavior. It does not cover rate limits or error cases, but for a simple read-only autocomplete tool, the core behavior is 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?
Three short sentences each carry distinct value: definition, primary use case, and an advanced chaining pattern. The most identifying trait, 'YouTube's autocomplete', is front-loaded. There is 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 one-parameter tool with no output schema, the description conveys enough for an agent to invoke it correctly: the input is a seed term and the result is what users actually type. It could be more explicit about the return format or any authentication/network expectations, but those are minor gaps.
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 coverage is 100%, so the parameter is already documented with a description and examples. The tool description adds keyword-research context but no new syntax, formatting, or constraints beyond the schema. This matches the baseline for high schema coverage.
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 identifies a specific verb and resource: 'YouTube's autocomplete for a seed term'. This clearly differentiates it from siblings like search_videos or get_transcript, since autocomplete suggestions are a distinct data product. The phrasing 'direct read on real search demand' reinforces the exact purpose.
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?
It explicitly tells the agent when to use the tool: for keyword research, seed a niche term, and chain suggestions to map a topic space. It does not mention when not to use it or name specific sibling alternatives, but the given context is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcriptGet video transcriptA
Fetch a video's transcript as clean plain text. Resilient: tries InnerTube, then the timedtext caption track, then local yt-dlp if installed. Long transcripts are chunked — check totalChars and call again with offsetChars to continue.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | Video ID or any YouTube URL | |
| language | No | Preferred caption language code (default 'en') | |
| maxChars | No | Chunk size (default 60000) | |
| offsetChars | No | Character offset to resume a chunked transcript |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explicitly reveals the resilience strategy ('tries InnerTube, then the timedtext caption track, then local yt-dlp') and the chunking behavior ('check totalChars and call again with offsetChars'). It does not cover failure modes or exact output structure, but the most important behavioral traits are disclosed.
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?
Three sentences, each earning its place: core purpose, resilience strategy, and pagination behavior. The most important information is front-loaded, and there is no filler or repetition of schema content.
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?
Despite having no output schema, the description sufficiently outlines the chunking contract and fallback approach, allowing an agent to invoke the tool and continue pagination. It falls short of fully describing the return payload shape and does not reference sibling 'get_transcripts', but overall the essential calling context is present.
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 every parameter already has a description. The tool description adds a little value by connecting offsetChars to the chunking workflow and introducing totalChars as a response field, but it does not substantially enrich parameter understanding beyond what the schema provides.
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 opens with 'Fetch a video's transcript as clean plain text', giving a specific verb, resource, and output format. It clearly identifies the tool's core function, but it does not explicitly distinguish itself from the sibling 'get_transcripts', leaving some ambiguity about whether that sibling should be used for different transcript-related needs.
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?
There is no guidance on when to use this tool versus alternatives. The description explains the fallback chain for fetching but does not mention sibling tools like 'get_transcripts' or state conditions under which this tool is preferred. The agent is left to infer usage from the tool name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcriptsGet transcripts for multiple videosA
Batch transcript fetch (max 10 videos, 3 at a time). Per-video failures don't kill the batch — failed entries carry an error field. Each transcript is truncated to fit; use get_transcript with offsetChars for full text of long ones.
| Name | Required | Description | Default |
|---|---|---|---|
| videos | Yes | Video IDs or URLs | |
| language | No | Preferred caption language code (default 'en') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so excellently. It discloses the batch size, concurrency limit, partial-failure behavior (failed entries carry an error field), and truncation behavior. This gives the agent a reliable model of what the tool will do.
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 two tight sentences with no filler. The core batch behavior is front-loaded, and each clause adds useful operational or fallback information. It is exemplary in economy.
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 no output schema, the description adequately tells the agent what to expect: success, per-item errors, and truncation. It also points to get_transcript for the full-text use case, covering the main follow-up path. Nothing essential for correct invocation is missing.
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 coverage is 100%, so the baseline is 3. The description does not add meaningful new meaning to the 'videos' or 'language' parameters beyond what the schema already provides; it merely repeats the max-item constraint. It earns the baseline but does not exceed it.
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 states the specific action ('Batch transcript fetch') and resource ('transcripts for multiple videos'), and explicitly contrasts with the singular get_transcript tool. It also conveys key constraints (max 10 videos, 3 at a time) that distinguish it as a batch operation.
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 when to use this tool: when fetching multiple transcripts in a batch. It also names get_transcript as the alternative for full text of long transcripts, giving the agent a clear routing condition. It does not explicitly state exclusions or compare with other sibling tools, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_videoGet video intelA
Full metadata + engagement for one video: title, channel, publish date, views, likes, likesPer1kViews (resonance signal, typical range 10-50), category, keywords, description, hasCaptions.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | Video ID or any YouTube URL (watch, youtu.be, shorts) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It is transparent about the returned data and even interprets likesPer1kViews as a resonance signal with a typical range. However, it does not mention error cases, missing fields, authorization, or rate limits — gaps that matter for a tool with no annotation safety signals.
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 one front-loaded sentence: it leads with the tool's purpose, then provides a compact field list and an interpretive note on the resonance signal. Every element earns its place with no filler.
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 one-parameter read tool with no output schema, the description is largely complete: it names all return fields and even explains the meaning of a computed metric. It could be fuller by noting behavior when data is missing (e.g., no captions, unavailable likes), but the current level is solid.
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?
The schema already documents the single parameter at 100% coverage ('Video ID or any YouTube URL'), so the description adds no additional parameter-level meaning. Baseline 3 is appropriate since the schema does the heavy lifting.
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 specific verb+resource: 'Full metadata + engagement for one video' and enumerates the exact fields returned. This clearly distinguishes it from sibling tools like search_videos or get_transcript, which serve different purposes.
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 is the tool for a single video's full metadata and engagement, not for searching, channel listing, or transcripts. It does not explicitly name alternatives or exclusions, but the one-video scope plus field list makes the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_videosSearch YouTube videosA
Search YouTube for videos (no API key). Returns id, title, channel, published, views, duration, snippet per hit. Use filters to narrow: uploadDate for recency, sortBy view_count to find what performs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| sortBy | No | Result ordering (default relevance) | |
| duration | No | short <4min, medium 4-20min, long >20min | |
| maxResults | No | Max hits to return (default 15) | |
| uploadDate | No | Only videos uploaded within this window |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses meaningful traits: 'no API key' signals authentication requirements, and the explicit 'Returns id, title, channel, published, views, duration, snippet per hit' describes the response shape. It does not mention rate limits, pagination, or error behavior, but the disclosed return fields and filter effects are substantial for a search tool.
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?
Three short sentences, each earning its place: action and authentication, return shape, then filter guidance. Front-loaded with the core verb and resource. No filler or 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 a 5-parameter search tool with no output schema and no annotations, the description is fairly complete: purpose, auth trait, per-hit return fields, and filter guidance. It does not explicitly describe the overall response container (e.g., array vs. object) or pagination, but the field list and parameter schema fill most gaps an agent would need to invoke it correctly.
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 goes beyond the schema by mapping two parameters to concrete use cases ('uploadDate for recency, sortBy view_count to find what performs'), adding semantic meaning to the enum choices. It does not describe maxResults or duration, but those are already clear from the schema.
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?
States a specific verb and resource ('Search YouTube for videos') and immediately differentiates from sibling tools by the action of searching. The added '(no API key)' and field-list detail confirm it is the general search tool, not get_video or get_channel_videos. Even without naming siblings, the core purpose is unambiguous.
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?
Gives clear context for when to use filters ('uploadDate for recency, sortBy view_count to find what performs'), which is actionable usage guidance. It does not explicitly contrast with sibling tools or state when not to use this tool, but the search-vs-single-item distinction is strongly implied by the title and description.
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.
6 tool updates
v0.1.1- First observed
get_channel_videos - First observed
get_search_suggestions - First observed
get_transcript - First observed
get_transcripts - First observed
get_video - First observed
search_videos
TDQS
Scored across 6 tools
Each tool serves a clearly distinct purpose: search, video metadata, single transcript, batch transcript, channel details, and search suggestions. There is no functional overlap that would confuse an agent.
All tools follow a consistent action_noun pattern (search_videos, get_video, get_transcript, get_transcripts, get_channel_videos, get_search_suggestions). The pluralization for batch operations is intuitive and predictable.
Six tools is a well-scoped size for a YouTube research server. Each tool adds a distinct capability without redundancy or bloat.
The surface covers the core YouTube research workflow: search, video details, transcripts, channel overview, and keyword discovery. Minor gaps like full channel video listing or comments are absent but not critical for the stated purpose.
Maintenance
Related MCP Connectors
YouTube transcripts, search, channel/playlist listings and upload tracking for AI agents.
YouTube data for AI agents: channels, videos, transcripts, comments, search. Video research.
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.
Related MCP Servers
- AlicenseCqualityBmaintenanceEnables AI agents to search, analyze, and extract insights from YouTube videos including transcripts, visual frames, and benchmarks without requiring API keys. Supports semantic search across playlists, sentiment analysis, and visual content indexing with automatic fallback chains for reliable access.41162 npm35MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to fetch transcripts, metadata, and download videos/audio from YouTube without API keys.32MIT
- AlicenseAqualityDmaintenanceEnables AI agents to search, watch, summarize, clip, and extract transcripts from YouTube videos, all without needing an API key or leaving the chat.911 npm53Apache 2.0
- AlicenseNot gradedqualityBmaintenanceProvides AI agents with token-optimized access to YouTube data, including video details, transcripts, channel statistics, trending videos, and search.1,088 npmMIT