
DeepSRT
STDIOMCP server for YouTube video summarization via DeepSRT API
MCP server for YouTube video summarization via DeepSRT API
A Model Context Protocol (MCP) server that provides YouTube video summarization and transcript extraction functionality through integration with DeepSRT's API and direct YouTube caption access.
{ "mcpServers": { "deepsrt": { "type": "stdio", "command": "bunx", "args": [ "@deepsrt/deepsrt-mcp@latest", "--server" ] } } }
graph TB subgraph "MCP Client" Client[Claude Desktop / Cline] end subgraph "DeepSRT MCP Server" Server[MCP Server] SummaryTool[get_summary] TranscriptTool[get_transcript] Server --> SummaryTool Server --> TranscriptTool end subgraph "External APIs" YouTube[YouTube InnerTube API] DeepSRT[DeepSRT Worker API] Captions[YouTube Caption API] end Client --> Server SummaryTool --> YouTube SummaryTool --> DeepSRT TranscriptTool --> YouTube TranscriptTool --> Captions
sequenceDiagram participant User participant MCP as MCP Client participant Server as DeepSRT MCP Server participant YouTube as YouTube InnerTube API participant DeepSRT as DeepSRT Worker API participant Captions as YouTube Caption API Note over User,Captions: Summary Generation Flow User->>MCP: Request video summary MCP->>Server: get_summary(videoId, lang, mode) Server->>Server: Extract video ID from URL Server->>YouTube: POST /youtubei/v1/player Note right of YouTube: Get video metadata<br/>and caption tracks YouTube-->>Server: Video details + caption tracks Server->>Server: Select best caption track<br/>(manual > auto-generated) Server->>Server: Extract transcript argument<br/>from caption URL par Summary Request Server->>DeepSRT: GET /transcript2?action=summarize Note right of DeepSRT: X-Transcript-Arg header<br/>contains caption URL params DeepSRT-->>Server: Generated summary and Title Translation Server->>DeepSRT: GET /transcript2?action=translate DeepSRT-->>Server: Translated title end Server->>Server: Format markdown response<br/>with metadata + summary Server-->>MCP: Formatted summary response MCP-->>User: Display summary Note over User,Captions: Transcript Extraction Flow User->>MCP: Request video transcript MCP->>Server: get_transcript(videoId, lang) Server->>Server: Extract video ID from URL Server->>YouTube: POST /youtubei/v1/player YouTube-->>Server: Video details + caption tracks Server->>Server: Select best caption track<br/>for preferred language Server->>Captions: GET caption XML from baseUrl Captions-->>Server: Raw XML transcript Server->>Server: Parse XML transcript<br/>- Extract timestamps<br/>- Decode HTML entities<br/>- Format text Server->>Server: Generate markdown response<br/>with timestamps Server-->>MCP: Formatted transcript MCP-->>User: Display transcript with timestamps
get_summary
and get_transcript
tools<timedtext>
format[MM:SS]
formatworker.deepsrt.com
success
properties--key=value
and --key value
formats--mode bullet
now works correctly and generates bullet-point summariesbunx @deepsrt/deepsrt-mcp
works without installationDirect YouTube Integration
Real-time Processing
Direct YouTube Access
Caption Selection
Timestamp Formatting
%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#2496ED', 'secondaryColor': '#38B2AC', 'tertiaryColor': '#1F2937', 'mainBkg': '#111827', 'textColor': '#E5E7EB', 'lineColor': '#4B5563', 'noteTextColor': '#E5E7EB'}}}%% sequenceDiagram participant User participant MCP as MCP Client participant YouTube as YouTube API participant DeepSRT as DeepSRT API Note over User,DeepSRT: Summary Generation Flow (Direct Processing) User->>MCP: Request video summary MCP->>YouTube: Get video info & captions via InnerTube API YouTube-->>MCP: Return video details & caption tracks MCP->>YouTube: Fetch transcript XML from caption URL YouTube-->>MCP: Return raw transcript content MCP->>DeepSRT: Send transcript + metadata for summarization DeepSRT-->>MCP: Return generated summary MCP-->>User: Return formatted summary Note over User,DeepSRT: Transcript Extraction Flow (Direct) User->>MCP: Request video transcript MCP->>YouTube: Get video info & captions via InnerTube API YouTube-->>MCP: Return video details & caption tracks MCP->>YouTube: Fetch transcript XML from caption URL YouTube-->>MCP: Return raw transcript content MCP->>MCP: Parse & format transcript with timestamps MCP-->>User: Return formatted transcript with metadata
The DeepSRT MCP server provides a unified interface that handles both MCP server mode and CLI commands.
# MCP Server Mode (default - for Claude Desktop/Cline) bunx @deepsrt/deepsrt-mcp # Starts MCP server on stdio bunx @deepsrt/deepsrt-mcp --server # Explicit server mode # CLI Commands (direct usage) bunx @deepsrt/deepsrt-mcp get-transcript <video-url> [options] bunx @deepsrt/deepsrt-mcp get-summary <video-url> [options] # Help bunx @deepsrt/deepsrt-mcp --help
# Extract transcript with timestamps bunx @deepsrt/deepsrt-mcp get-transcript https://www.youtube.com/watch?v=dQw4w9WgXcQ bunx @deepsrt/deepsrt-mcp get-transcript dQw4w9WgXcQ --lang=en # Generate video summary bunx @deepsrt/deepsrt-mcp get-summary dQw4w9WgXcQ --lang=zh-tw --mode=bullet bunx @deepsrt/deepsrt-mcp get-summary https://youtu.be/dQw4w9WgXcQ --lang=ja
For easier access, install globally:
# Install globally npm install -g @deepsrt/deepsrt-mcp # MCP Server Mode deepsrt-mcp # Starts MCP server deepsrt-mcp --server # Explicit server mode # CLI Commands deepsrt-mcp get-transcript https://youtu.be/dQw4w9WgXcQ --lang=en deepsrt-mcp get-summary dQw4w9WgXcQ --lang=zh-tw --mode=narrative
bunx @deepsrt/deepsrt-mcp get-transcript <video-url> [options] Options: --lang=<language> Preferred language code for captions (default: en) --lang <language> Alternative format Examples: en, zh-tw, ja, es, fr Examples: bunx @deepsrt/deepsrt-mcp get-transcript https://www.youtube.com/watch?v=dQw4w9WgXcQ bunx @deepsrt/deepsrt-mcp get-transcript dQw4w9WgXcQ --lang=zh-tw bunx @deepsrt/deepsrt-mcp get-transcript https://youtu.be/dQw4w9WgXcQ --lang ja
bunx @deepsrt/deepsrt-mcp get-summary <video-url> [options] Options: --lang=<language> Target language for summary (default: zh-tw) --lang <language> Alternative format Examples: zh-tw, en, ja, es, fr --mode=<mode> Summary format (default: narrative) --mode <mode> Alternative format Options: narrative, bullet Examples: bunx @deepsrt/deepsrt-mcp get-summary https://www.youtube.com/watch?v=dQw4w9WgXcQ bunx @deepsrt/deepsrt-mcp get-summary dQw4w9WgXcQ --lang=en --mode=bullet bunx @deepsrt/deepsrt-mcp get-summary https://youtu.be/dQw4w9WgXcQ --lang ja --mode narrative
The CLI accepts multiple YouTube URL formats:
# Full YouTube URLs https://www.youtube.com/watch?v=dQw4w9WgXcQ https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=30s # Short URLs https://youtu.be/dQw4w9WgXcQ # Embed URLs https://www.youtube.com/embed/dQw4w9WgXcQ # Direct video IDs dQw4w9WgXcQ
bunx
--key=value
and --key value
formats supported# Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)
**Author:** Rick Astley
**Duration:** 3:33
**Captions:** English (manual)
## Transcript
[00:18] ♪ We're no strangers to love ♪
[00:22] ♪ You know the rules and so do I ♪
[00:27] ♪ A full commitment's what I'm thinking of ♪
...
# 瑞克·艾斯利 - 永遠不會放棄你
**Author:** Rick Astley
**Duration:** 3:33
**Language:** zh-tw
**Mode:** narrative
## Summary
這是一首經典的流行歌曲,表達了對愛情的承諾和忠誠...
# How Robots Are Helping Amazon Deliver on Prime Day
**Author:** Bloomberg Television
**Duration:** 5:45
**Language:** zh-tw
**Mode:** bullet
## Summary
本影片主要探討亞馬遜如何運用機器人技術來提升倉儲效率...
# 機器人技術在亞馬遜倉儲的應用與效益
- 亞馬遜已部署了第一百萬個機器人,並在Prime Day等高峰期用於滿足訂單需求 [00:00:00]
- 機器人旨在為員工提供安全且高生產力的工作環境 [00:00:30]
- 移動機器人可以搬運超過一千磅的貨物,並移動貨架以減少員工的行走距離 [00:00:54]
...
Use the unified interface directly without any installation:
# MCP Server Mode (for Claude Desktop/Cline) bunx @deepsrt/deepsrt-mcp # Default: starts MCP server bunx @deepsrt/deepsrt-mcp --server # Explicit server mode # CLI Commands (direct usage) bunx @deepsrt/deepsrt-mcp get-transcript https://www.youtube.com/watch?v=dQw4w9WgXcQ bunx @deepsrt/deepsrt-mcp get-summary dQw4w9WgXcQ --lang=zh-tw --mode=bullet # Always uses latest version automatically bunx @deepsrt/deepsrt-mcp@latest get-transcript dQw4w9WgXcQ --lang=en
# Install globally for easier access npm install -g @deepsrt/deepsrt-mcp # Then use directly with shorter command deepsrt-mcp get-transcript https://www.youtube.com/watch?v=dQw4w9WgXcQ deepsrt-mcp get-summary dQw4w9WgXcQ --lang zh-tw --mode bullet
Add this configuration to your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%/Claude/claude_desktop_config.json
{ "mcpServers": { "deepsrt": { "type": "stdio", "command": "bunx", "args": [ "@deepsrt/deepsrt-mcp@latest", "--server" ] } } }
This approach:
Add this configuration to your cline_mcp_settings.json
:
{ "mcpServers": { "deepsrt": { "type": "stdio", "command": "bunx", "args": [ "@deepsrt/deepsrt-mcp@latest", "--server" ] } } }
Or just ask Cline to install in the chat:
"Hey, install this MCP server for me from https://github.com/DeepSRT/deepsrt-mcp"
You can run the server directly with bunx without installation:
# Run from the project directory bunx --bun src/index.ts # Or use npm scripts npm run start:bun # Uses Bun npm run start:node # Uses Node.js npm run dev # Development mode with Bun
The server provides the following tools for MCP clients:
Gets a summary for a YouTube video.
Parameters:
videoId
(required): YouTube video IDlang
(optional): Language code (e.g., zh-tw) - defaults to zh-twmode
(optional): Summary mode ("narrative" or "bullet") - defaults to narrativeGets a transcript for a YouTube video with timestamps.
Parameters:
videoId
(required): YouTube video ID or full YouTube URLlang
(optional): Preferred language code for captions (e.g., en, zh-tw) - defaults to enUsing Claude Desktop:
// Get video summary const summaryResult = await mcp.use_tool("deepsrt", "get_summary", { videoId: "dQw4w9WgXcQ", lang: "zh-tw", mode: "narrative" }); // Get video transcript const transcriptResult = await mcp.use_tool("deepsrt", "get_transcript", { videoId: "dQw4w9WgXcQ", lang: "en" });
Using Cline:
// Get video summary const summaryResult = await mcp.use_tool("deepsrt", "get_summary", { videoId: "dQw4w9WgXcQ", lang: "zh-tw", mode: "bullet" }); // Get video transcript const transcriptResult = await mcp.use_tool("deepsrt", "get_transcript", { videoId: "https://www.youtube.com/watch?v=dQw4w9WgXcQ", lang: "en" });
Install dependencies:
npm install
# Run unit tests (fast, no network calls) npm test # Run unit tests only npm run test:unit # Run network tests (requires internet, may be slower) npm run test:network # Run all tests including network tests npm run test:all # Run tests in watch mode npm run test:watch # Run tests with CI reporter (for CI/CD) npm run test:ci
Test Types:
src/index.test.ts
, src/integration.test.ts
) - Fast tests with mocked datasrc/transcript.test.ts
, src/e2e.test.ts
) - Real YouTube API integration testsSee the examples/
directory for reference implementations:
examples/standalone-summarizer.ts
- Standalone script showing direct API usage patternsWith Bun (Recommended for development - faster startup):
# Development mode (runs TypeScript directly) npm run dev # or bun src/index.ts # Using npm script npm run start:bun
With Node.js (Production):
# Build first npm run build # Then run npm run start:node # or node build/index.js
You can test the server using the MCP inspector:
npm run inspector
Or test manually with JSON-RPC:
# List available tools echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | bun src/index.ts # Test get_transcript echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "get_transcript", "arguments": {"videoId": "dQw4w9WgXcQ", "lang": "en"}}}' | bun src/index.ts
Build for production:
npm run build
Watch mode for development:
npm run watch
Q: I am getting 404
error, why?
A: This is because the video summary is not cached in the CDN edge location, you need to open this video using DeepSRT chrome extension to have it cached in the CDN network before you can get that summary using MCP.
You can verify the cache status using cURL like this
curl -s 'https://worker.deepsrt.com/transcript' \ -i --data '{"arg":"v=VafNvIcOs5w","action":"summarize","lang":"zh-tw","mode":"narrative"}' | grep -i "^cache-status" cache-status: HIT
If you see cache-status: HIT
the content is cached in the CDN edge location and your MCP server shoud not get 404
.