yt-outlier-mcp
Finds YouTube outlier videos on small channels with high views-to-subs ratio, and provides tools to analyze video structure and comments to verify replicable formats.
README
yt-outlier-mcp
MCP server that finds YouTube outlier videos: videos on small channels (≤100K subs) with one video massively outperforming both the channel's subscriber base (≥5:1 views:subs) and the channel's own recent uploads. That signature means the recommendation algorithm rewarded the format, not an existing audience — so the format is replicable by a new channel.
The method is the "Icon Method" qualifying criteria proven manually on
@Before-You-Start (see hobby-channel/IDEAS.md); this server automates it as
one MCP tool. Origin: idea #2 in _ideas/next-batch.html (paid MCP servers).
Tool: find_outliers
| Input | Default | Meaning |
|---|---|---|
query |
(required) | Topic phrase, e.g. "beginner mistakes sourdough" |
maxSubs |
100,000 | Max channel subscribers |
minViews |
100,000 | Min video views |
minRatio |
5 | Min views:subs ratio |
publishedWithinDays |
365 | Freshness window (older outliers are stale evidence) |
minOutlierFactor |
3 | Video views vs. median of channel's other recent uploads |
minQueryRelevance |
0 (off) | Min fraction of query terms found in title/description/tags; 0.5 cuts off-topic noise |
maxResults |
10 | Cap on returned outliers |
Pipeline per call: search.list (order=viewCount, the expensive call) →
batch videos.list + channels.list → cheap-filter by views/subs/ratio →
for survivors, pull the uploads playlist and compare against the channel's
median recent-upload views (the outlier-vs-baseline check that separates a
breakout format from a big channel's normal video).
Output per outlier: URL, views, subs, ratio, channel median views,
outlier factor, queryRelevance (fraction of query terms found in
title/description/tags — always reported, filtered only if
minQueryRelevance > 0; costs zero extra quota since the snippet is already
fetched), comments-enabled flag (comments are the manual demand-signal
step), channel video count, plus total quota units consumed.
Tool: get_video_structure
Icon Method verification step 2 — extract the replicable format instead of
guessing it. Takes a video ID or URL; returns duration, tags, chapters
(parsed from 0:00 Intro-style description lines), the description, and the
transcript. Costs 1 quota unit; the transcript itself is fetched outside
the Data API at zero quota (captions.download needs owner OAuth, so the
server asks the InnerTube player endpoint as the ANDROID client — unofficial,
returns transcript: null gracefully if YouTube ever gates it).
| Input | Default | Meaning |
|---|---|---|
video |
(required) | Video ID or URL (watch/shorts/youtu.be forms) |
includeTranscript |
true | Fetch the transcript |
maxTranscriptChars |
15,000 | Truncation cap |
Tool: get_comment_signal
Icon Method verification step 3 — comments prove unmet demand, not just views. Returns the top relevance-ordered comments (author, text, likes, replies) plus quick counts: comments asking questions and comments using demand phrasing ("please make…", "part 2", "how do you…"). Handles comments-disabled videos gracefully. Costs 1 quota unit.
| Input | Default | Meaning |
|---|---|---|
video |
(required) | Video ID or URL |
maxComments |
30 | Top comments to fetch (max 100) |
Tool: search_niche_sweep
Runs find_outliers once per niche by substituting each niche into a phrase
template, then ranks every hit across all niches by views:subs ratio — the
niche that keeps appearing up top is where the replicable format lives.
Expensive: each niche is a full search (~110–130 units), max 8 niches per
sweep. Per-niche API errors are recorded without killing the sweep; a
quota-exhausted error aborts the remaining niches with a note.
| Input | Default | Meaning |
|---|---|---|
template |
(required) | Phrase containing {niche}, e.g. "beginner mistakes {niche}" |
niches |
(required) | 1–8 niches to substitute |
maxResultsPerNiche |
5 | Cap per niche |
| filters | same as find_outliers |
maxSubs, minViews, minRatio, publishedWithinDays, minOutlierFactor, minQueryRelevance |
Tool: get_channel_baseline
The inverse entry point: you already have a suspect channel (from a
competitor, a comment, another tool) instead of a topic query. Computes the
channel's baseline — median views of its recent uploads — and scores every
recent upload against it, flagging outliers. Cheap: ~3 quota units (no
search.list call). Accepts channel ID, @handle, or channel URL.
| Input | Default | Meaning |
|---|---|---|
channel |
(required) | Channel ID (UC…), @handle, or channel URL |
recentUploads |
15 | Recent uploads to fetch for the baseline (3–50) |
minOutlierFactor |
3 | Flag uploads at ≥ this multiple of the channel median |
Setup
npm install
npm run build
Configure in a client (Claude Code example):
claude mcp add yt-outliers -e YOUTUBE_API_KEY=<key> -- node <abs-path>/dist/index.js
BYO key: needs a YouTube Data API v3 key (.env.example). Free quota is
10,000 units/day; one find_outliers call costs ~110–130 units (search=100,
everything else 1/call), so ~75–90 searches/day. The BYO-key model is what
makes this sellable without a Google quota-extension audit.
Roadmap
- [x] Live-test tool against real niches (2026-07-10: 4 real outliers on "beginner mistakes sourdough", 110 units/call as predicted)
- [x] Phase 2 tools:
get_video_structure(chapters/transcript) andget_comment_signal(top comments → demand resonance) to automate Icon Method verification steps 2–3 (2026-07-10, live-tested) - [x]
search_niche_sweep: rotate one phrase template across hobby clusters (2026-07-10, live-tested: 2-niche sweep = 210 units, cross-niche ranking works) - [x] List on Smithery (2026-07-10): live at smithery.ai/servers/phillipmex3/yt-outlier-mcp. MCPize deferred (their SDK/hosting required; actual rev share 80%, not the 85% marketed) — revisit if Smithery shows install signal.
Publishing note
Smithery's registry requires each tools[] entry in manifest.json to carry an
inputSchema, but npx @anthropic-ai/mcpb pack rejects that key as invalid.
Workaround used here: pack the bundle from a manifest without the schemas,
then replace manifest.json inside the .mcpb (it's a plain zip) with the
schema-bearing version in this repo before smithery mcp publish.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。