@ignidor/web-search-mcp 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,12 +1,13 @@
1
1
  # @ignidor/web-search-mcp
2
2
 
3
- **Local, unlimited web-search MCP server with BM25 ranking and Playwright crawling.**
3
+ **Local, unlimited web-search MCP server with BM25 ranking, Playwright crawling, and YouTube transcripts.**
4
4
 
5
5
  - 🔍 **No API keys** - Uses free DuckDuckGo HTML search
6
6
  - 🚀 **No rate limits** - Unlimited searches, 24/7
7
7
  - 🐳 **No Docker** - Direct Playwright integration (optional)
8
8
  - 📊 **Smart ranking** - BM25 + hybrid scoring with freshness
9
9
  - 📄 **Full extraction** - 1000+ words per page (not 200-word snippets)
10
+ - 🎬 **YouTube transcripts** - Fast, robust extraction with yt-dlp
10
11
  - 💰 **100% Free** - Outperforms Brave Search, Tavily, commercial alternatives
11
12
 
12
13
  ---
@@ -18,6 +19,7 @@
18
19
  | `search` | Fast web search with BM25 ranking (DuckDuckGo) |
19
20
  | `crawl_and_extract` | Extract full content from URLs using Playwright |
20
21
  | `search_and_crawl` | Search + extract top results (one-stop research) |
22
+ | `get_youtube_transcript` | Get YouTube video transcript (yt-dlp, 1-5sec) ⭐ NEW |
21
23
  | `capture_screenshot` | Screenshot any webpage (base64 PNG) |
22
24
  | `generate_pdf` | Convert webpage to PDF (base64) |
23
25
  | `extract_structured` | CSS selector-based data extraction |
@@ -100,7 +102,39 @@ npx @ignidor/web-search-mcp
100
102
  - Complete code examples
101
103
  - Common pitfalls
102
104
 
103
- ### 3. Extract Structured Data
105
+ ### 3. Get YouTube Transcript ⭐ NEW
106
+
107
+ ```javascript
108
+ // Fast, reliable transcript extraction (1-5 seconds)
109
+ {
110
+ "name": "get_youtube_transcript",
111
+ "arguments": {
112
+ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
113
+ "language": "en",
114
+ "includeTimestamps": false,
115
+ "includeMetadata": true
116
+ }
117
+ }
118
+ ```
119
+
120
+ **Features:**
121
+ - Works with any video length (1 min or 10 hours - same speed!)
122
+ - Fetches existing captions (no audio processing)
123
+ - Multiple language support (en, es, fr, de, ja, ko, etc.)
124
+ - Optional timestamps: `[00:15] Text here`
125
+ - Metadata: title, duration, word count
126
+ - Uses yt-dlp (gold standard, 85k+ GitHub stars)
127
+
128
+ **Requirements:**
129
+ - Install yt-dlp: `brew install yt-dlp` (macOS) or `pip install yt-dlp`
130
+
131
+ **Supported URL formats:**
132
+ - Full URL: `https://www.youtube.com/watch?v=VIDEO_ID`
133
+ - Short URL: `https://youtu.be/VIDEO_ID`
134
+ - Shorts: `https://www.youtube.com/shorts/VIDEO_ID`
135
+ - Video ID only: `VIDEO_ID`
136
+
137
+ ### 4. Extract Structured Data
104
138
 
105
139
  ```javascript
106
140
  // Scrape product listings, articles, etc.
@@ -118,7 +152,7 @@ npx @ignidor/web-search-mcp
118
152
  }
119
153
  ```
120
154
 
121
- ### 4. Execute JavaScript
155
+ ### 5. Execute JavaScript
122
156
 
123
157
  ```javascript
124
158
  // Great for dynamic content, debugging
@@ -135,7 +169,7 @@ npx @ignidor/web-search-mcp
135
169
  }
136
170
  ```
137
171
 
138
- ### 5. Screenshot
172
+ ### 6. Screenshot
139
173
 
