bama
BAMA: Build Any Mac App. Agent skills to research, clone, design, build, optimize, and test native macOS apps with Swift and SwiftUI.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Keyless YouTube MCP server + research skill for AI agents: multi-language search with transcript highlights, transcript ranges, real video frames, comments and channel outliers. Claude Code & Codex plugin.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A keyless YouTube MCP server and research skill for AI agents. Multi-language YouTube search with transcript highlights, transcripts by time range, chapter or query, real video frames, comments and channel outlier scores, in Claude Code, Codex and any MCP client.
Website · Install · Tools · The skill · FAQ
Ask your agent things like:
"List 20 hooks from this year's top AI productivity videos, with hook type, what's on screen, and a link to the second."
"Which of @channel's videos broke out this year, and what do they have in common?"
"What do creators say is the biggest mistake with AI note-taking? Quote them."
…and get back a table with verbatim quotes, ?t= timestamp links and a coverage line (what was searched, reviewed and skipped). No YouTube Data API key, no OAuth, no cookies.
Most YouTube MCP servers expose one call per video and dump whole transcripts into context. That falls apart when an agent has to look at 50 videos. This one follows the pattern that works for web-search agents: few tools, results that are already useful, and the research method in a skill.
hl/gl), merged and de-duplicated. Videos found by several queries rank higher.start: 0, end: 30 for hooks), by chapter, or only the passages matching a query. Up to 25 videos per call.YT_PROXY for big sweeps.Paste this into Claude Code, Codex, Cursor or any agent that can run commands:
Install YouTube Research MCP for me from https://github.com/jindratilk/youtube-research-mcp. Follow the "Install instructions for AI agents" in its README for the client you are running in: the plugin (MCP server + research skill) in Claude Code or Codex, otherwise the MCP server config. Then run youtube_doctor and tell me whether everything works, and if I need to restart anything.
claude plugin marketplace add jindratilk/youtube-research-mcp
claude plugin install youtube-research@youtube-research
codex plugin marketplace add jindratilk/youtube-research-mcp
codex plugin add youtube-research@youtube-research
{
"mcpServers": {
"youtube": {
"command": "npx",
"args": ["-y", "github:jindratilk/youtube-research-mcp"]
}
}
}
The skill is optional outside the plugins: copy skills/youtube-research into your agent's skills folder.
git clone https://github.com/jindratilk/youtube-research-mcp && cd youtube-research-mcp && npm install && npm run build
claude mcp add youtube -- node "$PWD/dist/index.js"
Requirements: Node.js 20+. dist/index.js is one bundled file with no runtime dependencies. For video frames also install yt-dlp and ffmpeg (brew install yt-dlp ffmpeg); yt-dlp also serves as a transcript fallback.
If a user asked you to install YouTube Research MCP, follow these steps exactly.
node --version must be 20 or newer. If it is older or missing, stop and tell the user.claude CLI exists): run claude plugin marketplace add jindratilk/youtube-research-mcp, then claude plugin install youtube-research@youtube-research. This installs the youtube MCP server and the youtube-research skill.codex CLI exists): run codex plugin marketplace add jindratilk/youtube-research-mcp, then codex plugin add youtube-research@youtube-research."youtube": { "command": "npx", "args": ["-y", "github:jindratilk/youtube-research-mcp"] }. Common config files: Claude Desktop ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows); Cursor ~/.cursor/mcp.json; Windsurf ~/.codeium/windsurf/mcp_config.json; VS Code .vscode/mcp.json (uses a servers key instead of mcpServers). If the client supports skills, copy skills/youtube-research into its skills folder.npx -y github:jindratilk/youtube-research-mcp --doctor. Every line should start with ✓. yt-dlp and ffmpeg are optional (needed only for video frames); if they are missing, offer to install them (brew install yt-dlp ffmpeg on macOS) but do not install without asking. A [rate_limited] transcript line means YouTube is throttling this IP for a while; everything else still works.| Tool | What it does |
|---|---|
youtube_search | Multi-query search with filters and transcript highlights |
youtube_fetch | Batch read: transcript slices, real frames, details, chapters, comments, thumbnail |
youtube_channel | A channel's videos with ×median outlier scores |
youtube_doctor | Checks every YouTube path from your machine, with timings |
youtube_search{
"queries": [
"AI productivity workflow",
"how I use AI to save 10 hours a week",
{ "query": "productividad con IA", "hl": "es", "gl": "ES" }
],
"uploaded": "year",
"minViews": 10000,
"highlights": 5
}
| Parameter | Meaning |
|---|---|
queries | 1–12 strings or {query, hl, gl} objects, run in parallel and merged |
limit | Results per query before merging (default 10, max 50) |
uploaded | hour · today · week · month · year (server-side) |
publishedAfter / publishedBefore | YYYY-MM[-DD], applied after search, approximate |
duration | short (<4 min) · medium (4–20) · long (>20) |
minDurationSec / maxDurationSec / minViews | Post-filters |
shorts | exclude (default) · include · only |
captionsOnly | Only videos with subtitles/CC |
sort | relevance · views · date |
highlights / highlightsPerVideo | How many top results get transcript passages (default 5) and how many each (default 3) |
highlightQuery | Highlight something other than the search topic, e.g. ["biggest mistake"] |
transcriptLangs | Preferred caption languages; default is the video's original language |
youtube_fetch{
"videos": ["https://youtu.be/TL8V41Ea6oM", "htZRCE2GgIs"],
"parts": ["details", "transcript", "frames"],
"start": 0,
"end": 30,
"frames": 4
}
| Parameter | Meaning |
|---|---|
videos | 1–25 URLs or IDs (a ?t= in a URL is used as the start) |
parts | details · transcript · chapters · comments · thumbnail · frames |
start / end | Range for transcript and frames, in seconds or m:ss |
chapter | Limit to the chapter whose title contains this text |
query / matches | Return only matching transcript passages instead of the full text |
timestamps | paragraph (~30 s blocks, default) · segment · none |
maxCharacters | Transcript budget per video (default 12000); truncation says where to resume |
frames / frameAt / frameWidth | N evenly spaced frames, or exact seconds; width up to 1280 px |
commentsLimit | Comments to show per video (default 20, max 200) |
commentsQuery / commentsMatch | Search inside the top comments (accent-insensitive, matches word forms); any (default) or all terms |
commentsMinLikes / commentsAuthor | Keep only comments with enough likes, or from an author |
commentsScan | How many top comments to read before filtering (default 300 when filtering, max 1000) |
commentsSort | top (YouTube order) or likes (most liked first among the scanned) |
commentsReplies | Also load up to N replies under each shown comment (max 20) |
youtube_channel{ "channel": "@aliabdaal", "limit": 60, "minOutlier": 2 }
Videos, Shorts or streams; latest · popular · oldest; up to 300 videos; subscriber and video counts; publishedAfter; minOutlier to keep only breakouts.
youtube_doctorNo parameters. Checks search, video details, transcripts, watch page, channels, yt-dlp and ffmpeg, and shows an active rate-limit pause.
skills/youtube-research turns a request into a supervised sweep:
videos_reviewed: N / skipped: ….References: searching · hooks (10-type taxonomy) · quotes & claims · creators & outliers · synthesis.
productivity matches productive), weights rare terms higher and rewards passages that hit several concepts.| Env var | Default | Meaning |
|---|---|---|
YT_MCP_TOOLS | all | Comma-separated tools to expose |
YT_MAX_CONCURRENCY / YT_MIN_GAP_MS | 4 / 120 | API request queue |
YT_CAPTION_CONCURRENCY / YT_CAPTION_GAP_MS | 2 / 350 | Caption download queue |
YT_CAPTION_COOLDOWN_MS | 60000 | First pause after a caption 429 (doubles per repeat, max 15 min) |
YT_PROXY | none | HTTP(S) proxy for all YouTube requests, yt-dlp and ffmpeg |
YT_TIMEOUT_MS | 15000 | Per-request timeout |
YT_CACHE_TTL_MS | 900000 | In-memory cache lifetime |
YT_FRAME_MAX_HEIGHT / YT_FRAME_CONCURRENCY | 720 / 3 | Stream quality for frames; parallel ffmpeg processes |
YT_DLP / YT_DLP_PATH / FFMPEG_PATH | on / yt-dlp / ffmpeg | Disable or locate the helpers |
YT_DEBUG | off | Log every YouTube request (status, queue wait, latency) to stderr |
YT_WEB_CLIENT_VERSION, YT_ANDROID_CLIENT_VERSION, YT_IOS_CLIENT_VERSION | built in | Override Innertube client versions if YouTube starts rejecting them |
get_transcript endpoint is closed to anonymous clients, so there is no second keyless source. The server pauses and tells the agent when to retry; for sweeps of hundreds of videos use YT_PROXY.youtube_fetch returns the exact publish date.sort: "date" re-sorts fetched results, so pair it with uploaded.Does it need a YouTube API key? No. No API key, OAuth or cookies.
Which clients does it work with? Any MCP client over stdio: Claude Code, Codex, Claude Desktop, Cursor, Windsurf, VS Code, Zed and more. Claude Code and Codex get the plugin with the skill.
Does it download videos? No. Transcripts come from caption files; frames are decoded from small byte ranges of the stream.
Does it work for non-English content? Yes: per-query language and region, original-language transcripts by default, and accent-aware highlights.
Researching Instagram Reels too? See the sibling project Reels Research MCP.
Is it affiliated with YouTube or Google? No. It is an independent open-source project. Use it in line with YouTube's terms and respect creators' rights.
npm test # offline unit tests: parsing, highlights, filters, frame spacing
npm run smoke # end-to-end against live YouTube through a real MCP client
npm run dev # run from source
npm run build # typecheck + bundle to dist/index.js
Layout: src/innertube.ts (HTTP, queues, errors) · src/youtube.ts (search, player, transcripts, watch page, comments, channels) · src/highlights.ts · src/frames.ts · src/tools/* (MCP tools) · skills/ · docs/ (website).
MIT. Not affiliated with YouTube or Google. YouTube is a trademark of Google LLC.
Keywords: YouTube MCP server, YouTube transcript MCP, YouTube search for AI agents, Model Context Protocol, Claude Code plugin, Codex plugin, YouTube without API key, YouTube hooks research, video frames for LLMs, agent skill.