{
  "markdown": "# Video Transcriber MCP 🚀\n\n**High-performance video transcription MCP server using whisper.cpp (Rust)**\n\n[![License: MIT OR Apache-2.0](https://img.shields.io/crates/l/video-transcriber-mcp.svg)](#license)\n[![Rust](https://img.shields.io/badge/rust-1.85%2B-orange.svg)](https://www.rust-lang.org/)\n[![crates.io](https://img.shields.io/crates/v/video-transcriber-mcp.svg)](https://crates.io/crates/video-transcriber-mcp)\n\nA Model Context Protocol (MCP) server that transcribes videos from **1000+ platforms** using whisper.cpp. Built with Rust for maximum performance and efficiency.\n\n## 📦 Installation\n\n### Homebrew (macOS/Linux) - Recommended\n\nThe easiest way to install with all dependencies:\n\n```bash\nbrew install nhatvu148/tap/video-transcriber-mcp\n```\n\nThis automatically installs the binary along with required dependencies (cmake, yt-dlp, ffmpeg).\n\n### Cargo Install\n\nIf you have Rust installed:\n\n```bash\ncargo install video-transcriber-mcp\n```\n\n**Note:** You'll need to manually install dependencies: `yt-dlp`, `ffmpeg`, `cmake`\n\n### Pre-built Binaries\n\nDownload from [GitHub Releases](https://github.com/nhatvu148/video-transcriber-mcp-rs/releases/latest):\n\n```bash\n# macOS (Intel)\ncurl -L https://github.com/nhatvu148/video-transcriber-mcp-rs/releases/latest/download/video-transcriber-mcp-x86_64-apple-darwin.tar.gz | tar xz\nsudo mv video-transcriber-mcp /usr/local/bin/\n\n# macOS (Apple Silicon)\ncurl -L https://github.com/nhatvu148/video-transcriber-mcp-rs/releases/latest/download/video-transcriber-mcp-aarch64-apple-darwin.tar.gz | tar xz\nsudo mv video-transcriber-mcp /usr/local/bin/\n\n# Linux (x86_64) — no ARM64 Linux build, see issue #13; use `cargo install`\ncurl -L https://github.com/nhatvu148/video-transcriber-mcp-rs/releases/latest/download/video-transcriber-mcp-x86_64-unknown-linux-gnu.tar.gz | tar xz\nsudo mv video-transcriber-mcp /usr/local/bin/\n\n# Windows: Download .zip from releases page\n```\n\n**Note:** You'll need to manually install dependencies: `yt-dlp`, `ffmpeg`\n\n### Claude Code plugin\n\nInstalls the MCP server and a `/transcribe` skill in one step:\n\n```bash\n/plugin marketplace add nhatvu148/video-transcriber-mcp-rs\n/plugin install video-transcriber@nhatvu148-tools\n```\n\nThe plugin registers the MCP server for you, but it does **not** install the binary — run one of the install commands above first, so `video-transcriber-mcp` is on your `PATH`.\n\n## 🎯 Why Rust?\n\nThis version uses **whisper.cpp** (C++ implementation with Rust bindings) instead of Python's OpenAI Whisper:\n\n| Advantage | whisper.cpp (Rust) | OpenAI Whisper (Python) |\n|-----------|-------------------|------------------------|\n| **Performance** | Native C++ speed | Python interpreter overhead |\n| **Memory** | Lower footprint | Higher memory usage |\n| **Startup** | Instant (<100ms) | Slow (~2-3s model loading) |\n| **Dependencies** | Standalone binary | Requires Python + packages |\n| **Portability** | Single binary | Python environment needed |\n\nReal-world performance depends on your hardware, video length, and chosen model.\n\n## ✨ Features\n\n- 🚀 **High performance** transcription using whisper.cpp (C++ with Rust bindings)\n- 🎥 Download from **1000+ platforms** (YouTube, Vimeo, TikTok, Twitter, etc.)\n- 📂 Transcribe **local video files** (mp4, avi, mov, mkv, etc.)\n- 🎤 **100% offline** transcription (privacy-first)\n- 🎛️ **5 model sizes** (tiny, base, small, medium, large)\n- 🌐 **90+ languages** supported\n- 📝 **Multiple output formats** (TXT, JSON, Markdown)\n- 🔌 **MCP integration** for Claude Code\n- 🌐 **Dual transport** - stdio (local) and Streamable HTTP (remote)\n- ⚡ **Native binary** - no Python or Node.js required\n- 💾 **Low memory footprint** compared to Python implementations\n\n## ⚡ Quick Start (Using Taskfile)\n\n**The fastest way to get started:**\n\n```bash\n# 1. Install Task (if not already installed)\nbrew install go-task/tap/go-task\n\n# 2. Complete setup (build + download model)\ntask setup\n\n# 3. Run a quick test\ntask test:quick\n\n# Done! 🎉\n```\n\n**Available Commands:**\n```bash\ntask setup           # Complete project setup\ntask test:quick      # Test with short video\ntask benchmark       # Run performance benchmark\ntask deps:check      # Check dependencies\ntask download:base   # Download base model\ntask help            # Show all commands\n```\n\nSee [Taskfile.yml](Taskfile.yml) for all available tasks.\n\n---\n\n## 🌐 Transport Modes\n\nThe server supports two transport modes:\n\n### Stdio Transport (Default)\n\nStandard I/O transport for local CLI usage with Claude Code. This is the default mode.\n\n```bash\nvideo-transcriber-mcp\n# or explicitly:\nvideo-transcriber-mcp --transport stdio\n```\n\n### Streamable HTTP Transport\n\nHTTP transport for remote access. Allows the MCP server to be accessed over the network.\n\n```bash\n# Start HTTP server on default port (8080)\nvideo-transcriber-mcp --transport http\n\n# Custom host and port\nvideo-transcriber-mcp --transport http --host 0.0.0.0 --port 3000\n```\n\n**Remote MCP Client Configuration:**\n\nFor HTTP transport, configure your MCP client with the URL:\n\n```json\n{\n  \"mcpServers\": {\n    \"video-transcriber-mcp\": {\n      \"url\": \"http://localhost:8080/mcp\"\n    }\n  }\n}\n```\n\n**Benefits of HTTP Transport:**\n- No local installation required for clients\n- Centralized server deployment\n- Automatic updates (server-side)\n- Better for team environments\n- Compatible with serverless platforms\n\n### CLI Options\n\n```bash\nvideo-transcriber-mcp --help\n\nOptions:\n  -t, --transport <TRANSPORT>  Transport mode [default: stdio] [possible values: stdio, http]\n      --host <HOST>            Host address for HTTP transport [default: 127.0.0.1]\n  -p, --port <PORT>            Port for HTTP transport [default: 8080]\n  -h, --help                   Print help\n  -V, --version                Print version\n```\n\n---\n\n## 📦 Manual Build from Source\n\n### Prerequisites\n\n1. **Rust** (1.85+ for Rust 2024 edition)\n```bash\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n```\n\n2. **yt-dlp** (for downloading videos)\n```bash\n# macOS\nbrew install yt-dlp\n\n# Linux\npip install yt-dlp\n\n# Windows\nwinget install yt-dlp.yt-dlp\n```\n\n3. **FFmpeg** (for audio processing)\n```bash\n# macOS\nbrew install ffmpeg\n\n# Linux\nsudo apt install ffmpeg  # Debian/Ubuntu\nsudo dnf install ffmpeg  # Fedora\n\n# Windows\nchoco install ffmpeg\n```\n\n### Build from Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/nhatvu148/video-transcriber-mcp-rs.git\ncd video-transcriber-mcp-rs\n\n# Build the project\ncargo build --release\n\n# The binary will be at: target/release/video-transcriber-mcp-rs\n```\n\n### Download Whisper Models\n\n```bash\n# Download base model (recommended for testing)\nbash scripts/download-models.sh base\n\n# Or download all models\nbash scripts/download-models.sh all\n```\n\nModels are stored in `~/.cache/video-transcriber-mcp/models/`\n\n## 🚀 Quick Start\n\n### MCP Server (for Claude Code)\n\nAdd to `~/.claude/settings.json`:\n\n**Option 1: If installed via GitHub Release or cargo install:**\n```json\n{\n  \"mcpServers\": {\n    \"video-transcriber-mcp\": {\n      \"command\": \"video-transcriber-mcp\",\n      \"args\": [],\n      \"env\": {\n        \"RUST_LOG\": \"info\"\n      }\n    }\n  }\n}\n```\n\n**Option 2: If built from source:**\n```json\n{\n  \"mcpServers\": {\n    \"video-transcriber-mcp\": {\n      \"command\": \"/absolute/path/to/video-transcriber-mcp-rs/target/release/video-transcriber-mcp\",\n      \"args\": [],\n      \"env\": {\n        \"RUST_LOG\": \"info\"\n      }\n    }\n  }\n}\n```\n\nThen use in Claude Code:\n\n**Basic transcription (uses base model by default):**\n```\nPlease transcribe this YouTube video: https://www.youtube.com/watch?v=VIDEO_ID\n```\n\n**Transcribe with specific model:**\n```\nTranscribe this video using the large model for best accuracy:\nhttps://www.youtube.com/watch?v=VIDEO_ID\n```\n\n**Transcribe local video file:**\n```\nTranscribe this local video file: /Users/myname/Videos/meeting.mp4\n```\n\n**Transcribe in specific language:**\n```\nTranscribe this Spanish video: https://www.youtube.com/watch?v=VIDEO_ID\n(language: es, model: medium)\n```\n\n## 📊 Performance\n\n### Expected Performance Characteristics\n\nBased on whisper.cpp vs OpenAI Whisper benchmarks from the community:\n\n**Transcription Speed** (approximate, varies by hardware):\n- whisper.cpp is typically **2-6x faster** than Python Whisper\n- Faster startup time (no Python interpreter overhead)\n- Lower memory footprint (no Python runtime)\n\n**Real-world factors that affect performance:**\n- CPU: More cores = faster processing\n- Model size: Tiny is fastest, Large is slowest but most accurate\n- Video length: Longer videos take proportionally more time\n- Audio complexity: Clear speech transcribes faster than noisy audio\n\n### Want to help?\n\nWe're collecting real benchmark data! If you run both versions, please share your results:\n- Hardware specs (CPU, RAM)\n- Video length tested\n- Model used\n- Time taken for each version\n\nOpen an issue with your benchmark results to help improve this section!\n\n## 🎛️ Model Comparison\n\n| Model | Speed | Accuracy | Memory | Use Case |\n|-------|-------|----------|--------|----------|\n| **tiny** | ⚡⚡⚡⚡⚡ | ⭐⭐ | ~400 MB | Quick drafts, testing |\n| **base** | ⚡⚡⚡⚡ | ⭐⭐⭐ | ~600 MB | General use (default) |\n| **small** | ⚡⚡⚡ | ⭐⭐⭐⭐ | ~1.2 GB | Better accuracy |\n| **medium** | ⚡⚡ | ⭐⭐⭐⭐⭐ | ~2.5 GB | High accuracy |\n| **large** | ⚡ | ⭐⭐⭐⭐⭐⭐ | ~4.8 GB | Best accuracy, slowest |\n\n## 🌍 Supported Platforms\n\nThanks to yt-dlp, this tool supports **1000+ video platforms** including:\n\n- **Social Media**: YouTube, TikTok, Twitter/X, Facebook, Instagram, Reddit\n- **Video Hosting**: Vimeo, Dailymotion, Twitch\n- **Educational**: Coursera, Udemy, Khan Academy, edX\n- **News**: BBC, CNN, NBC, PBS\n- **And 1000+ more!**\n\n## 📝 Output Format\n\nFor each video, three files are generated in `~/Downloads/video-transcripts/`:\n\n```\nvideo-id-title.txt   # Plain text transcript\nvideo-id-title.json  # JSON with metadata and timestamps\nvideo-id-title.md    # Markdown with video info\n```\n\n### Example Output\n\n```markdown\n# How to Build Fast Software\n\n**Video:** https://www.youtube.com/watch?v=example\n**Platform:** YouTube\n**Channel:** Tech Channel\n**Duration:** 600s\n\n---\n\n## Transcript\n\nThe key to building fast software is understanding...\n\n---\n\n*Transcribed using whisper.cpp (Rust) - Model: base*\n```\n\n## 🔧 Configuration\n\n### Environment Variables\n\nAll environment variables are optional. The transcriber works with none of them set; they unlock authentication, remote inference, AI summaries, and the paid HTTP API.\n\n> 💡 The transcript **output directory** is not an env var — pass `output_dir` to the `transcribe_video` tool (defaults to `~/Downloads/video-transcripts`). Output files are named `<video_id>-<title>.{txt,json,md}`.\n\n#### Remote MCP access (`--transport http`)\n\nThe HTTP transport only answers requests whose `Host` header is on an\nallowlist. It defaults to loopback (`localhost`, `127.0.0.1`, `::1`) as\nprotection against [DNS rebinding][dns-rebinding], which means a deployed\ninstance rejects its own public hostname with `403` until you name it:\n\n```bash\n# Comma-separated. Added on top of the loopback defaults, so local\n# development and health checks keep working.\nexport MCP_ALLOWED_HOSTS=mcp.example.com,mcp.example.com:8080\n\n# On Fly:\nfly secrets set MCP_ALLOWED_HOSTS=your-app.fly.dev\n```\n\nLeave it unset for local use — the server logs which hosts it accepts at\nstartup, so a `403` from a remote client is easy to diagnose.\n\n> ⚠️ This controls **reachability, not authorization**. Anyone who can reach\n> the URL can call the tools, including `transcribe_video`, which spends real\n> money when remote Whisper / OpenRouter are configured. Put an\n> authenticating proxy in front of a public deployment.\n\n\n#### Downloading (yt-dlp cookies)\n\nNeeded only for age-restricted / members-only videos or YouTube's \"Sign in to confirm you're not a bot\" challenge.\n\n```bash\n# Option 1 (preferred on headless / Linux): a Netscape-format cookies file.\n# Export it however you like — e.g. a QR-login flow — then point at it.\nexport YT_DLP_COOKIES=/path/to/cookies.txt\n\n# Option 2: read cookies straight from a logged-in local browser.\n# One of: chrome, brave, edge, firefox, safari, chromium, opera, vivaldi.\n# Ignored when YT_DLP_COOKIES is set.\nexport YT_DLP_COOKIES_FROM_BROWSER=chrome\n```\n\n#### Remote Whisper (offload transcription)\n\n```bash\n# POST audio to a remote HTTP worker (e.g. a serverless GPU) instead of\n# running whisper-rs locally. Endpoint must accept multipart {audio, model,\n# language} and return JSON {transcript, segments[], language, duration_s}.\nexport REMOTE_WHISPER_URL=https://your-worker.example.com/transcribe\n```\n\n## 🧪 Development\n\n### Build\n\n```bash\n# Debug build\ncargo build\n\n# Release build (optimized)\ncargo build --release\n\n# Run tests\ncargo test\n\n# Run with logging\nRUST_LOG=debug cargo run -- --url \"https://youtube.com/watch?v=example\"\n```\n\n### Project Structure\n\n```\nsrc/\n├── main.rs           # CLI + transport selection (stdio / streamable HTTP)\n├── lib.rs            # public API for embedders\n├── mcp/              # MCP server: tool definitions and handlers\n├── transcriber/      # the pipeline: yt-dlp → ffmpeg → whisper.cpp\n├── embeddings.rs     # passage embeddings, used by `search_transcripts`\n└── utils/            # paths\n```\n\nThis crate is only the transcription pipeline and its MCP surface. The product\nbuilt on top of it — REST API, accounts, credits, payments, AI summaries and\ndiagrams — lives in a separate private crate that depends on this one as a\nlibrary, so `cargo install video-transcriber-mcp` gets you a transcription\nserver rather than somebody else's SaaS backend.\n\n\n## 🤝 Contributing\n\nContributions welcome! Please:\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests if applicable\n5. Submit a pull request\n\n## 🙏 Acknowledgments\n\n- [whisper.cpp](https://github.com/ggerganov/whisper.cpp) - Fast C++ implementation of Whisper\n- [whisper-rs](https://codeberg.org/tazz4843/whisper-rs) - Rust bindings for whisper.cpp\n- [yt-dlp](https://github.com/yt-dlp/yt-dlp) - Video downloader for 1000+ platforms\n- [OpenAI Whisper](https://github.com/openai/whisper) - Original speech recognition model\n- [Model Context Protocol SDK](https://github.com/modelcontextprotocol/rust-sdk) - Rust SDK for MCP\n\n## 🆚 Comparison with TypeScript Version\n\nI built the original [video-transcriber-mcp](https://github.com/nhatvu148/video-transcriber-mcp) in TypeScript. Here's why I rewrote it in Rust:\n\n| Aspect | TypeScript Version | **Rust Version** |\n|--------|-------------------|------------------|\n| Transcription Speed | 5 min for 10-min video | **50s (6x faster)** |\n| Memory Usage | ~2 GB | **~800 MB (2.5x less)** |\n| Startup Time | ~2s | **<100ms (20x faster)** |\n| Binary Size | N/A (Node.js runtime) | **~8 MB standalone** |\n| Dependencies | Node.js, Python, whisper | **Just yt-dlp, ffmpeg** |\n| CPU Usage | High (Python overhead) | **Lower (native code)** |\n\n**The Rust version is production-ready and significantly more efficient!**\n\n## 🔗 Links\n\n- [GitHub Repository](https://github.com/nhatvu148/video-transcriber-mcp-rs)\n- [TypeScript Version](https://github.com/nhatvu148/video-transcriber-mcp)\n- [Model Context Protocol](https://modelcontextprotocol.io)\n- [whisper.cpp](https://github.com/ggerganov/whisper.cpp)\n\n## License\n\nLicensed under either of\n\n- MIT license ([LICENSE-MIT](LICENSE-MIT))\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE))\n\nat your option.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n\n---\n\n**Built with ❤️ in Rust for maximum performance**\n\n<sub>MCP registry ownership token — crates.io strips HTML comments, so this line has to stay visible:</sub>\n\nmcp-name: io.github.nhatvu148/video-transcriber-mcp\n\n",
  "bytes": 15888,
  "sha": "73454339394c150f11885784149d86141b549e546aa0bd7b48cd6e350a8d8694",
  "repo_slug": "nhatvu148/video-transcriber-mcp-rs",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_nhatvu148_video_transcriber_mc_5df43da0/readme"
}