140
174
  ```javascript
141
175
  {
package/dist/index.d.ts CHANGED
@@ -36,4 +36,14 @@ export interface SearchWithFiltersArgs extends SearchArgs {
36
36
  language?: string;
37
37
  region?: string;
38
38
  }
39
+ export interface YouTubeTranscriptArgs {
40
+ url: string;
41
+ language?: string;
42
+ includeTimestamps?: boolean;
43
+ includeMetadata?: boolean;
44
+ timeRange?: string;
45
+ searchKeywords?: string;
46
+ contextLines?: number;
47
+ maxWords?: number;
48
+ }
39
49
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA4BA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC1C,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACzC,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA6BA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC1C,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACzC,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ import { BM25Ranker, HybridRanker } from './ranking.js';
8
8
  import { crawlWithPlaywright, captureScreenshot, generatePDF, executeJS, extractStructured, extractRegex } from './playwright-crawler.js';
9
9
  import { isValidQuery, clamp } from './utils/validators.js';
10
10
  import { processBatchWithErrorHandling } from './utils/concurrency.js';
11
+ import { getYouTubeTranscript, formatTranscriptWithTimestamps } from './youtube-transcript.js';
11
12
  // ============================================================================
12
13
  // MCP Server
13
14
  // ============================================================================
@@ -215,6 +216,52 @@ class WebSearchServer {
215
216
  required: ['url'],
216
217
  },
217
218
  },
219
+ {
220
+ name: 'get_youtube_transcript',
221
+ description: '🎬 Get YouTube video transcript using yt-dlp (most robust). Fast, free, no API key. Works with any video length. SMART EXTRACTION: Use timeRange for long videos (e.g., "40:00-45:00"), searchKeywords to find specific topics, or maxWords to limit output.',
222
+ inputSchema: {
223
+ type: 'object',
224
+ properties: {
225
+ url: {
226
+ type: 'string',
227
+ description: 'YouTube video URL or video ID (e.g., https://www.youtube.com/watch?v=dQw4w9WgXcQ or dQw4w9WgXcQ)',
228
+ },
229
+ language: {
230
+ type: 'string',
231
+ description: 'Preferred language code (default: en). Examples: en, es, fr, de, ja, ko',
232
+ default: 'en'
233
+ },
234
+ includeTimestamps: {
235
+ type: 'boolean',
236
+ description: 'Include timestamps with transcript lines (default: false)',
237
+ default: false
238
+ },
239
+ includeMetadata: {
240
+ type: 'boolean',
241
+ description: 'Include video metadata (title, duration) (default: true)',
242
+ default: true
243
+ },
244
+ timeRange: {
245
+ type: 'string',
246
+ description: '⏱️ Extract ONLY specific time range (e.g., "10:30-15:45" or "630-945" seconds). Perfect for long videos - get just the section you need!',
247
+ },
248
+ searchKeywords: {
249
+ type: 'string',
250
+ description: '🔍 Find and extract context around keywords (comma-separated). Returns only relevant segments. Example: "authentication,JWT,bug fix"',
251
+ },
252
+ contextLines: {
253
+ type: 'number',
254
+ description: 'Lines of context around keyword matches (default: 10). Use with searchKeywords.',
255
+ default: 10
256
+ },
257
+ maxWords: {
258
+ type: 'number',
259
+ description: '📏 Maximum words to return. Auto-truncates if transcript exceeds this. Use for token budget control. Example: 5000',
260
+ }
261
+ },
262
+ required: ['url'],
263
+ },
264
+ },
218
265
  ],
219
266
  }));
220
267
  this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
@@ -237,6 +284,8 @@ class WebSearchServer {
237
284
  return await this.handleExecuteJS(args);
238
285
  case 'extract_regex':
239
286
  return await this.handleExtractRegex(args);
287
+ case 'get_youtube_transcript':
288
+ return await this.handleYouTubeTranscript(args);
240
289
  default:
241
290
  throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
242
291
  }
@@ -544,6 +593,96 @@ class WebSearchServer {
544
593
  isError: true,
545
594
  };
546
595
  }
596
+ async handleYouTubeTranscript(args) {
597
+ const { url, language = 'en', includeTimestamps = false, includeMetadata = true, timeRange, searchKeywords, contextLines = 10, maxWords } = args;
598
+ console.error(`[MCP] Fetching YouTube transcript: ${url} (lang: ${language})`);
599
+ const result = await getYouTubeTranscript(url, {
600
+ language,
601
+ includeTimestamps,
602
+ includeMetadata,
603
+ tryFallbackLanguages: true,
604
+ timeRange,
605
+ searchKeywords,
606
+ contextLines,
607
+ maxWords
608
+ });
609
+ if (!result.success) {
610
+ let errorMsg = `❌ Failed to get transcript\n\n`;
611
+ errorMsg += `**Error:** ${result.error}\n`;
612
+ if (result.errorCode)
613
+ errorMsg += `**Code:** ${result.errorCode}\n`;
614
+ if (result.videoId)
615
+ errorMsg += `**Video ID:** ${result.videoId}\n`;
616
+ if (result.fetchTimeMs)
617
+ errorMsg += `**Time:** ${result.fetchTimeMs}ms\n`;
618
+ // Add helpful suggestions
619
+ errorMsg += `\n**Suggestions:**\n`;
620
+ if (result.errorCode === 'NO_CAPTIONS') {
621
+ errorMsg += `- Video may not have subtitles enabled\n`;
622
+ errorMsg += `- Try a different language (es, fr, de, ja)\n`;
623
+ errorMsg += `- Check if the video is age-restricted or private\n`;
624
+ }
625
+ else if (result.errorCode === 'YTDLP_NOT_FOUND') {
626
+ errorMsg += `- Install yt-dlp: \`brew install yt-dlp\` (macOS)\n`;
627
+ errorMsg += `- Or: \`pip install yt-dlp\`\n`;
628
+ }
629
+ else if (result.errorCode === 'INVALID_URL') {
630
+ errorMsg += `- Use format: https://www.youtube.com/watch?v=VIDEO_ID\n`;
631
+ errorMsg += `- Or: https://youtu.be/VIDEO_ID\n`;
632
+ errorMsg += `- Or just the 11-character video ID\n`;
633
+ }
634
+ return {
635
+ content: [{ type: 'text', text: errorMsg }],
636
+ isError: true,
637
+ };
638
+ }
639
+ // Format successful output
640
+ let output = `🎬 **YouTube Transcript**\n\n`;
641
+ // Metadata section
642
+ if (result.videoTitle) {
643
+ output += `📺 **Title:** ${result.videoTitle}\n`;
644
+ }
645
+ if (result.videoId) {
646
+ output += `🔗 **Video:** https://youtube.com/watch?v=${result.videoId}\n`;
647
+ }
648
+ if (result.durationFormatted) {
649
+ output += `⏱️ **Duration:** ${result.durationFormatted}\n`;
650
+ }
651
+ if (result.wordCount) {
652
+ output += `📝 **Words:** ${result.wordCount.toLocaleString()}`;
653
+ if (result.charCount)
654
+ output += ` (${result.charCount.toLocaleString()} chars)`;
655
+ output += `\n`;
656
+ }
657
+ if (result.languageUsed) {
658
+ output += `🌍 **Language:** ${result.languageUsed}`;
659
+ if (result.languageUsed !== language) {
660
+ output += ` (fallback from ${language})`;
661
+ }
662
+ output += `\n`;
663
+ }
664
+ if (result.isFiltered && result.filterInfo) {
665
+ output += `🔍 **Filter:** ${result.filterInfo}\n`;
666
+ if (result.matchCount) {
667
+ output += `✅ **Matches:** ${result.matchCount}\n`;
668
+ }
669
+ }
670
+ if (result.fetchTimeMs) {
671
+ output += `⚡ **Fetched in:** ${result.fetchTimeMs}ms\n`;
672
+ }
673
+ output += `\n---\n\n`;
674
+ // Transcript content
675
+ if (includeTimestamps && result.transcriptLines && result.transcriptLines.length > 0) {
676
+ output += `**📜 Transcript (${result.transcriptLines.length} segments):**\n\n`;
677
+ output += formatTranscriptWithTimestamps(result.transcriptLines);
678
+ }
679
+ else if (result.transcript) {
680
+ output += `**📜 Transcript:**\n\n${result.transcript}`;
681
+ }
682
+ return {
683
+ content: [{ type: 'text', text: output }],
684
+ };
685
+ }
547
686
  // ========================================================================
