yt-embeddings-strapi-plugin 0.0.1

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.
Files changed (65) hide show
  1. package/README.md +531 -0
  2. package/dist/_chunks/App-Cv1cdLAr.js +587 -0
  3. package/dist/_chunks/App-bN58O1bN.mjs +583 -0
  4. package/dist/_chunks/en-B4KWt_jN.js +4 -0
  5. package/dist/_chunks/en-Byx4XI2L.mjs +4 -0
  6. package/dist/_chunks/index-BAfBs5PQ.js +172 -0
  7. package/dist/_chunks/index-K6X5FM2O.mjs +173 -0
  8. package/dist/admin/index.js +4 -0
  9. package/dist/admin/index.mjs +5 -0
  10. package/dist/admin/src/components/Initializer.d.ts +5 -0
  11. package/dist/admin/src/components/PluginIcon.d.ts +2 -0
  12. package/dist/admin/src/components/custom/BackLink.d.ts +5 -0
  13. package/dist/admin/src/components/custom/ChatModal.d.ts +1 -0
  14. package/dist/admin/src/components/custom/EmbeddingsModal.d.ts +1 -0
  15. package/dist/admin/src/components/custom/EmbeddingsWidget.d.ts +1 -0
  16. package/dist/admin/src/components/custom/Illo.d.ts +1 -0
  17. package/dist/admin/src/components/custom/Markdown.d.ts +5 -0
  18. package/dist/admin/src/components/custom/RobotIcon.d.ts +6 -0
  19. package/dist/admin/src/index.d.ts +12 -0
  20. package/dist/admin/src/pages/App.d.ts +2 -0
  21. package/dist/admin/src/pages/EmbeddingDetails.d.ts +1 -0
  22. package/dist/admin/src/pages/HomePage.d.ts +1 -0
  23. package/dist/admin/src/pluginId.d.ts +1 -0
  24. package/dist/admin/src/utils/api.d.ts +81 -0
  25. package/dist/admin/src/utils/getTranslation.d.ts +2 -0
  26. package/dist/server/index.js +2220 -0
  27. package/dist/server/index.mjs +2203 -0
  28. package/dist/server/src/bootstrap.d.ts +5 -0
  29. package/dist/server/src/config/index.d.ts +38 -0
  30. package/dist/server/src/content-types/index.d.ts +2 -0
  31. package/dist/server/src/controllers/controller.d.ts +13 -0
  32. package/dist/server/src/controllers/index.d.ts +30 -0
  33. package/dist/server/src/controllers/mcp.d.ts +18 -0
  34. package/dist/server/src/controllers/yt-controller.d.ts +13 -0
  35. package/dist/server/src/destroy.d.ts +5 -0
  36. package/dist/server/src/index.d.ts +280 -0
  37. package/dist/server/src/mcp/index.d.ts +6 -0
  38. package/dist/server/src/mcp/schemas/index.d.ts +55 -0
  39. package/dist/server/src/mcp/server.d.ts +8 -0
  40. package/dist/server/src/mcp/tools/get-video-transcript-range.d.ts +33 -0
  41. package/dist/server/src/mcp/tools/get-yt-video-summary.d.ts +23 -0
  42. package/dist/server/src/mcp/tools/index.d.ts +38 -0
  43. package/dist/server/src/mcp/tools/list-yt-videos.d.ts +28 -0
  44. package/dist/server/src/mcp/tools/search-yt-knowledge.d.ts +51 -0
  45. package/dist/server/src/middlewares/index.d.ts +2 -0
  46. package/dist/server/src/migrations/002-yt-tables.d.ts +2 -0
  47. package/dist/server/src/plugin-manager.d.ts +81 -0
  48. package/dist/server/src/policies/index.d.ts +2 -0
  49. package/dist/server/src/register.d.ts +5 -0
  50. package/dist/server/src/routes/admin.d.ts +14 -0
  51. package/dist/server/src/routes/content-api.d.ts +20 -0
  52. package/dist/server/src/routes/index.d.ts +41 -0
  53. package/dist/server/src/services/ai-tools.d.ts +127 -0
  54. package/dist/server/src/services/index.d.ts +185 -0
  55. package/dist/server/src/services/yt-embeddings.d.ts +68 -0
  56. package/dist/server/src/services/yt-metadata.d.ts +12 -0
  57. package/dist/server/src/tools/get-video-transcript-range.d.ts +32 -0
  58. package/dist/server/src/tools/get-yt-video-summary.d.ts +36 -0
  59. package/dist/server/src/tools/index.d.ts +126 -0
  60. package/dist/server/src/tools/list-yt-videos.d.ts +25 -0
  61. package/dist/server/src/tools/search-yt-knowledge.d.ts +35 -0
  62. package/dist/server/src/utils/chunking.d.ts +44 -0
  63. package/dist/server/src/utils/preprocessing.d.ts +26 -0
  64. package/dist/server/src/utils/yt-chunker.d.ts +16 -0
  65. package/package.json +106 -0
