# rippr-mcp [![MCP Badge](https://lobehub.com/badge/mcp/mrslbt-rippr)](https://lobehub.com/mcp/mrslbt-rippr) [![rippr MCP server](https://glama.ai/mcp/servers/mrslbt/rippr/badges/score.svg)](https://glama.ai/mcp/servers/mrslbt/rippr) YouTube transcript extraction for AI agents. MCP server for Claude, Cursor, and any MCP-compatible client. Saves each transcript as a file and returns the path. Model context stays clean. No API keys. No signup. Runs locally. [Website](https://rippr.me) · [Chrome Extension](https://chromewebstore.google.com/detail/rippr) · [npm](https://www.npmjs.com/package/rippr-mcp) ## Requires a desktop client rippr runs as a local stdio process. Works with Claude Desktop, Claude Code CLI, Cursor, and any client that can spawn local processes. It does **not** work with cloud-hosted clients: claude.ai on the web, the Claude mobile app, or Claude Code on phone / web. Those environments can't launch local Node processes, so stdio MCPs like rippr can't be reached from them. Run it from a desktop. ## Install ```bash npx rippr-mcp ``` ### Claude Desktop Add to `~/Library/Application Support/Claude/claude_desktop_config.json`: ```json { "mcpServers": { "rippr": { "command": "npx", "args": ["-y", "rippr-mcp"] } } } ``` ### Claude Code ```bash claude mcp add rippr -- npx -y rippr-mcp ``` ## How it behaves When you ask Claude to rip a YouTube video: 1. Claude calls `rip_transcript` with the URL. 2. rippr writes the transcript to `~/rippr/transcripts/_.md` and returns a `resource_link` plus metadata (title, channel, language, duration, word count, saved path, preview). The full transcript text is not returned by default. 3. Claude tells you where the file was saved. 4. Follow-ups ("summarize it", "find the part about X") read the saved resource instead of re-ripping. ## Tools ### `rip_transcript` Extract and save a YouTube transcript. | Parameter | Type | Required | Default | Description | |---|---|---|---|---| | `url` | string | yes | — | Any YouTube URL format | | `format` | string | no | `"text"` | `"text"` → Markdown with frontmatter. `"segments"` → JSON with timestamped segments. | | `save_path` | string | no | `~/rippr/transcripts/` | Override save location. Accepts absolute paths, `~/`-relative paths, directories, or full file paths. | | `return_text` | boolean | no | `false` | Include the full transcript text inline in the tool response. Use for short clips or when the text is needed inline. | **Response shape:** - A `resource_link` pointing at the saved file (`file://…`), with mime type `text/markdown` or `application/json`. - A text summary: title, channel, language, duration, word count, segment count, URL, 240-char preview, and the saved path. - Optionally, the full transcript text (when `return_text: true`). **Saved Markdown file:** ```markdown --- title: "Video Title" channel: "Channel Name" language: en (auto-generated) videoId: abc123XYZ45 videoUrl: https://www.youtube.com/watch?v=abc123XYZ45 durationSeconds: 1289 rippedAt: 2026-04-17T14:22:00.000Z --- # Video Title > by Channel Name Full transcript text as a single continuous block… ``` **Saved JSON file (when `format: "segments"`):** ```json { "title": "Video Title", "channel": "Channel Name", "language": "en", "isAutoGenerated": true, "videoId": "abc123XYZ45", "videoUrl": "https://www.youtube.com/watch?v=abc123XYZ45", "segmentCount": 142, "segments": [ { "start": 0.5, "duration": 2.1, "text": "Hello world" } ], "rippedAt": "2026-04-17T14:22:00.000Z" } ``` ## Prompts | Prompt | Description | |---|---| | `get_transcript` | Rip a video. Saves to disk. | | `summarize_video` | Rip, read the saved file, summarize. | | `extract_quotes` | Rip, read the saved file, pull quotes. Optional `topic`. | | `compare_videos` | Rip two videos, compare. | | `research_topic` | Rip and extract info about a specific `topic`. | ## Resources | Resource | URI | Description | |---|---|---| | Output Formats | `rippr://formats` | Format reference (text vs segments) and the default save dir | | Saved transcripts | `file://` URIs under `~/rippr/transcripts/` | Every previously ripped transcript, surfaced as a readable resource | Saved transcripts are listed dynamically. The client can enumerate them via `resources/list` and read any one via `resources/read` without re-ripping the video. ## Example queries ``` Rip this video: https://www.youtube.com/watch?v=fpETS6q1Hww Summarize the key points from this talk: https://youtu.be/abc123 What does this video say about machine learning? https://www.youtube.com/watch?v=xyz Compare these two videos: [url1] [url2] ``` ## How it works 1. Tries YouTube's InnerTube API (Android client) first 2. Falls back to HTML scraping if InnerTube fails 3. Parses caption XML in multiple formats (srv3, timedtext, classic) 4. Retries with exponential backoff on transient failures 5. Writes Markdown or JSON to `~/rippr/transcripts/` (or the path you pass) No API keys required. Runs entirely on your machine. ## Privacy Runs locally. Talks to YouTube's own APIs to fetch caption data, and writes transcript files to your filesystem. No telemetry, no analytics, no tracking. Resource reads are restricted to the default save directory. ## Disclaimer Rippr accesses publicly available YouTube transcript data through endpoints that YouTube's own apps use. It is not affiliated with, endorsed by, or sponsored by YouTube or Google LLC. YouTube is a trademark of Google LLC. Use is subject to YouTube's Terms of Service. Use at your own risk. The author accepts no liability for takedowns, rate limits, account actions, or any other consequences of use. If YouTube adjusts their internal APIs in ways that break extraction, the tool may stop working without notice. For long-term production use, consider the official [YouTube Data API v3](https://developers.google.com/youtube/v3) with an API key (not currently supported in this package). ## License [MIT](LICENSE)