548
687
  // Run Server
549
688
  // ========================================================================
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ export interface TranscriptLine {
2
+ start: number;
3
+ duration: number;
4
+ text: string;
5
+ }
6
+ export interface TranscriptResult {
7
+ success: boolean;
8
+ videoId?: string;
9
+ videoTitle?: string;
10
+ videoUrl?: string;
11
+ transcript?: string;
12
+ transcriptLines?: TranscriptLine[];
13
+ language?: string;
14
+ languageUsed?: string;
15
+ wordCount?: number;
16
+ charCount?: number;
17
+ durationSec?: number;
18
+ durationFormatted?: string;
19
+ error?: string;
20
+ errorCode?: string;
21
+ provider?: string;
22
+ fetchTimeMs?: number;
23
+ isFiltered?: boolean;
24
+ filterInfo?: string;
25
+ matchCount?: number;
26
+ }
27
+ export declare function extractVideoId(url: string): string | null;
28
+ export declare function checkYtDlpInstalled(): Promise<{
29
+ installed: boolean;
30
+ version?: string;
31
+ error?: string;
32
+ }>;
33
+ export declare function getYouTubeTranscript(url: string, options?: {
34
+ language?: string;
35
+ includeTimestamps?: boolean;
36
+ includeMetadata?: boolean;
37
+ timeout?: number;
38
+ tryFallbackLanguages?: boolean;
39
+ timeRange?: string;
40
+ searchKeywords?: string;
41
+ contextLines?: number;
42
+ maxWords?: number;
43
+ }): Promise<TranscriptResult>;
44
+ export declare function formatTranscriptWithTimestamps(lines: TranscriptLine[]): string;
45
+ export declare function getAvailableLanguages(url: string): Promise<{
46
+ success: boolean;
47
+ languages?: string[];
48
+ error?: string;
49
+ }>;
50
+ //# sourceMappingURL=youtube-transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube-transcript.d.ts","sourceRoot":"","sources":["../src/youtube-transcript.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmCzD;AAqED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB7G;AA2CD,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,gBAAgB,CAAC,CA0P3B;AAGD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,CAc9E;AAGD,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB5H"}
@@ -0,0 +1,478 @@
1
+ // YouTube Transcript Extractor using yt-dlp (MOST ROBUST)
2
+ // Production-grade implementation with retry logic, fallbacks, and deduplication
3
+ import { exec } from 'child_process';
4
+ import { promisify } from 'util';
5
+ import * as fs from 'fs/promises';
6
+ import * as path from 'path';
7
+ import * as os from 'os';
8
+ const execAsync = promisify(exec);
9
+ // Constants
10
+ const DEFAULT_TIMEOUT = 45000; // 45 seconds
11
+ const MAX_RETRIES = 2;
12
+ const RETRY_DELAY = 1000; // 1 second
13
+ const FALLBACK_LANGUAGES = ['en', 'en-US', 'en-GB', 'a.en']; // Auto-generated English
14
+ // Utility: Sleep for retry delays
15
+ const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
16
+ // Utility: Format duration in HH:MM:SS or MM:SS
17
+ function formatDuration(seconds) {
18
+ const hrs = Math.floor(seconds / 3600);
19
+ const mins = Math.floor((seconds % 3600) / 60);
20
+ const secs = Math.floor(seconds % 60);
21
+ if (hrs > 0) {
22
+ return `${hrs}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
23
+ }
24
+ return `${mins}:${secs.toString().padStart(2, '0')}`;
25
+ }
26
+ // Utility: Parse time range string to seconds
27
+ function parseTimeRange(timeRange) {
28
+ try {
29
+ const parts = timeRange.split('-');
30
+ if (parts.length !== 2)
31
+ return { start: null, end: null };
32
+ const parseTime = (timeStr) => {
33
+ timeStr = timeStr.trim();
34
+ // Try as plain number (seconds)
35
+ if (/^\d+$/.test(timeStr)) {
36
+ return parseInt(timeStr, 10);
37
+ }
38
+ // Try as HH:MM:SS or MM:SS
39
+ const timeParts = timeStr.split(':').map(p => parseInt(p, 10));
40
+ if (timeParts.some(isNaN))
41
+ return null;
42
+ if (timeParts.length === 2) {
43
+ // MM:SS
44
+ return timeParts[0] * 60 + timeParts[1];
45
+ }
46
+ else if (timeParts.length === 3) {
47
+ // HH:MM:SS
48
+ return timeParts[0] * 3600 + timeParts[1] * 60 + timeParts[2];
49
+ }
50
+ return null;
51
+ };
52
+ const start = parseTime(parts[0]);
53
+ const end = parseTime(parts[1]);
54
+ return { start, end };
55
+ }
56
+ catch {
57
+ return { start: null, end: null };
58
+ }
59
+ }
60
+ // Utility: Safe cleanup of temp directory
61
+ async function safeCleanup(tempDir) {
62
+ try {
63
+ await fs.rm(tempDir, { recursive: true, force: true });
64
+ }
65
+ catch (e) {
66
+ console.error('[YouTube Transcript] Cleanup warning:', e);
67
+ }
68
+ }
69
+ // Extract video ID from various YouTube URL formats
70
+ export function extractVideoId(url) {
71
+ // Trim and clean input
72
+ url = url.trim();
73
+ // Handle direct video ID (11 chars, alphanumeric with - and _)
74
+ if (url.length === 11 && /^[a-zA-Z0-9_-]{11}$/.test(url)) {
75
+ return url;
76
+ }
77
+ // Comprehensive URL patterns - all require exactly 11 char video ID
78
+ const patterns = [
79
+ // Standard watch URLs
80
+ /(?:youtube\.com\/watch\?(?:.*&)?v=)([a-zA-Z0-9_-]{11})(?:[&?#]|$)/,
81
+ // Short URLs
82
+ /youtu\.be\/([a-zA-Z0-9_-]{11})(?:[?#]|$)/,
83
+ // Embed URLs
84
+ /youtube\.com\/embed\/([a-zA-Z0-9_-]{11})(?:[?#]|$)/,
85
+ // Shorts
86
+ /youtube\.com\/shorts\/([a-zA-Z0-9_-]{11})(?:[?#]|$)/,
87
+ // Live
88
+ /youtube\.com\/live\/([a-zA-Z0-9_-]{11})(?:[?#]|$)/,
89
+ // Attribution links
90
+ /youtube\.com\/attribution_link\?.*v%3D([a-zA-Z0-9_-]{11})/,
91
+ // V parameter anywhere in URL (stricter)
92
+ /[?&]v=([a-zA-Z0-9_-]{11})(?:[&?#]|$)/,
93
+ // Music YouTube
94
+ /music\.youtube\.com\/watch\?(?:.*&)?v=([a-zA-Z0-9_-]{11})(?:[&?#]|$)/,
95
+ ];
96
+ for (const pattern of patterns) {
97
+ const match = url.match(pattern);
98
+ if (match && match[1] && match[1].length === 11)
99
+ return match[1];
100
+ }
101
+ return null;
102
+ }
103
+ // Parse VTT subtitle format with deduplication
104
+ function parseVTT(vttContent) {
105
+ const lines = [];
106
+ const seenTexts = new Set(); // For deduplication
107
+ const blocks = vttContent.split('\n\n').filter(block => block.trim());
108
+ for (const block of blocks) {
109
+ const blockLines = block.split('\n');
110
+ // VTT format: timestamp line + text lines
111
+ const timestampLine = blockLines.find(line => line.includes('-->'));
112
+ if (!timestampLine)
113
+ continue;
114
+ // Parse "00:00:00.000 --> 00:00:05.000" (may have position info after)
115
+ const timestampMatch = timestampLine.match(/(\d{1,2}:)?(\d{2}):(\d{2})[.,](\d{3})\s*-->\s*(\d{1,2}:)?(\d{2}):(\d{2})[.,](\d{3})/);
116
+ if (!timestampMatch)
117
+ continue;
118
+ const [startStr, endStr] = timestampLine.split('-->').map(s => s.trim().split(' ')[0]);
119
+ const start = parseTimestamp(startStr);
120
+ const end = parseTimestamp(endStr);
121
+ // Get text (skip timestamp line and cue numbers)
122
+ const text = blockLines
123
+ .filter(line => !line.includes('-->') && !line.match(/^\d+$/) && !line.startsWith('WEBVTT'))
124
+ .join(' ')
125
+ .replace(/<[^>]+>/g, '') // Remove HTML/VTT tags like <c>, </c>, <00:00:01.234>
126
+ .replace(/&nbsp;/g, ' ')
127
+ .replace(/&amp;/g, '&')
128
+ .replace(/&lt;/g, '<')
129
+ .replace(/&gt;/g, '>')
130
+ .replace(/\s+/g, ' ') // Normalize whitespace
131
+ .trim();
132
+ // Skip empty or duplicate consecutive lines (common in auto-captions)
133
+ if (text && !seenTexts.has(text)) {
134
+ seenTexts.add(text);
135
+ lines.push({
136
+ start,
137
+ duration: end - start,
138
+ text
139
+ });
140
+ }
141
+ }
142
+ return lines;
143
+ }
144
+ // Parse timestamp "00:01:23.456" to seconds
145
+ function parseTimestamp(timestamp) {
146
+ const parts = timestamp.split(':');
147
+ let seconds = 0;
148
+ if (parts.length === 3) {
149
+ // HH:MM:SS.mmm
150
+ seconds = parseInt(parts[0]) * 3600 + parseInt(parts[1]) * 60 + parseFloat(parts[2]);
151
+ }
152
+ else if (parts.length === 2) {
153
+ // MM:SS.mmm
154
+ seconds = parseInt(parts[0]) * 60 + parseFloat(parts[1]);
155
+ }
156
+ else {
157
+ // SS.mmm
158
+ seconds = parseFloat(parts[0]);
159
+ }
160
+ return seconds;
161
+ }
162
+ // Check if yt-dlp is installed
163
+ export async function checkYtDlpInstalled() {
164
+ try {
165
+ const { stdout } = await execAsync('yt-dlp --version', { timeout: 5000 });
166
+ return {
167
+ installed: true,
168
+ version: stdout.trim()
169
+ };
170
+ }
171
+ catch (error) {
172
+ // Try common install paths
173
+ const paths = ['/opt/homebrew/bin/yt-dlp', '/usr/local/bin/yt-dlp', '/usr/bin/yt-dlp'];
174
+ for (const ytPath of paths) {
175
+ try {
176
+ const { stdout } = await execAsync(`"${ytPath}" --version`, { timeout: 5000 });
177
+ return { installed: true, version: stdout.trim() };
178
+ }
179
+ catch {
180
+ continue;
181
+ }
182
+ }
183
+ return {
184
+ installed: false,
185
+ error: 'yt-dlp not found in PATH. Install: brew install yt-dlp (macOS) or pip install yt-dlp'
186
+ };
187
+ }
188
+ }
189
+ // Internal: Execute yt-dlp with retry
190
+ async function executeYtDlp(videoUrl, subtitlePath, language, timeout) {
191
+ const command = `yt-dlp --write-auto-sub --write-sub --sub-lang ${language} --skip-download --sub-format vtt --print-json -o "${subtitlePath}" "${videoUrl}"`;
192
+ for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
193
+ try {
194
+ console.error(`[YouTube Transcript] Attempt ${attempt}/${MAX_RETRIES}: ${language}`);
195
+ const { stdout, stderr } = await execAsync(command, {
196
+ timeout,
197
+ maxBuffer: 15 * 1024 * 1024, // 15MB buffer
198
+ env: { ...process.env, PYTHONIOENCODING: 'utf-8' }
199
+ });
200
+ return { stdout, stderr, success: true };
201
+ }
202
+ catch (error) {
203
+ const errMsg = error?.message || String(error);
204
+ console.error(`[YouTube Transcript] Attempt ${attempt} failed: ${errMsg.substring(0, 100)}`);
205
+ // Don't retry on certain errors
206
+ if (errMsg.includes('Video unavailable') ||
207
+ errMsg.includes('Private video') ||
208
+ errMsg.includes('Sign in to confirm')) {
209
+ return { stdout: '', stderr: errMsg, success: false, error: errMsg };
210
+ }
211
+ if (attempt < MAX_RETRIES) {
212
+ await sleep(RETRY_DELAY * attempt);
213
+ }
214
+ else {
215
+ return { stdout: '', stderr: errMsg, success: false, error: errMsg };
216
+ }
217
+ }
218
+ }
219
+ return { stdout: '', stderr: 'Max retries exceeded', success: false, error: 'Max retries exceeded' };
220
+ }
221
+ // Get YouTube transcript using yt-dlp
222
+ export async function getYouTubeTranscript(url, options) {
223
+ const startTime = Date.now();
224
+ const { language = 'en', includeTimestamps = false, includeMetadata = true, timeout = DEFAULT_TIMEOUT, tryFallbackLanguages = true, timeRange, searchKeywords, contextLines = 10, maxWords } = options || {};
225
+ let tempDir = null;
226
+ try {
227
+ // Validate and extract video ID
228
+ const videoId = extractVideoId(url);
229
+ if (!videoId) {
230
+ return {
231
+ success: false,
232
+ error: 'Invalid YouTube URL. Supported formats: youtube.com/watch?v=ID, youtu.be/ID, youtube.com/shorts/ID',
233
+ errorCode: 'INVALID_URL'
234
+ };
235
+ }
236
+ // Check yt-dlp installation
237
+ const ytdlpCheck = await checkYtDlpInstalled();
238
+ if (!ytdlpCheck.installed) {
239
+ return {
240
+ success: false,
241
+ error: ytdlpCheck.error || 'yt-dlp not installed',
242
+ errorCode: 'YTDLP_NOT_FOUND'
243
+ };
244
+ }
245
+ // Create temp directory
246
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'yt-transcript-'));
247
+ const subtitlePath = path.join(tempDir, `${videoId}.%(ext)s`);
248
+ const videoUrl = `https://www.youtube.com/watch?v=${videoId}`;
249
+ console.error(`[YouTube Transcript] Fetching: ${videoId} (lang: ${language})`);
250
+ // Build language list: requested + fallbacks
251
+ const languagesToTry = [language];
252
+ if (tryFallbackLanguages && !FALLBACK_LANGUAGES.includes(language)) {
253
+ languagesToTry.push(...FALLBACK_LANGUAGES);
254
+ }
255
+ let execResult = null;
256
+ let languageUsed = language;
257
+ // Try each language until we get captions
258
+ for (const lang of languagesToTry) {
259
+ execResult = await executeYtDlp(videoUrl, subtitlePath, lang, timeout);
260
+ if (execResult.success) {
261
+ // Check if subtitle file was created
262
+ const files = await fs.readdir(tempDir);
263
+ const vttFile = files.find(f => f.endsWith('.vtt'));
264
+ if (vttFile) {
265
+ languageUsed = lang;
266
+ break;
267
+ }
268
+ }
269
+ // Clean temp for next attempt
270
+ const files = await fs.readdir(tempDir);
271
+ for (const file of files) {
272
+ await fs.unlink(path.join(tempDir, file)).catch(() => { });
273
+ }
274
+ }
275
+ if (!execResult?.success) {
276
+ await safeCleanup(tempDir);
277
+ return {
278
+ success: false,
279
+ videoId,
280
+ videoUrl,
281
+ error: execResult?.error || 'Failed to fetch transcript',
282
+ errorCode: 'FETCH_FAILED',
283
+ fetchTimeMs: Date.now() - startTime
284
+ };
285
+ }
286
+ // Parse metadata from JSON output
287
+ let videoTitle = '';
288
+ let durationSec = 0;
289
+ if (includeMetadata && execResult.stdout.trim()) {
290
+ try {
291
+ // Handle potential multiple JSON objects (yt-dlp can output multiple)
292
+ const jsonLines = execResult.stdout.trim().split('\n');
293
+ for (const line of jsonLines) {
294
+ try {
295
+ const metadata = JSON.parse(line);
296
+ if (metadata.title)
297
+ videoTitle = metadata.title;
298
+ if (metadata.duration)
299
+ durationSec = metadata.duration;
300
+ break; // Use first valid JSON
301
+ }
302
+ catch {
303
+ continue;
304
+ }
305
+ }
306
+ }
307
+ catch (e) {
308
+ console.error('[YouTube Transcript] Metadata parse warning:', e);
309
+ }
310
+ }
311
+ // Find the downloaded subtitle file
312
+ const files = await fs.readdir(tempDir);
313
+ const vttFile = files.find(f => f.endsWith('.vtt'));
314
+ if (!vttFile) {
315
+ await safeCleanup(tempDir);
316
+ return {
317
+ success: false,
318
+ videoId,
319
+ videoUrl,
320
+ videoTitle: videoTitle || undefined,
321
+ error: `No captions available. Video may not have subtitles in: ${languagesToTry.join(', ')}`,
322
+ errorCode: 'NO_CAPTIONS',
323
+ fetchTimeMs: Date.now() - startTime
324
+ };
325
+ }
326
+ // Read and parse VTT file
327
+ const vttPath = path.join(tempDir, vttFile);
328
+ const vttContent = await fs.readFile(vttPath, 'utf-8');
329
+ // Parse VTT with deduplication
330
+ const transcriptLines = parseVTT(vttContent);
331
+ if (transcriptLines.length === 0) {
332
+ await safeCleanup(tempDir);
333
+ return {
334
+ success: false,
335
+ videoId,
336
+ videoUrl,
337
+ videoTitle: videoTitle || undefined,
338
+ error: 'Caption file was empty or could not be parsed',
339
+ errorCode: 'PARSE_FAILED',
340
+ fetchTimeMs: Date.now() - startTime
341
+ };
342
+ }
343
+ // Generate clean transcript text
344
+ let filteredLines = transcriptLines;
345
+ let filterInfo = '';
346
+ let matchCount = 0;
347
+ let isFiltered = false;
348
+ // Apply time-range filter
349
+ if (timeRange) {
350
+ const { start, end } = parseTimeRange(timeRange);
351
+ if (start !== null && end !== null) {
352
+ filteredLines = filteredLines.filter(line => line.start >= start && line.start <= end);
353
+ isFiltered = true;
354
+ filterInfo = `Time range: ${formatDuration(start)} to ${formatDuration(end)}`;
355
+ }
356
+ }
357
+ // Apply keyword search filter
358
+ if (searchKeywords && !timeRange) { // Don't combine with timeRange
359
+ const keywords = searchKeywords.split(',').map(k => k.trim().toLowerCase()).filter(k => k);
360
+ const matchedIndices = new Set();
361
+ filteredLines.forEach((line, idx) => {
362
+ const text = line.text.toLowerCase();
363
+ if (keywords.some(kw => text.includes(kw))) {
364
+ // Add this line + context
365
+ for (let i = Math.max(0, idx - contextLines); i <= Math.min(transcriptLines.length - 1, idx + contextLines); i++) {
366
+ matchedIndices.add(i);
367
+ }
368
+ matchCount++;
369
+ }
370
+ });
371
+ if (matchedIndices.size > 0) {
372
+ filteredLines = Array.from(matchedIndices).sort((a, b) => a - b).map(i => transcriptLines[i]);
373
+ isFiltered = true;
374
+ filterInfo = `Found ${matchCount} matches for: ${keywords.join(', ')}`;
375
+ }
376
+ else {
377
+ // No matches - return empty but successful
378
+ filteredLines = [];
379
+ isFiltered = true;
380
+ filterInfo = `No matches found for: ${keywords.join(', ')}`;
381
+ }
382
+ }
383
+ const transcript = filteredLines.map(line => line.text).join(' ');
384
+ let wordCount = transcript.split(/\s+/).filter(w => w.length > 0).length;
385
+ const charCount = transcript.length;
386
+ // Apply max words limit
387
+ let truncatedTranscript = transcript;
388
+ if (maxWords && wordCount > maxWords) {
389
+ const words = transcript.split(/\s+/);
390
+ truncatedTranscript = words.slice(0, maxWords).join(' ') + '... [TRUNCATED]';
391
+ wordCount = maxWords;
392
+ isFiltered = true;
393
+ filterInfo = filterInfo ? `${filterInfo} | Truncated to ${maxWords} words` : `Truncated to ${maxWords} words`;
394
+ }
395
+ // Cleanup temp directory
396
+ await safeCleanup(tempDir);
397
+ const fetchTimeMs = Date.now() - startTime;
398
+ console.error(`[YouTube Transcript] Success: ${wordCount} words in ${fetchTimeMs}ms`);
399
+ return {
400
+ success: true,
401
+ videoId,
402
+ videoUrl,
403
+ videoTitle: videoTitle || undefined,
404
+ transcript: truncatedTranscript,
405
+ transcriptLines: includeTimestamps ? filteredLines : undefined,
406
+ language,
407
+ languageUsed,
408
+ wordCount,
409
+ charCount,
410
+ durationSec: durationSec || undefined,
411
+ durationFormatted: durationSec ? formatDuration(durationSec) : undefined,
412
+ provider: 'yt-dlp',
413
+ fetchTimeMs,
414
+ isFiltered: isFiltered ? true : undefined,
415
+ filterInfo: filterInfo || undefined,
416
+ matchCount: matchCount > 0 ? matchCount : undefined
417
+ };
418
+ }
419
+ catch (error) {
420
+ // Ensure cleanup on any error
421
+ if (tempDir)
422
+ await safeCleanup(tempDir);
423
+ const errMsg = error?.message || String(error);
424
+ console.error('[YouTube Transcript] Error:', errMsg);
425
+ // Categorize error
426
+ let errorCode = 'UNKNOWN_ERROR';
427
+ if (errMsg.includes('ETIMEDOUT') || errMsg.includes('timeout')) {
428
+ errorCode = 'TIMEOUT';
429
+ }
430
+ else if (errMsg.includes('ENOTFOUND') || errMsg.includes('network')) {
431
+ errorCode = 'NETWORK_ERROR';
432
+ }
433
+ return {
434
+ success: false,
435
+ error: errMsg,
436
+ errorCode,
437
+ fetchTimeMs: Date.now() - (Date.now() - 1) // Approximate
438
+ };
439
+ }
440
+ }
441
+ // Format transcript with timestamps
442
+ export function formatTranscriptWithTimestamps(lines) {
443
+ return lines.map(line => {
444
+ const hours = Math.floor(line.start / 3600);
445
+ const minutes = Math.floor((line.start % 3600) / 60);
446
+ const seconds = Math.floor(line.start % 60);
447
+ let timestamp;
448
+ if (hours > 0) {
449
+ timestamp = `[${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}]`;
450
+ }
451
+ else {
452
+ timestamp = `[${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}]`;
453
+ }
454
+ return `${timestamp} ${line.text}`;
455
+ }).join('\n');
456
+ }
457
+ // Get available caption languages for a video (useful for debugging)
458
+ export async function getAvailableLanguages(url) {
459
+ const videoId = extractVideoId(url);
460
+ if (!videoId) {
461
+ return { success: false, error: 'Invalid YouTube URL' };
462
+ }
463
+ try {
464
+ const { stdout } = await execAsync(`yt-dlp --list-subs --skip-download "https://www.youtube.com/watch?v=${videoId}"`, { timeout: 15000 });
465
+ const languages = [];
466
+ const lines = stdout.split('\n');
467
+ for (const line of lines) {
468
+ const match = line.match(/^([a-z]{2}(-[A-Z]{2})?)\s/);
469
+ if (match)
470
+ languages.push(match[1]);
471
+ }
472
+ return { success: true, languages: [...new Set(languages)] };
473
+ }
474
+ catch (error) {
475
+ return { success: false, error: error?.message || String(error) };
476
+ }
477
+ }
478
+ //# sourceMappingURL=youtube-transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube-transcript.js","sourceRoot":"","sources":["../src/youtube-transcript.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ignidor/web-search-mcp",
3
- "version": "1.0.2",
4
- "description": "Local, unlimited web-search MCP server with BM25 ranking and Playwright crawling. No Docker, no API keys, no rate limits.",
3
+ "version": "1.2.0",
4
+ "description": "Local, unlimited web-search MCP server with BM25 ranking, Playwright crawling, and YouTube transcripts (yt-dlp). Smart extraction with time-range filtering, keyword search, and token control. No Docker, no API keys, no rate limits.",
5
5
  "private": false,
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
@@ -39,7 +39,11 @@
39
39
  "duckduckgo",
40
40
  "unlimited",
41
41
  "free",
42
- "no-api-key"
42
+ "no-api-key",
43
+ "youtube",
44
+ "transcript",
45
+ "yt-dlp",
46
+ "video-captions"
43
47
  ],
44
48
  "author": "Ignidor Team",
45
49
  "license": "MIT",