yt-analytics-mcp
Analyzes YouTube channels: extracts transcripts, computes quantitative metrics (WPM, profanity, humor, rhetoric, title formula), and generates multi-creator comparison dashboards.
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., "@yt-analytics-mcpanalyze @MrBeast's channel with 10 videos"
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.
yt-analytics-mcp
MCP server for YouTube channel deep analytics. Extracts transcripts, computes quantitative metrics (WPM, profanity, humor taxonomy, rhetoric fingerprint, title formula, posting schedule), and generates multi-creator comparison dashboards.


Tools
Tool | Description |
| Analyze a channel: download transcripts, compute metrics, cache results |
| List all cached channel analyses |
| Retrieve full cached analysis JSON for a channel |
| Remove a cached analysis |
| Build a tabbed HTML comparison dashboard from cached analyses |
Related MCP server: YouTube MCP
Quick Start
# Install
cd yt-analytics-mcp
npm install
# Add to Claude Code settings
# ~/.claude/settings.json → mcpServersClaude Code Config
{
"mcpServers": {
"yt-analytics": {
"command": "node",
"args": ["/path/to/yt-analytics-mcp/src/index.js"],
"env": {
"YT_ANALYTICS_DATA": "/path/to/yt-analytics-mcp/data"
}
}
}
}Usage
Analyze a single channel
Analyze @BennJordan's channel (20 videos, tech niche)
→ calls yt_analyze_channel with channel="@BennJordan", limit=20, niche="tech"Returns structured JSON with per-video and aggregate metrics:
WPM (words per minute) with niche baseline comparison
Profanity density per minute
Humor taxonomy (crude, self-deprecating, confrontational, hyperbolic, absurd)
Rhetoric fingerprint (connector word frequencies: but, so, because, if you, etc.)
Title formula (CAPS usage, exclamation marks, parentheticals)
Posting schedule (day-of-week distribution, monthly activity, cadence gaps)
Build a comparison dashboard
Compare all analyzed channels in a tabbed dashboard
→ calls yt_compare_creatorsGenerates a self-contained HTML file with:
Sticky tab bar for switching between creators
KPI cards (videos, words, runtime, median WPM, profanity, avg length)
WPM horizontal bar chart with niche average line
Video structure timeline
Humor taxonomy doughnut chart
Profanity density bar chart
Rhetoric radar chart
Video length vs. speech rate bubble chart
Posting schedule — day-of-week bar chart, monthly activity line chart, cadence stats
Title formula badges
Opening line pattern breakdown
Connector language grid
Per-video data table
Written analysis
Workflow
1. yt_analyze_channel → analyze @Creator1 (cached)
2. yt_analyze_channel → analyze @Creator2 (cached)
3. yt_analyze_channel → analyze @Creator3 (cached)
4. yt_compare_creators → build tabbed dashboard from all cached analysesThe companion /yt-analytics skill adds Gemini qualitative analysis on top — editing mechanics, humor quotes, video structure timelines, energy modulation — then merges with the MCP's quantitative data.
Filtering by date
Analyze @RyanHumiston — last 2 years only, 20 videos
→ yt_analyze_channel with channel="@RyanHumiston", limit=20, max_age_days=730The --max-age-days flag filters out videos older than N days before analysis.
Niche Baselines
Niche | Avg WPM |
Fitness | ~170 |
Tech | ~160 |
Commentary | ~190 |
Educational | ~150 |
Gaming | ~180 |
News | ~175 |
Woodworking | ~175 |
Music | ~165 |
Requirements
Node.js 18+
Python 3.10+ with
yt-dlpandyoutube-transcript-apiinstalledNo API keys needed
Data Storage
Analyses are cached as JSON files in the data/ directory (configurable via YT_ANALYTICS_DATA env var). Transcript files are stored in data/transcripts/.
Architecture
yt-analytics-mcp/
├── src/
│ └── index.js # MCP server + HTML generator
├── scripts/
│ └── analyze_channel.py # Transcript extraction + quantitative analysis
├── docs/ # Example screenshots
├── data/ # Cached analyses (JSON) + transcripts
├── package.json
└── README.mdThe MCP server wraps the Python analysis script and adds:
Result caching and management
Multi-creator comparison HTML generation
Structured tool interfaces for Claude Code
Available Tools
5 toolsyt_analyze_channelA
Analyze a YouTube channel: download transcripts and compute quantitative metrics (WPM, profanity, humor taxonomy, rhetoric fingerprint, title formula). Returns structured JSON. Results are cached for use in comparisons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max videos to analyze (default 10) | |
| niche | No | Content niche for WPM baseline comparison. Options: fitness (~170), tech (~160), commentary (~190), educational (~150), gaming (~180), news (~175), woodworking (~175), music (~165) | |
| channel | Yes | Channel URL, handle (@BennJordan), or name. Accepts full URLs (https://www.youtube.com/@BennJordan/videos) or just the handle. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: it downloads transcripts, computes specific metrics, returns structured JSON, and caches results. Since no annotations are provided, the description carries the full burden, and it adequately covers the main operations. It does not mention potential side effects, authentication, or rate limits, but for a read-only analysis tool, the transparency is sufficient.
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 sentences long, immediately stating the core purpose and actions in the first sentence. It efficiently lists metrics, output format, and caching behavior without extraneous details. Every sentence adds value, making it highly concise and well-structured.
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?
The tool has three parameters, no output schema, and no annotations. The description provides a reasonable overview of what it does and what it returns, including specific metric names. It could be improved by describing the JSON structure or mentioning that results are cached for later retrieval via yt_get_analysis, but for a moderate-complexity tool, it is fairly complete.
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?
All three parameters (channel, limit, niche) are fully described in the input schema with types, defaults, and notes. The description does not add any additional parameter semantics beyond what the schema already provides. Since schema coverage is 100%, the description's lack of extra parameter details is acceptable, resulting in a baseline score of 3.
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 tool's purpose: 'Analyze a YouTube channel: download transcripts and compute quantitative metrics (WPM, profanity, humor taxonomy, rhetoric fingerprint, title formula).' It uses a specific verb-adverb-resource structure and lists concrete outputs. This distinguishes it from sibling tools like yt_compare_creators (comparison) and yt_get_analysis (retrieve existing analysis).
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 mentions 'Results are cached for use in comparisons,' implying that the analysis can be reused by yt_compare_creators. However, it does not explicitly state when to use this tool vs. retrieving an existing analysis via yt_get_analysis, nor does it provide any contraindications or prerequisite knowledge. The guidance is implied but not explicit enough for an agent to make optimal decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yt_compare_creatorsA
Build or update a tabbed HTML comparison dashboard from cached analyses. Specify which channels to include, or omit to include all cached analyses. Returns the HTML file path.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Dashboard title (default: "YouTube Creator — Deep Analytics") | |
| channels | No | List of channel names/slugs to include. If omitted, includes all cached analyses. | |
| output_path | No | Output file path for the HTML dashboard. Defaults to data/creator-comparison.html |
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 discloses that the tool builds/updates an HTML file and returns the path, but it does not mention side effects (e.g., whether it overwrites existing files, requires permissions, or if it is idempotent). The phrase 'from cached analyses' suggests read-only on cache, but not explicit.
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 sentences with zero fluff. It front-loads the core purpose and immediately provides actionable usage guidance. Every word 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 the tool has 3 optional params, no output schema, and no annotations, the description covers the essential aspects: what it produces, how to include channels, and the return value. It could be slightly improved by noting prerequisites (e.g., that cached analyses must exist) or mentioning that the tool creates or overwrites a file, but overall it is quite complete for its simplicity.
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%, and the description adds no new information beyond what the schema already provides. For example, the description's statement about omitting channels is identical to the schema's description. Baseline 3 is appropriate as 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 clearly states the verb ('Build or update') and resource ('tabbed HTML comparison dashboard from cached analyses'). It distinguishes from siblings (yt_analyze_channel, yt_get_analysis, etc.) by focusing on comparison rather than individual analysis or retrieval.
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 by stating you can specify channels or include all, but it does not explicitly say when to use this tool versus alternatives like yt_list_analyses or yt_analyze_channel. No exclusions or context for when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yt_get_analysisB
Retrieve the full cached analysis JSON for a specific channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel name or slug (as returned by yt_list_analyses) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It identifies the operation as a retrieval (non-destructive) but fails to disclose caching behavior, error conditions, authentication needs, or what 'full cached analysis JSON' entails beyond a vague label.
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 sentence with zero wasted words, front-loading the purpose and resource. It is optimally concise for the information provided.
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 and no annotations, the description is too brief. It does not explain the returned JSON content, error handling, prerequisites (e.g., existing analysis), or any side effects. A retrieval of 'full cached analysis' warrants more completeness.
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% (the single parameter has a clear description referencing yt_list_analyses). The tool description adds no additional semantic meaning beyond what the schema already provides, so baseline score 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 uses a specific verb 'retrieve' and explicitly names the resource 'full cached analysis JSON for a specific channel'. It clearly distinguishes from sibling tools like yt_list_analyses (listing) and yt_analyze_channel (analysis creation).
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 context via the parameter reference to yt_list_analyses, but does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yt_list_analysesA
List all cached channel analyses. Returns channel names, video counts, and analysis dates.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool returns specific fields (channel names, video counts, analysis dates) but does not explicitly state that it is read-only or that it has no side effects. The description is adequate but minimal.
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 sentence with no unnecessary words. It is direct and every word serves a purpose: stating the action, the resource, and the return values.
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 the simplicity of the tool (no parameters, no output schema), the description provides the basic purpose and return fields. However, it could be more complete by noting that it is a read-only operation or mentioning caching behavior. Without annotations, the agent might need more context.
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?
There are no parameters, so the schema coverage is vacuously 100%. The description adds context by stating what the tool returns, which is beneficial beyond the empty schema. Baseline for 0 parameters is 4, and the description meets 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 tool's purpose: listing all cached channel analyses. It specifies the verb 'List' and the resource 'cached channel analyses', distinguishing it from sibling tools like yt_analyze_channel (creates analyses) and yt_get_analysis (retrieves a specific one).
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 on when to use this tool versus alternatives. The description does not mention any prerequisites, context, or reasons for choosing it over siblings like yt_analyze_channel or yt_get_analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yt_remove_analysisB
Remove a cached channel analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel name or slug to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It indicates a destructive action ('Remove') but does not clarify permanence, side effects (e.g., does it also remove analysis data?), or required permissions. The minimal description leaves ambiguity about the exact impact.
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?
Single sentence, no extraneous content. It is concise and front-loaded, though it could benefit from a brief usage note.
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 destructive, single-parameter tool with no output schema, the description is sparse. It does not explain what happens after removal, how to verify success, or error conditions. More context is needed for safe usage.
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% (channel parameter described). The description adds no extra meaning beyond the schema, which is adequate. 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 states the action ('Remove') and the resource ('cached channel analysis'). It effectively distinguishes from siblings like yt_analyze_channel and yt_get_analysis by specifying removal rather than creation, retrieval, or comparison.
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 on when to use this tool versus alternatives. The description does not specify prerequisites, such as whether an analysis must exist first, or when removal is appropriate (e.g., only if cache is outdated).
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.
5 tool updates
v1.0.0- First observed
yt_analyze_channel - First observed
yt_compare_creators - First observed
yt_get_analysis - First observed
yt_list_analyses - First observed
yt_remove_analysis
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: analyzing a channel, comparing creators, retrieving cached analyses, listing them, and removing them. No overlap exists.
All tools follow a consistent 'yt_verb_noun' pattern (e.g., yt_analyze_channel, yt_compare_creators), making the naming predictable and uniform.
With 5 tools, the server is well-scoped for managing YouTube channel analyses. The count is appropriate for the domain without being excessive or insufficient.
The tool set covers the full lifecycle: create analysis, retrieve (list/get), update (compare dashboard), and delete. No obvious gaps for the intended purpose.
Maintenance
Related MCP Connectors
An MCP server that gives any LLM or agent clean YouTube transcripts on demand: a single video, a whole channel, or a playlist, plus AI cleanup of auto-generated captions. API-key auth, credit-based, same backend as the public v1 API. Get a free API key with 25 free credits at youtubetranscriptdownload.com/account.
MCP server for structured access to Lenny Rachitsky podcast transcripts. For content creators.
MCP server for RiverScript, an AI transcription platform - fetches transcripts shared via a link.
- MysocialOAuthio.mysocial
Social media MCP server: your Instagram, TikTok, YouTube, LinkedIn and Threads history for your AI.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables interaction with the YouTube Data API, allowing users to search videos, get video and channel details, analyze trends, and fetch video transcripts.-
- AlicenseAqualityDmaintenanceAn MCP server that enables users to retrieve YouTube transcripts and perform video or channel searches without requiring Google API keys. It supports transcript chunking and provides tools for detailed video content analysis and channel metadata extraction.533 npm4MIT
- AlicenseAqualityBmaintenanceAn MCP server for intelligent YouTube video analysis that provides token-optimized summaries, sentiment analysis, and entity extraction from transcripts. It enables AI assistants to perform video reporting, channel monitoring, and comprehensive YouTube searches through structured data tools.1052Apache 2.0
- AlicenseAqualityAmaintenanceA comprehensive MCP server integrating YouTube Data, Analytics, and Reporting APIs, providing 40 tools for channel management, analytics, video publishing, transcripts, SEO, and comments.4021MIT