@@ -0,0 +1,5 @@
1
+ import type { Core } from "@strapi/strapi";
2
+ declare const bootstrap: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => Promise<void>;
5
+ export default bootstrap;
@@ -0,0 +1,38 @@
1
+ export declare const EMBEDDING_MODELS: {
2
+ readonly "text-embedding-3-small": {
3
+ readonly dimensions: 1536;
4
+ };
5
+ readonly "text-embedding-3-large": {
6
+ readonly dimensions: 3072;
7
+ };
8
+ readonly "text-embedding-ada-002": {
9
+ readonly dimensions: 1536;
10
+ };
11
+ };
12
+ export type EmbeddingModelName = keyof typeof EMBEDDING_MODELS;
13
+ export interface PluginConfigSchema {
14
+ openAIApiKey?: string;
15
+ neonConnectionString?: string;
16
+ embeddingModel?: EmbeddingModelName;
17
+ /** Maximum characters per chunk (default: 4000, roughly ~1000 tokens) */
18
+ chunkSize?: number;
19
+ /** Number of characters to overlap between chunks (default: 200) */
20
+ chunkOverlap?: number;
21
+ /** Automatically chunk content that exceeds chunkSize (default: false) */
22
+ autoChunk?: boolean;
23
+ /** Preprocess content before embedding - strips HTML/Markdown (default: true) */
24
+ preprocessContent?: boolean;
25
+ }
26
+ declare const _default: {
27
+ default: {
28
+ openAIApiKey: string;
29
+ neonConnectionString: string;
30
+ embeddingModel: "text-embedding-3-small" | "text-embedding-3-large" | "text-embedding-ada-002";
31
+ chunkSize: number;
32
+ chunkOverlap: number;
33
+ autoChunk: boolean;
34
+ preprocessContent: boolean;
35
+ };
36
+ validator(config: PluginConfigSchema): void;
37
+ };
38
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: {};
2
+ export default _default;
@@ -0,0 +1,13 @@
1
+ import type { Core } from "@strapi/strapi";
2
+ declare const controller: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => {
5
+ ytEmbed(ctx: any): Promise<void>;
6
+ ytListVideos(ctx: any): Promise<void>;
7
+ ytGetVideo(ctx: any): Promise<void>;
8
+ ytGetVideoChunks(ctx: any): Promise<void>;
9
+ ytRecompute(ctx: any): Promise<void>;
10
+ ytStatus(ctx: any): Promise<void>;
11
+ queryEmbeddings(ctx: any): Promise<void>;
12
+ };
13
+ export default controller;
@@ -0,0 +1,30 @@
1
+ declare const _default: {
2
+ controller: ({ strapi }: {
3
+ strapi: import("@strapi/types/dist/core").Strapi;
4
+ }) => {
5
+ ytEmbed(ctx: any): Promise<void>;
6
+ ytListVideos(ctx: any): Promise<void>;
7
+ ytGetVideo(ctx: any): Promise<void>;
8
+ ytGetVideoChunks(ctx: any): Promise<void>;
9
+ ytRecompute(ctx: any): Promise<void>;
10
+ ytStatus(ctx: any): Promise<void>;
11
+ queryEmbeddings(ctx: any): Promise<void>;
12
+ };
13
+ mcp: ({ strapi }: {
14
+ strapi: import("@strapi/types/dist/core").Strapi;
15
+ }) => {
16
+ handle(ctx: any): Promise<void>;
17
+ };
18
+ ytController: ({ strapi }: {
19
+ strapi: import("@strapi/types/dist/core").Strapi;
20
+ }) => {
21
+ ingest(ctx: any): Promise<void>;
22
+ listVideos(ctx: any): Promise<void>;
23
+ getVideo(ctx: any): Promise<void>;
24
+ deleteVideo(ctx: any): Promise<void>;
25
+ search(ctx: any): Promise<void>;
26
+ getVideoChunks(ctx: any): Promise<void>;
27
+ recompute(ctx: any): Promise<void>;
28
+ };
29
+ };
30
+ export default _default;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * MCP Controller for Content Embeddings
3
+ *
4
+ * Handles MCP (Model Context Protocol) requests with session management.
5
+ */
6
+ import type { Core } from '@strapi/strapi';
7
+ /**
8
+ * MCP Controller
9
+ */
10
+ declare const mcpController: ({ strapi }: {
11
+ strapi: Core.Strapi;
12
+ }) => {
13
+ /**
14
+ * Handle MCP requests (POST, GET, DELETE)
15
+ */
16
+ handle(ctx: any): Promise<void>;
17
+ };
18
+ export default mcpController;
@@ -0,0 +1,13 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ declare const ytController: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => {
5
+ ingest(ctx: any): Promise<void>;
6
+ listVideos(ctx: any): Promise<void>;
7
+ getVideo(ctx: any): Promise<void>;
8
+ deleteVideo(ctx: any): Promise<void>;
9
+ search(ctx: any): Promise<void>;
10
+ getVideoChunks(ctx: any): Promise<void>;
11
+ recompute(ctx: any): Promise<void>;
12
+ };
13
+ export default ytController;
@@ -0,0 +1,5 @@
1
+ import type { Core } from "@strapi/strapi";
2
+ declare const destroy: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => Promise<void>;
5
+ export default destroy;
@@ -0,0 +1,280 @@
1
+ declare const _default: {
2
+ register: (_args: {
3
+ strapi: import("@strapi/types/dist/core").Strapi;
4
+ }) => void;
5
+ bootstrap: ({ strapi }: {
6
+ strapi: import("@strapi/types/dist/core").Strapi;
7
+ }) => Promise<void>;
8
+ destroy: ({ strapi }: {
9
+ strapi: import("@strapi/types/dist/core").Strapi;
10
+ }) => Promise<void>;
11
+ config: {
12
+ default: {
13
+ openAIApiKey: string;
14
+ neonConnectionString: string;
15
+ embeddingModel: "text-embedding-3-small" | "text-embedding-3-large" | "text-embedding-ada-002";
16
+ chunkSize: number;
17
+ chunkOverlap: number;
18
+ autoChunk: boolean;
19
+ preprocessContent: boolean;
20
+ };
21
+ validator(config: import("./config").PluginConfigSchema): void;
22
+ };
23
+ controllers: {
24
+ controller: ({ strapi }: {
25
+ strapi: import("@strapi/types/dist/core").Strapi;
26
+ }) => {
27
+ ytEmbed(ctx: any): Promise<void>;
28
+ ytListVideos(ctx: any): Promise<void>;
29
+ ytGetVideo(ctx: any): Promise<void>;
30
+ ytGetVideoChunks(ctx: any): Promise<void>;
31
+ ytRecompute(ctx: any): Promise<void>;
32
+ ytStatus(ctx: any): Promise<void>;
33
+ queryEmbeddings(ctx: any): Promise<void>;
34
+ };
35
+ mcp: ({ strapi }: {
36
+ strapi: import("@strapi/types/dist/core").Strapi;
37
+ }) => {
38
+ handle(ctx: any): Promise<void>;
39
+ };
40
+ ytController: ({ strapi }: {
41
+ strapi: import("@strapi/types/dist/core").Strapi;
42
+ }) => {
43
+ ingest(ctx: any): Promise<void>;
44
+ listVideos(ctx: any): Promise<void>;
45
+ getVideo(ctx: any): Promise<void>;
46
+ deleteVideo(ctx: any): Promise<void>;
47
+ search(ctx: any): Promise<void>;
48
+ getVideoChunks(ctx: any): Promise<void>;
49
+ recompute(ctx: any): Promise<void>;
50
+ };
51
+ };
52
+ routes: {
53
+ "content-api": {
54
+ type: string;
55
+ routes: ({
56
+ method: string;
57
+ path: string;
58
+ handler: string;
59
+ config: {
60
+ auth: boolean;
61
+ policies: any[];
62
+ description?: undefined;
63
+ };
64
+ } | {
65
+ method: string;
66
+ path: string;
67
+ handler: string;
68
+ config: {
69
+ description: string;
70
+ auth?: undefined;
71
+ policies?: undefined;
72
+ };
73
+ })[];
74
+ };
75
+ admin: {
76
+ type: string;
77
+ routes: {
78
+ method: string;
79
+ path: string;
80
+ handler: string;
81
+ config: {
82
+ policies: {
83
+ name: string;
84
+ config: {
85
+ actions: string[];
86
+ };
87
+ }[];
88
+ };
89
+ }[];
90
+ };
91
+ };
92
+ services: {
93
+ 'ai-tools': ({ strapi }: {
94
+ strapi: import("@strapi/types/dist/core").Strapi;
95
+ }) => {
96
+ getTools(): ({
97
+ name: string;
98
+ description: string;
99
+ schema: import("zod").ZodObject<{
100
+ query: import("zod").ZodString;
101
+ limit: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
102
+ videoId: import("zod").ZodOptional<import("zod").ZodString>;
103
+ topics: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
104
+ contextWindowSeconds: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
105
+ minSimilarity: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
106
+ }, "strip", import("zod").ZodTypeAny, {
107
+ query?: string;
108
+ limit?: number;
109
+ videoId?: string;
110
+ topics?: string[];
111
+ contextWindowSeconds?: number;
112
+ minSimilarity?: number;
113
+ }, {
114
+ query?: string;
115
+ limit?: number;
116
+ videoId?: string;
117
+ topics?: string[];
118
+ contextWindowSeconds?: number;
119
+ minSimilarity?: number;
120
+ }>;
121
+ execute: (args: unknown, strapi: import("@strapi/types/dist/core").Strapi) => Promise<{
122
+ results: any[];
123
+ message: string;
124
+ } | {
125
+ results: any;
126
+ message?: undefined;
127
+ }>;
128
+ publicSafe: boolean;
129
+ } | {
130
+ name: string;
131
+ description: string;
132
+ schema: import("zod").ZodObject<{
133
+ videoId: import("zod").ZodString;
134
+ startSeconds: import("zod").ZodNumber;
135
+ endSeconds: import("zod").ZodNumber;
136
+ }, "strip", import("zod").ZodTypeAny, {
137
+ videoId?: string;
138
+ startSeconds?: number;
139
+ endSeconds?: number;
140
+ }, {
141
+ videoId?: string;
142
+ startSeconds?: number;
143
+ endSeconds?: number;
144
+ }>;
145
+ execute: (args: unknown, strapi: import("@strapi/types/dist/core").Strapi) => Promise<{
146
+ transcript: any;
147
+ message: string;
148
+ videoId?: undefined;
149
+ range?: undefined;
150
+ deepLink?: undefined;
151
+ } | {
152
+ videoId: string;
153
+ range: string;
154
+ transcript: any;
155
+ deepLink: string;
156
+ message?: undefined;
157
+ }>;
158
+ publicSafe: boolean;
159
+ } | {
160
+ name: string;
161
+ description: string;
162
+ schema: import("zod").ZodObject<{
163
+ page: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
164
+ pageSize: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
165
+ }, "strip", import("zod").ZodTypeAny, {
166
+ page?: number;
167
+ pageSize?: number;
168
+ }, {
169
+ page?: number;
170
+ pageSize?: number;
171
+ }>;
172
+ execute: (args: unknown, strapi: import("@strapi/types/dist/core").Strapi) => Promise<{
173
+ videos: any;
174
+ pagination: {
175
+ page: any;
176
+ pageSize: any;
177
+ total: any;
178
+ pageCount: number;
179
+ };
180
+ }>;
181
+ publicSafe: boolean;
182
+ } | {
183
+ name: string;
184
+ description: string;
185
+ schema: import("zod").ZodObject<{
186
+ videoId: import("zod").ZodString;
187
+ }, "strip", import("zod").ZodTypeAny, {
188
+ videoId?: string;
189
+ }, {
190
+ videoId?: string;
191
+ }>;
192
+ execute: (args: unknown, strapi: import("@strapi/types/dist/core").Strapi) => Promise<{
193
+ error: boolean;
194
+ message: string;
195
+ videoId?: undefined;
196
+ title?: undefined;
197
+ topics?: undefined;
198
+ summary?: undefined;
199
+ chunkCount?: undefined;
200
+ embeddingStatus?: undefined;
201
+ watchLink?: undefined;
202
+ keyMoments?: undefined;
203
+ } | {
204
+ videoId: any;
205
+ title: any;
206
+ topics: any;
207
+ summary: any;
208
+ chunkCount: any;
209
+ embeddingStatus: any;
210
+ watchLink: string;
211
+ keyMoments: any;
212
+ error?: undefined;
213
+ message?: undefined;
214
+ }>;
215
+ publicSafe: boolean;
216
+ })[];
217
+ };
218
+ ytEmbeddings: ({ strapi }: {
219
+ strapi: import("@strapi/types/dist/core").Strapi;
220
+ }) => {
221
+ embedTranscript(transcript: import("./services/yt-embeddings").TranscriptInput): Promise<{
222
+ videoId: string;
223
+ chunkCount: number;
224
+ skipped: boolean;
225
+ }>;
226
+ search(query: string, options?: {
227
+ limit?: number;
228
+ minSimilarity?: number;
229
+ videoId?: string;
230
+ topics?: string[];
231
+ contextWindowSeconds?: number;
232
+ }): Promise<{
233
+ chunkText: any;
234
+ startSeconds: any;
235
+ endSeconds: any;
236
+ similarity: number;
237
+ contextText: string;
238
+ videoId: any;
239
+ title: any;
240
+ channelName: any;
241
+ videoSummary: any;
242
+ topics: any;
243
+ strapiDocumentId: any;
244
+ deepLink: string;
245
+ contextLink: string;
246
+ }[]>;
247
+ getTranscriptRange(videoId: string, startSeconds: number, endSeconds: number): Promise<any[]>;
248
+ listVideos(options?: {
249
+ page?: number;
250
+ pageSize?: number;
251
+ status?: string;
252
+ }): Promise<{
253
+ data: any[];
254
+ total: any;
255
+ page: number;
256
+ pageSize: number;
257
+ }>;
258
+ getVideo(videoId: string): Promise<any>;
259
+ deleteVideo(videoId: string): Promise<any>;
260
+ getVideoChunks(videoId: string, options?: {
261
+ start?: number;
262
+ end?: number;
263
+ }): Promise<any[]>;
264
+ getStatusByDocumentId(documentId: string): Promise<{
265
+ embedded: boolean;
266
+ videoId?: string;
267
+ chunkCount?: number;
268
+ embeddedAt?: string;
269
+ }>;
270
+ recomputeAll(): Promise<{
271
+ total: number;
272
+ processed: number;
273
+ }>;
274
+ };
275
+ };
276
+ contentTypes: {};
277
+ policies: {};
278
+ middlewares: {};
279
+ };
280
+ export default _default;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * MCP Module Exports
3
+ */
4
+ export { createMcpServer } from './server';
5
+ export { tools, handleToolCall } from './tools';
6
+ export { validateToolInput, ToolSchemas } from './schemas';
@@ -0,0 +1,55 @@
1
+ import { z } from 'zod';
2
+ export declare const SearchYtKnowledgeSchema: z.ZodObject<{
3
+ query: z.ZodString;
4
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
5
+ videoId: z.ZodOptional<z.ZodString>;
6
+ topics: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
7
+ contextWindowSeconds: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
8
+ minSimilarity: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ query?: string;
11
+ limit?: number;
12
+ videoId?: string;
13
+ topics?: string[];
14
+ contextWindowSeconds?: number;
15
+ minSimilarity?: number;
16
+ }, {
17
+ query?: string;
18
+ limit?: number;
19
+ videoId?: string;
20
+ topics?: string[];
21
+ contextWindowSeconds?: number;
22
+ minSimilarity?: number;
23
+ }>;
24
+ export declare const GetVideoTranscriptRangeSchema: z.ZodObject<{
25
+ videoId: z.ZodString;
26
+ startSeconds: z.ZodNumber;
27
+ endSeconds: z.ZodNumber;
28
+ }, "strip", z.ZodTypeAny, {
29
+ videoId?: string;
30
+ startSeconds?: number;
31
+ endSeconds?: number;
32
+ }, {
33
+ videoId?: string;
34
+ startSeconds?: number;
35
+ endSeconds?: number;
36
+ }>;
37
+ export declare const ListYtVideosSchema: z.ZodObject<{
38
+ page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
39
+ pageSize: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
40
+ }, "strip", z.ZodTypeAny, {
41
+ page?: number;
42
+ pageSize?: number;
43
+ }, {
44
+ page?: number;
45
+ pageSize?: number;
46
+ }>;
47
+ export declare const GetYtVideoSummarySchema: z.ZodObject<{
48
+ videoId: z.ZodString;
49
+ }, "strip", z.ZodTypeAny, {
50
+ videoId?: string;
51
+ }, {
52
+ videoId?: string;
53
+ }>;
54
+ export declare const ToolSchemas: Record<string, z.ZodSchema>;
55
+ export declare function validateToolInput<T = unknown>(toolName: string, input: unknown): T;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Server Factory for Content Embeddings
3
+ *
4
+ * Creates an MCP server that exposes vector search and RAG tools.
5
+ */
6
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
+ import type { Core } from '@strapi/strapi';
8
+ export declare function createMcpServer(strapi: Core.Strapi): Server;
@@ -0,0 +1,33 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ export declare const getVideoTranscriptRangeMcpTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: string;
7
+ properties: {
8
+ videoId: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ startSeconds: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ endSeconds: {
17
+ type: string;
18
+ description: string;
19
+ };
20
+ };
21
+ required: string[];
22
+ };
23
+ };
24
+ export declare function handleGetVideoTranscriptRange(strapi: Core.Strapi, args: {
25
+ videoId: string;
26
+ startSeconds: number;
27
+ endSeconds: number;
28
+ }): Promise<{
29
+ content: {
30
+ type: string;
31
+ text: string;
32
+ }[];
33
+ }>;
@@ -0,0 +1,23 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ export declare const getYtVideoSummaryMcpTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: string;
7
+ properties: {
8
+ videoId: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ };
13
+ required: string[];
14
+ };
15
+ };
16
+ export declare function handleGetYtVideoSummary(strapi: Core.Strapi, args: {
17
+ videoId: string;
18
+ }): Promise<{
19
+ content: {
20
+ type: string;
21
+ text: string;
22
+ }[];
23
+ }>;
@@ -0,0 +1,38 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ export declare const tools: ({
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: string;
7
+ properties: {
8
+ page: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ pageSize: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ };
17
+ required: any[];
18
+ };
19
+ } | {
20
+ name: string;
21
+ description: string;
22
+ inputSchema: {
23
+ type: string;
24
+ properties: {
25
+ videoId: {
26
+ type: string;
27
+ description: string;
28
+ };
29
+ };
30
+ required: string[];
31
+ };
32
+ })[];
33
+ export declare function handleToolCall(strapi: Core.Strapi, request: {
34
+ params: {
35
+ name: string;
36
+ arguments?: unknown;
37
+ };
38
+ }): Promise<any>;
@@ -0,0 +1,28 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ export declare const listYtVideosMcpTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: string;
7
+ properties: {
8
+ page: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ pageSize: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ };
17
+ required: any[];
18
+ };
19
+ };
20
+ export declare function handleListYtVideos(strapi: Core.Strapi, args: {
21
+ page?: number;
22
+ pageSize?: number;
23
+ }): Promise<{
24
+ content: {
25
+ type: string;
26
+ text: string;
27
+ }[];
28
+ }>;
@@ -0,0 +1,51 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ export declare const searchYtKnowledgeMcpTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: string;
7
+ properties: {
8
+ query: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ limit: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ videoId: {
17
+ type: string;
18
+ description: string;
19
+ };
20
+ topics: {
21
+ type: string;
22
+ items: {
23
+ type: string;
24
+ };
25
+ description: string;
26
+ };
27
+ contextWindowSeconds: {
28
+ type: string;
29
+ description: string;
30
+ };
31
+ minSimilarity: {
32
+ type: string;
33
+ description: string;
34
+ };
35
+ };
36
+ required: string[];
37
+ };
38
+ };
39
+ export declare function handleSearchYtKnowledge(strapi: Core.Strapi, args: {
40
+ query: string;
41
+ limit?: number;
42
+ videoId?: string;
43
+ topics?: string[];
44
+ contextWindowSeconds?: number;
45
+ minSimilarity?: number;
46
+ }): Promise<{
47
+ content: {
48
+ type: string;
49
+ text: any;
50
+ }[];
51
+ }>;
@@ -0,0 +1,2 @@
1
+ declare const _default: {};
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import type { Pool } from 'pg';
2
+ export declare function runYtMigration(pool: Pool): Promise<void>;