A Claude Desktop / Cowork plugin marketplace that ships a single plugin (youtube-transcript) which teaches Claude how to extract transcripts from YouTube videos — from a full URL or a bare video ID, with or without timestamps.
This repo does not install an MCP server. The plugin is a Cowork skill plus a small Python script. When you ask Claude for a YouTube transcript, the skill runs the script, which pulls the video's captions via the youtube-transcript-api library.
Out of the box, Claude can't reliably pull a YouTube transcript — it can't watch the video, and scraping the page rarely returns clean captions. This plugin gives Claude a deterministic path:
- Recognizes when you want a transcript (you paste a YouTube URL or ID and ask for captions/subtitles/transcript).
- Extracts the video ID from any common YouTube URL format, or accepts a raw 11-character ID.
- Fetches official captions — manually added if present, otherwise auto-generated.
- Formats two ways — plain text, or
[MM:SS] texttimestamped output ([HH:MM:SS]for longer videos). - Saves the result to the filename you ask for, or falls back to
<video-id>-transcript.txt.
The script uses uv to manage its single dependency. uv must be available on the machine running Cowork. If it isn't installed:
# macOS
brew install uv# Linux / macOS (standalone installer)
curl -LsSf https://astral.sh/uv/install.sh | shThe script declares its dependency inline (PEP 723), so uv run installs youtube-transcript-api automatically on first use — no manual pip install needed.
youtube-transcript-plugin/ # repo root = a marketplace
├── .claude-plugin/
│ └── marketplace.json # marketplace manifest (lists 1 plugin)
├── README.md # you are here
├── LICENSE # MIT
└── plugins/
└── youtube-transcript/ # the plugin itself
├── .claude-plugin/
│ └── plugin.json # plugin manifest
└── skills/
└── youtube-transcript/
├── SKILL.md # main skill
└── scripts/
└── get_transcript.py # uv-run caption fetcher (PEP 723)
The marketplace pattern means future contributors can add more plugins under plugins/<name>/ and register them in marketplace.json — the install URL stays the same.
- Open Claude Desktop → Customize → Marketplace (or whatever your version labels the marketplace settings panel).
- Click + Add marketplace (sometimes labeled Sync from URL).
- URL:
kugamon/youtube-transcript-plugin(the GitHubowner/reposhorthand) — or paste the full URLhttps://github.com/kugamon/youtube-transcript-plugin. - Click Sync. The marketplace gets registered and you'll see one plugin:
youtube-transcript. - Click Install on the
youtube-transcriptplugin. - Restart Claude (Cmd+Q + reopen on macOS) so the skill is loaded into the system prompt.
- Clone the repo or download the source.
- In Claude Desktop → Customize → Personal plugins → + → Local folder.
- Pick
plugins/youtube-transcript/(the directory that contains.claude-plugin/plugin.json). - Toggle on. Restart Claude.
For power users who want the marketplace registered globally:
{
"extraKnownMarketplaces": [
{ "url": "https://github.com/kugamon/youtube-transcript-plugin" }
],
"enabledPlugins": ["youtube-transcript"]
}After installing and restarting, test the skill:
"Get me the transcript of this YouTube video: https://youtu.be/dQw4w9WgXcQ"
Claude should load the youtube-transcript skill, run the script, and return the captions. For timestamps:
"Give me the timestamped transcript of https://www.youtube.com/watch?v=dQw4w9WgXcQ"
Ask Claude things like:
- "Get me the transcript of this YouTube video:
<url>" - "Pull the captions from
youtu.be/dQw4w9WgXcQ" - "Give me the timestamped transcript of
<url>" - "Transcribe this and save it to
notes.txt:<url>"
You don't need Claude to use the fetcher — it's a standalone script:
# Plain text
uv run plugins/youtube-transcript/skills/youtube-transcript/scripts/get_transcript.py "VIDEO_URL_OR_ID"
# With timestamps
uv run plugins/youtube-transcript/skills/youtube-transcript/scripts/get_transcript.py "VIDEO_URL_OR_ID" --timestampshttps://www.youtube.com/watch?v=VIDEO_IDhttps://youtu.be/VIDEO_IDhttps://youtube.com/embed/VIDEO_IDhttps://youtube.com/v/VIDEO_ID- Raw 11-character video ID
- Without
--timestamps(default): plain text, one line per caption segment. - With
--timestamps:[MM:SS] text(or[HH:MM:SS]for videos an hour or longer).
When Claude saves a plain-text transcript, it cleans the line breaks into readable paragraphs without altering the wording. The raw caption text itself is never modified.
uv: command not found. Install uv (see Prerequisites) and restart your terminal / Claude.
"Could not extract video ID". The URL didn't match a known format. Pass the bare 11-character ID, or a standard watch?v= / youtu.be/ URL.
"No transcripts were found" / errors fetching captions. The video has captions disabled, or none are available in any language. Captions must be enabled (manual or auto-generated) for the API to return anything.
Plugin loads but the skill doesn't trigger. Restart Claude Desktop fully (Cmd+Q on macOS). Skills are loaded at session start. Make sure your message includes a YouTube URL or ID and asks for a transcript/captions/subtitles.
"This repository isn't a marketplace — no manifest found." Make sure you're on main and that .claude-plugin/marketplace.json exists at the repo root.
PRs welcome. Useful contributions:
- Language selection (let the user request a specific caption track).
- Output formats (SRT/VTT export, JSON with start/duration).
- More robust ID extraction (Shorts, live URLs, playlist-wrapped links).
- New plugins (drop a folder under
plugins/<name>/and register it inmarketplace.json).
MIT — see LICENSE.
This project is not affiliated with YouTube, Google LLC, or Anthropic. It relies on the third-party youtube-transcript-api library; YouTube's terms and caption availability may change at any time.