youtube-knowledge-mcp 1.2.0 → 2.0.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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/youtube-knowledge-mcp)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
|
-
[](https://nodejs.org/)
|
|
6
6
|
[](https://github.com/teobouancheau/youtube-knowledge-mcp)
|
|
7
7
|
|
|
8
8
|
A Model Context Protocol (MCP) server that gives AI assistants the ability to search, analyze, and extract knowledge from YouTube videos. Works with Claude Desktop, Claude Code, Claude.ai, Cursor and any MCP-compatible client.
|
|
@@ -50,7 +50,7 @@ Supports both **local** (stdio) and **remote** (Streamable HTTP) transports.
|
|
|
50
50
|
|
|
51
51
|
## Prerequisites
|
|
52
52
|
|
|
53
|
-
- Node.js
|
|
53
|
+
- Node.js 22+
|
|
54
54
|
- [yt-dlp](https://github.com/yt-dlp/yt-dlp#installation) — required by every tool.
|
|
55
55
|
`brew install yt-dlp` (macOS) or `pip install -U yt-dlp`
|
|
56
56
|
- [ffmpeg](https://ffmpeg.org/) — required for downloads, clip extraction and frame
|
|
@@ -382,7 +382,7 @@ npm run start:http # Run server (HTTP)
|
|
|
382
382
|
npm run validate # Typecheck + lint + format check + test
|
|
383
383
|
```
|
|
384
384
|
|
|
385
|
-
CI runs the same gate on Node
|
|
385
|
+
CI runs the same gate on Node 22 and 24 for every push and pull request,
|
|
386
386
|
then boots the built server as a real MCP client to verify the manifest.
|
|
387
387
|
|
|
388
388
|
## Contributing
|
package/dist/schemas.d.ts
CHANGED
|
@@ -59,8 +59,8 @@ export declare const videoInfoSchema: z.ZodObject<{
|
|
|
59
59
|
url: string;
|
|
60
60
|
description: string;
|
|
61
61
|
title: string;
|
|
62
|
-
channel: string;
|
|
63
62
|
id: string;
|
|
63
|
+
channel: string;
|
|
64
64
|
uploadDate: string;
|
|
65
65
|
thumbnailUrl: string;
|
|
66
66
|
tags: string[];
|
|
@@ -73,8 +73,8 @@ export declare const videoInfoSchema: z.ZodObject<{
|
|
|
73
73
|
url: string;
|
|
74
74
|
description: string;
|
|
75
75
|
title: string;
|
|
76
|
-
channel: string;
|
|
77
76
|
id: string;
|
|
77
|
+
channel: string;
|
|
78
78
|
uploadDate: string;
|
|
79
79
|
thumbnailUrl: string;
|
|
80
80
|
tags: string[];
|
|
@@ -159,8 +159,8 @@ export declare const playlistInfoSchema: z.ZodObject<{
|
|
|
159
159
|
lastModified: string;
|
|
160
160
|
description: string;
|
|
161
161
|
title: string;
|
|
162
|
-
channel: string;
|
|
163
162
|
id: string;
|
|
163
|
+
channel: string;
|
|
164
164
|
handle: string;
|
|
165
165
|
channelUrl: string;
|
|
166
166
|
videoCount: number;
|
|
@@ -169,8 +169,8 @@ export declare const playlistInfoSchema: z.ZodObject<{
|
|
|
169
169
|
lastModified: string;
|
|
170
170
|
description: string;
|
|
171
171
|
title: string;
|
|
172
|
-
channel: string;
|
|
173
172
|
id: string;
|
|
173
|
+
channel: string;
|
|
174
174
|
handle: string;
|
|
175
175
|
channelUrl: string;
|
|
176
176
|
videoCount: number;
|
|
@@ -248,8 +248,8 @@ export declare const libraryMetadataSchema: z.ZodObject<{
|
|
|
248
248
|
}, "strip", z.ZodTypeAny, {
|
|
249
249
|
url: string;
|
|
250
250
|
title: string;
|
|
251
|
-
channel: string;
|
|
252
251
|
videoId: string;
|
|
252
|
+
channel: string;
|
|
253
253
|
tags: string[];
|
|
254
254
|
dateSaved: string;
|
|
255
255
|
hasTranscript: boolean;
|
|
@@ -258,8 +258,8 @@ export declare const libraryMetadataSchema: z.ZodObject<{
|
|
|
258
258
|
}, {
|
|
259
259
|
url: string;
|
|
260
260
|
title: string;
|
|
261
|
-
channel: string;
|
|
262
261
|
videoId: string;
|
|
262
|
+
channel: string;
|
|
263
263
|
tags: string[];
|
|
264
264
|
dateSaved: string;
|
|
265
265
|
hasTranscript: boolean;
|
package/dist/tools/library.d.ts
CHANGED
|
@@ -24,8 +24,8 @@ export declare const getLibraryItemOutputSchema: {
|
|
|
24
24
|
}, "strip", z.ZodTypeAny, {
|
|
25
25
|
url: string;
|
|
26
26
|
title: string;
|
|
27
|
-
channel: string;
|
|
28
27
|
videoId: string;
|
|
28
|
+
channel: string;
|
|
29
29
|
tags: string[];
|
|
30
30
|
dateSaved: string;
|
|
31
31
|
hasTranscript: boolean;
|
|
@@ -34,8 +34,8 @@ export declare const getLibraryItemOutputSchema: {
|
|
|
34
34
|
}, {
|
|
35
35
|
url: string;
|
|
36
36
|
title: string;
|
|
37
|
-
channel: string;
|
|
38
37
|
videoId: string;
|
|
38
|
+
channel: string;
|
|
39
39
|
tags: string[];
|
|
40
40
|
dateSaved: string;
|
|
41
41
|
hasTranscript: boolean;
|
|
@@ -22,8 +22,8 @@ export declare const listLibraryOutputSchema: {
|
|
|
22
22
|
}, "strip", z.ZodTypeAny, {
|
|
23
23
|
url: string;
|
|
24
24
|
title: string;
|
|
25
|
-
channel: string;
|
|
26
25
|
videoId: string;
|
|
26
|
+
channel: string;
|
|
27
27
|
tags: string[];
|
|
28
28
|
dateSaved: string;
|
|
29
29
|
hasTranscript: boolean;
|
|
@@ -32,8 +32,8 @@ export declare const listLibraryOutputSchema: {
|
|
|
32
32
|
}, {
|
|
33
33
|
url: string;
|
|
34
34
|
title: string;
|
|
35
|
-
channel: string;
|
|
36
35
|
videoId: string;
|
|
36
|
+
channel: string;
|
|
37
37
|
tags: string[];
|
|
38
38
|
dateSaved: string;
|
|
39
39
|
hasTranscript: boolean;
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Full-text search over the local library.
|
|
3
3
|
*
|
|
4
4
|
* A hand-written BM25 index rather than SQLite FTS5 or an embedding store:
|
|
5
|
-
* `node:sqlite` needs Node 22 and this release still supports Node 20, and
|
|
6
5
|
* embeddings would mean an API key and a heavyweight dependency for a server
|
|
7
6
|
* whose whole appeal is four runtime dependencies. BM25 over a few thousand
|
|
8
|
-
* saved notes is instant and costs nothing.
|
|
7
|
+
* saved notes is instant and costs nothing. `node:sqlite` is reachable now that
|
|
8
|
+
* the floor is Node 22, so FTS5 is the move if a library ever outgrows this.
|
|
9
9
|
*/
|
|
10
10
|
import { z } from 'zod';
|
|
11
11
|
export declare const indexedDocumentSchema: z.ZodObject<{
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Full-text search over the local library.
|
|
3
3
|
*
|
|
4
4
|
* A hand-written BM25 index rather than SQLite FTS5 or an embedding store:
|
|
5
|
-
* `node:sqlite` needs Node 22 and this release still supports Node 20, and
|
|
6
5
|
* embeddings would mean an API key and a heavyweight dependency for a server
|
|
7
6
|
* whose whole appeal is four runtime dependencies. BM25 over a few thousand
|
|
8
|
-
* saved notes is instant and costs nothing.
|
|
7
|
+
* saved notes is instant and costs nothing. `node:sqlite` is reachable now that
|
|
8
|
+
* the floor is Node 22, so FTS5 is the move if a library ever outgrows this.
|
|
9
9
|
*/
|
|
10
10
|
import { z } from 'zod';
|
|
11
11
|
export const indexedDocumentSchema = z.object({
|
package/dist/utils/storage.d.ts
CHANGED
|
@@ -19,8 +19,8 @@ export declare const libraryMetadataSchema: z.ZodObject<{
|
|
|
19
19
|
}, "strip", z.ZodTypeAny, {
|
|
20
20
|
url: string;
|
|
21
21
|
title: string;
|
|
22
|
-
channel: string;
|
|
23
22
|
videoId: string;
|
|
23
|
+
channel: string;
|
|
24
24
|
tags: string[];
|
|
25
25
|
dateSaved: string;
|
|
26
26
|
hasTranscript: boolean;
|
|
@@ -29,8 +29,8 @@ export declare const libraryMetadataSchema: z.ZodObject<{
|
|
|
29
29
|
}, {
|
|
30
30
|
url: string;
|
|
31
31
|
title: string;
|
|
32
|
-
channel: string;
|
|
33
32
|
videoId: string;
|
|
33
|
+
channel: string;
|
|
34
34
|
tags: string[];
|
|
35
35
|
dateSaved: string;
|
|
36
36
|
hasTranscript: boolean;
|
|
@@ -43,8 +43,8 @@ export declare const libraryIndexSchema: z.ZodObject<{
|
|
|
43
43
|
items: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnknown>, Record<string, {
|
|
44
44
|
url: string;
|
|
45
45
|
title: string;
|
|
46
|
-
channel: string;
|
|
47
46
|
videoId: string;
|
|
47
|
+
channel: string;
|
|
48
48
|
tags: string[];
|
|
49
49
|
dateSaved: string;
|
|
50
50
|
hasTranscript: boolean;
|
|
@@ -56,8 +56,8 @@ export declare const libraryIndexSchema: z.ZodObject<{
|
|
|
56
56
|
items: Record<string, {
|
|
57
57
|
url: string;
|
|
58
58
|
title: string;
|
|
59
|
-
channel: string;
|
|
60
59
|
videoId: string;
|
|
60
|
+
channel: string;
|
|
61
61
|
tags: string[];
|
|
62
62
|
dateSaved: string;
|
|
63
63
|
hasTranscript: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "youtube-knowledge-mcp",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "MCP Server for extracting and managing YouTube video knowledge",
|
|
5
5
|
"author": "teobouancheau",
|
|
6
6
|
"repository": {
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
62
|
-
"execa": "^
|
|
62
|
+
"execa": "^10.0.1",
|
|
63
63
|
"express": "^5.0.1",
|
|
64
64
|
"webvtt-parser": "^2.2.0",
|
|
65
65
|
"zod": "^3.25.0"
|
|
@@ -75,13 +75,13 @@
|
|
|
75
75
|
"eslint-config-prettier": "^10.1.8",
|
|
76
76
|
"globals": "^17.11.0",
|
|
77
77
|
"husky": "^9.1.7",
|
|
78
|
-
"lint-staged": "^
|
|
78
|
+
"lint-staged": "^17.3.0",
|
|
79
79
|
"prettier": "^3.9.6",
|
|
80
80
|
"typescript": "^5.4.0",
|
|
81
81
|
"typescript-eslint": "^8.67.0",
|
|
82
82
|
"vitest": "^4.1.10"
|
|
83
83
|
},
|
|
84
84
|
"engines": {
|
|
85
|
-
"node": ">=
|
|
85
|
+
"node": ">=22.0.0"
|
|
86
86
|
}
|
|
87
87
|
}
|