integrate-sdk 0.9.25 → 0.9.26-dev.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.
Files changed (54) hide show
  1. package/dist/adapters/index.js +28 -10
  2. package/dist/adapters/solid-start.js +28 -10
  3. package/dist/adapters/svelte-kit.js +28 -10
  4. package/dist/ai/anthropic.js +11 -1
  5. package/dist/ai/google.js +11 -1
  6. package/dist/ai/index.js +11 -1
  7. package/dist/ai/openai.js +11 -1
  8. package/dist/ai/vercel-ai.js +11 -1
  9. package/dist/code-mode/executor.js +5 -1
  10. package/dist/code-mode/index.js +11 -1
  11. package/dist/code-mode/runtime-stub.d.ts +1 -1
  12. package/dist/code-mode/runtime-stub.d.ts.map +1 -1
  13. package/dist/code-mode/runtime-stub.js +5 -1
  14. package/dist/code-mode/tool-builder.d.ts.map +1 -1
  15. package/dist/code-mode/tool-builder.js +11 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +197 -10
  19. package/dist/server.js +292 -64
  20. package/dist/src/code-mode/runtime-stub.d.ts +1 -1
  21. package/dist/src/code-mode/runtime-stub.d.ts.map +1 -1
  22. package/dist/src/code-mode/tool-builder.d.ts.map +1 -1
  23. package/dist/src/integrations/excel-client.d.ts +284 -0
  24. package/dist/src/integrations/excel-client.d.ts.map +1 -0
  25. package/dist/src/integrations/excel.d.ts +22 -0
  26. package/dist/src/integrations/excel.d.ts.map +1 -0
  27. package/dist/src/integrations/gdrive-client.d.ts +264 -0
  28. package/dist/src/integrations/gdrive-client.d.ts.map +1 -0
  29. package/dist/src/integrations/gdrive.d.ts +22 -0
  30. package/dist/src/integrations/gdrive.d.ts.map +1 -0
  31. package/dist/src/integrations/onedrive-client.d.ts +47 -250
  32. package/dist/src/integrations/onedrive-client.d.ts.map +1 -1
  33. package/dist/src/integrations/onedrive.d.ts +1 -1
  34. package/dist/src/integrations/onedrive.d.ts.map +1 -1
  35. package/dist/src/integrations/powerpoint-client.d.ts +99 -0
  36. package/dist/src/integrations/powerpoint-client.d.ts.map +1 -0
  37. package/dist/src/integrations/powerpoint.d.ts +22 -0
  38. package/dist/src/integrations/powerpoint.d.ts.map +1 -0
  39. package/dist/src/integrations/whatsapp-client.d.ts +406 -211
  40. package/dist/src/integrations/whatsapp-client.d.ts.map +1 -1
  41. package/dist/src/integrations/whatsapp.d.ts +1 -1
  42. package/dist/src/integrations/whatsapp.d.ts.map +1 -1
  43. package/dist/src/integrations/word-client.d.ts +99 -0
  44. package/dist/src/integrations/word-client.d.ts.map +1 -0
  45. package/dist/src/integrations/word.d.ts +22 -0
  46. package/dist/src/integrations/word.d.ts.map +1 -0
  47. package/dist/src/integrations/youtube-client.d.ts +292 -283
  48. package/dist/src/integrations/youtube-client.d.ts.map +1 -1
  49. package/dist/src/integrations/youtube.d.ts +2 -2
  50. package/dist/src/integrations/youtube.d.ts.map +1 -1
  51. package/dist/src/server.d.ts +4 -0
  52. package/dist/src/server.d.ts.map +1 -1
  53. package/index.ts +8 -0
  54. package/package.json +1 -1
@@ -1,11 +1,8 @@
1
1
  /**
2
2
  * YouTube Integration Client Types
3
- * Fully typed interface for YouTube integration methods
3
+ * Fully typed interface for YouTube Data API v3 methods
4
4
  */
5
5
  import type { MCPToolCallResponse } from "../protocol/messages.js";
6
- /**
7
- * YouTube Video
8
- */
9
6
  export interface YouTubeVideo {
10
7
  kind: "youtube#video";
11
8
  etag: string;
@@ -15,59 +12,27 @@ export interface YouTubeVideo {
15
12
  channelId: string;
16
13
  title: string;
17
14
  description: string;
18
- thumbnails: {
19
- default?: {
20
- url: string;
21
- width: number;
22
- height: number;
23
- };
24
- medium?: {
25
- url: string;
26
- width: number;
27
- height: number;
28
- };
29
- high?: {
30
- url: string;
31
- width: number;
32
- height: number;
33
- };
34
- standard?: {
35
- url: string;
36
- width: number;
37
- height: number;
38
- };
39
- maxres?: {
40
- url: string;
41
- width: number;
42
- height: number;
43
- };
44
- };
15
+ thumbnails: Record<string, {
16
+ url: string;
17
+ width: number;
18
+ height: number;
19
+ }>;
45
20
  channelTitle: string;
46
21
  tags?: string[];
47
22
  categoryId: string;
48
- liveBroadcastContent: string;
49
- localized?: {
50
- title: string;
51
- description: string;
52
- };
53
23
  };
54
24
  contentDetails?: {
55
25
  duration: string;
56
- dimension: string;
57
26
  definition: string;
58
27
  caption: string;
59
- licensedContent: boolean;
60
- projection: string;
61
28
  };
62
29
  statistics?: {
63
30
  viewCount: string;
64
31
  likeCount: string;
65
32
  commentCount: string;
33
+ favoriteCount: string;
66
34
  };
67
35
  }
68
- /**
69
- * YouTube Channel
70
- */
71
36
  export interface YouTubeChannel {
72
37
  kind: "youtube#channel";
73
38
  etag: string;
@@ -77,28 +42,11 @@ export interface YouTubeChannel {
77
42
  description: string;
78
43
  customUrl?: string;
79
44
  publishedAt: string;
80
- thumbnails: {
81
- default?: {
82
- url: string;
83
- width: number;
84
- height: number;
85
- };
86
- medium?: {
87
- url: string;
88
- width: number;
89
- height: number;
90
- };
91
- high?: {
92
- url: string;
93
- width: number;
94
- height: number;
95
- };
96
- };
97
- localized?: {
98
- title: string;
99
- description: string;
100
- };
101
- country?: string;
45
+ thumbnails: Record<string, {
46
+ url: string;
47
+ width: number;
48
+ height: number;
49
+ }>;
102
50
  };
103
51
  contentDetails?: {
104
52
  relatedPlaylists: {
@@ -109,13 +57,9 @@ export interface YouTubeChannel {
109
57
  statistics?: {
110
58
  viewCount: string;
111
59
  subscriberCount: string;
112
- hiddenSubscriberCount: boolean;
113
60
  videoCount: string;
114
61
  };
115
62
  }
116
- /**
117
- * YouTube Playlist
118
- */
119
63
  export interface YouTubePlaylist {
120
64
  kind: "youtube#playlist";
121
65
  etag: string;
@@ -125,157 +69,49 @@ export interface YouTubePlaylist {
125
69
  channelId: string;
126
70
  title: string;
127
71
  description: string;
128
- thumbnails: {
129
- default?: {
130
- url: string;
131
- width: number;
132
- height: number;
133
- };
134
- medium?: {
135
- url: string;
136
- width: number;
137
- height: number;
138
- };
139
- high?: {
140
- url: string;
141
- width: number;
142
- height: number;
143
- };
144
- standard?: {
145
- url: string;
146
- width: number;
147
- height: number;
148
- };
149
- maxres?: {
150
- url: string;
151
- width: number;
152
- height: number;
153
- };
154
- };
72
+ thumbnails: Record<string, {
73
+ url: string;
74
+ width: number;
75
+ height: number;
76
+ }>;
155
77
  channelTitle: string;
156
- localized?: {
157
- title: string;
158
- description: string;
159
- };
160
78
  };
161
79
  contentDetails?: {
162
80
  itemCount: number;
163
81
  };
164
82
  }
165
- /**
166
- * YouTube Playlist Item
167
- */
168
83
  export interface YouTubePlaylistItem {
169
84
  kind: "youtube#playlistItem";
170
85
  etag: string;
171
86
  id: string;
172
87
  snippet?: {
173
- publishedAt: string;
174
- channelId: string;
175
88
  title: string;
176
- description: string;
177
- thumbnails: {
178
- default?: {
179
- url: string;
180
- width: number;
181
- height: number;
182
- };
183
- medium?: {
184
- url: string;
185
- width: number;
186
- height: number;
187
- };
188
- high?: {
189
- url: string;
190
- width: number;
191
- height: number;
192
- };
193
- standard?: {
194
- url: string;
195
- width: number;
196
- height: number;
197
- };
198
- maxres?: {
199
- url: string;
200
- width: number;
201
- height: number;
202
- };
203
- };
204
- channelTitle: string;
205
- playlistId: string;
206
89
  position: number;
90
+ playlistId: string;
207
91
  resourceId: {
208
92
  kind: string;
209
93
  videoId: string;
210
94
  };
211
95
  };
212
- contentDetails?: {
213
- videoId: string;
214
- videoPublishedAt: string;
215
- };
216
- }
217
- /**
218
- * YouTube Comment
219
- */
220
- export interface YouTubeComment {
221
- kind: "youtube#comment";
222
- etag: string;
223
- id: string;
224
- snippet: {
225
- authorDisplayName: string;
226
- authorProfileImageUrl: string;
227
- authorChannelUrl: string;
228
- authorChannelId: {
229
- value: string;
230
- };
231
- videoId: string;
232
- textDisplay: string;
233
- textOriginal: string;
234
- canRate: boolean;
235
- viewerRating: string;
236
- likeCount: number;
237
- publishedAt: string;
238
- updatedAt: string;
239
- };
240
96
  }
241
- /**
242
- * YouTube Subscription
243
- */
244
97
  export interface YouTubeSubscription {
245
98
  kind: "youtube#subscription";
246
99
  etag: string;
247
100
  id: string;
248
101
  snippet: {
249
- publishedAt: string;
250
102
  title: string;
251
- description: string;
103
+ publishedAt: string;
252
104
  resourceId: {
253
105
  kind: string;
254
106
  channelId: string;
255
107
  };
256
- channelId: string;
257
- thumbnails: {
258
- default?: {
259
- url: string;
260
- width: number;
261
- height: number;
262
- };
263
- medium?: {
264
- url: string;
265
- width: number;
266
- height: number;
267
- };
268
- high?: {
269
- url: string;
270
- width: number;
271
- height: number;
272
- };
273
- };
108
+ };
109
+ contentDetails?: {
110
+ totalItemCount: number;
274
111
  };
275
112
  }
276
113
  /**
277
114
  * YouTube Integration Client Interface
278
- * Provides type-safe methods for all YouTube operations
279
115
  */
280
116
  export interface YouTubeIntegrationClient {
281
117
  /**
@@ -283,177 +119,350 @@ export interface YouTubeIntegrationClient {
283
119
  *
284
120
  * @example
285
121
  * ```typescript
286
- * const results = await client.youtube.search({
287
- * q: "typescript tutorial",
288
- * type: "video",
289
- * maxResults: 10
290
- * });
122
+ * const results = await client.youtube.search({ query: "typescript tutorial", max_results: 10 });
291
123
  * ```
292
124
  */
293
125
  search(params: {
294
- /** Search query */
295
- q: string;
296
- /** Resource type */
126
+ /** Search query text */
127
+ query: string;
128
+ /** video, channel, or playlist (default: video) */
297
129
  type?: "video" | "channel" | "playlist";
298
- /** Maximum results (1-50) */
299
- maxResults?: number;
300
- /** Order results */
130
+ /** 1–50 (default: 5) */
131
+ max_results?: number;
132
+ /** date, rating, relevance, title, videoCount, viewCount */
301
133
  order?: "date" | "rating" | "relevance" | "title" | "videoCount" | "viewCount";
302
- /** Channel ID filter */
303
- channelId?: string;
304
- /** Page token for pagination */
305
- pageToken?: string;
306
- /** Published after (RFC 3339) */
307
- publishedAfter?: string;
308
- /** Published before (RFC 3339) */
309
- publishedBefore?: string;
310
- /** Region code */
311
- regionCode?: string;
312
- /** Safe search */
313
- safeSearch?: "moderate" | "none" | "strict";
314
134
  }): Promise<MCPToolCallResponse>;
315
135
  /**
316
- * Get video details
136
+ * Get full details for a specific video
317
137
  *
318
138
  * @example
319
139
  * ```typescript
320
- * const video = await client.youtube.getVideo({
321
- * video_id: "dQw4w9WgXcQ"
322
- * });
140
+ * const video = await client.youtube.getVideo({ video_id: "dQw4w9WgXcQ" });
323
141
  * ```
324
142
  */
325
143
  getVideo(params: {
326
- /** Video ID */
144
+ /** YouTube video ID */
327
145
  video_id: string;
328
- /** Parts to include */
329
- part?: string[];
330
146
  }): Promise<MCPToolCallResponse>;
331
147
  /**
332
- * List playlists for a channel
148
+ * Get the authenticated user's own channel
333
149
  *
334
150
  * @example
335
151
  * ```typescript
336
- * const playlists = await client.youtube.listPlaylists({
337
- * channel_id: "UCxxxxxx",
338
- * maxResults: 25
339
- * });
152
+ * const channel = await client.youtube.getMyChannel();
153
+ * ```
154
+ */
155
+ getMyChannel(params?: Record<string, never>): Promise<MCPToolCallResponse>;
156
+ /**
157
+ * Get details for any channel by ID
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * const channel = await client.youtube.getChannel({ channel_id: "UCxxxxxx" });
340
162
  * ```
341
163
  */
342
- listPlaylists(params: {
343
- /** Channel ID */
164
+ getChannel(params: {
165
+ /** Channel ID (e.g. UCxxxxxx) */
344
166
  channel_id: string;
345
- /** Maximum results (1-50) */
346
- maxResults?: number;
347
- /** Page token for pagination */
348
- pageToken?: string;
349
167
  }): Promise<MCPToolCallResponse>;
350
168
  /**
351
- * Get playlist details
169
+ * List videos uploaded by the authenticated user
170
+ *
171
+ * Makes 2 API calls internally (fetches uploads playlist, then paginates it).
352
172
  *
353
173
  * @example
354
174
  * ```typescript
355
- * const playlist = await client.youtube.getPlaylist({
356
- * playlist_id: "PLxxxxxx"
357
- * });
175
+ * const videos = await client.youtube.listMyVideos({ max_results: 20 });
176
+ * ```
177
+ */
178
+ listMyVideos(params?: {
179
+ /** 1–50 (default: 10) */
180
+ max_results?: number;
181
+ /** Pagination token from previous response */
182
+ page_token?: string;
183
+ }): Promise<MCPToolCallResponse>;
184
+ /**
185
+ * Get the authenticated user's rating for one or more videos
186
+ *
187
+ * @example
188
+ * ```typescript
189
+ * const rating = await client.youtube.getVideoRating({ video_id: "dQw4w9WgXcQ" });
190
+ * ```
191
+ */
192
+ getVideoRating(params: {
193
+ /** Video ID, or comma-separated list (max 50) */
194
+ video_id: string;
195
+ }): Promise<MCPToolCallResponse>;
196
+ /**
197
+ * List playlists for the authenticated user or a specific channel
198
+ *
199
+ * @example
200
+ * ```typescript
201
+ * const playlists = await client.youtube.listPlaylists({ max_results: 25 });
202
+ * ```
203
+ */
204
+ listPlaylists(params?: {
205
+ /** Channel ID, or omit for authenticated user's playlists */
206
+ channel_id?: string;
207
+ /** Default: 5 */
208
+ max_results?: number;
209
+ }): Promise<MCPToolCallResponse>;
210
+ /**
211
+ * Get details for a specific playlist
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * const playlist = await client.youtube.getPlaylist({ playlist_id: "PLxxxxxx" });
358
216
  * ```
359
217
  */
360
218
  getPlaylist(params: {
361
- /** Playlist ID */
219
+ /** Playlist ID (e.g. PLxxxxxx) */
362
220
  playlist_id: string;
363
- /** Parts to include */
364
- part?: string[];
365
221
  }): Promise<MCPToolCallResponse>;
366
222
  /**
367
223
  * List videos in a playlist
368
224
  *
225
+ * Each item's `id` is the playlist item ID needed for `removeFromPlaylist`.
226
+ *
369
227
  * @example
370
228
  * ```typescript
371
- * const items = await client.youtube.listPlaylistItems({
372
- * playlist_id: "PLxxxxxx",
373
- * maxResults: 50
374
- * });
229
+ * const items = await client.youtube.listPlaylistItems({ playlist_id: "PLxxxxxx" });
375
230
  * ```
376
231
  */
377
232
  listPlaylistItems(params: {
378
233
  /** Playlist ID */
379
234
  playlist_id: string;
380
- /** Maximum results (1-50) */
381
- maxResults?: number;
382
- /** Page token for pagination */
383
- pageToken?: string;
235
+ /** Default: 10 */
236
+ max_results?: number;
384
237
  }): Promise<MCPToolCallResponse>;
385
238
  /**
386
- * Get channel details
239
+ * List channels the authenticated user is subscribed to
240
+ *
241
+ * Each item's `id` is the subscription ID needed for `unsubscribe`.
387
242
  *
388
243
  * @example
389
244
  * ```typescript
390
- * const channel = await client.youtube.getChannel({
391
- * channel_id: "UCxxxxxx"
392
- * });
245
+ * const subs = await client.youtube.listSubscriptions({ max_results: 20 });
393
246
  * ```
394
247
  */
395
- getChannel(params: {
396
- /** Channel ID */
397
- channel_id: string;
398
- /** Parts to include */
399
- part?: string[];
248
+ listSubscriptions(params?: {
249
+ /** Default: 5 */
250
+ max_results?: number;
400
251
  }): Promise<MCPToolCallResponse>;
401
252
  /**
402
- * List channel subscriptions
253
+ * List top-level comment threads on a video
254
+ *
255
+ * Each item's `id` is the comment thread ID needed for `replyToComment`.
403
256
  *
404
257
  * @example
405
258
  * ```typescript
406
- * const subscriptions = await client.youtube.listSubscriptions({
407
- * maxResults: 50
408
- * });
259
+ * const threads = await client.youtube.listComments({ video_id: "dQw4w9WgXcQ" });
409
260
  * ```
410
261
  */
411
- listSubscriptions(params?: {
412
- /** Channel ID */
413
- channel_id?: string;
414
- /** Maximum results (1-50) */
415
- maxResults?: number;
416
- /** Page token for pagination */
417
- pageToken?: string;
418
- /** Order results */
419
- order?: "alphabetical" | "relevance" | "unread";
262
+ listComments(params: {
263
+ /** Video ID */
264
+ video_id: string;
265
+ /** Default: 10 */
266
+ max_results?: number;
420
267
  }): Promise<MCPToolCallResponse>;
421
268
  /**
422
- * List comments on a video
269
+ * List replies to a specific comment thread
423
270
  *
424
271
  * @example
425
272
  * ```typescript
426
- * const comments = await client.youtube.listComments({
427
- * video_id: "dQw4w9WgXcQ",
428
- * maxResults: 100
429
- * });
273
+ * const replies = await client.youtube.listCommentReplies({ comment_thread_id: "Ugw..." });
430
274
  * ```
431
275
  */
432
- listComments(params: {
276
+ listCommentReplies(params: {
277
+ /** Comment thread ID (the id from listComments) */
278
+ comment_thread_id: string;
279
+ /** Default: 20 */
280
+ max_results?: number;
281
+ }): Promise<MCPToolCallResponse>;
282
+ /**
283
+ * List available caption tracks for a video
284
+ *
285
+ * @example
286
+ * ```typescript
287
+ * const captions = await client.youtube.getCaptions({ video_id: "dQw4w9WgXcQ" });
288
+ * ```
289
+ */
290
+ getCaptions(params: {
433
291
  /** Video ID */
434
292
  video_id: string;
435
- /** Maximum results (1-100) */
436
- maxResults?: number;
437
- /** Page token for pagination */
438
- pageToken?: string;
439
- /** Text format */
440
- textFormat?: "html" | "plainText";
441
- /** Order results */
442
- order?: "time" | "relevance";
443
293
  }): Promise<MCPToolCallResponse>;
444
294
  /**
445
- * Get video captions/subtitles
295
+ * Like, dislike, or remove a rating from a video
446
296
  *
447
297
  * @example
448
298
  * ```typescript
449
- * const captions = await client.youtube.getCaptions({
450
- * video_id: "dQw4w9WgXcQ"
451
- * });
299
+ * await client.youtube.rateVideo({ video_id: "dQw4w9WgXcQ", rating: "like" });
452
300
  * ```
453
301
  */
454
- getCaptions(params: {
302
+ rateVideo(params: {
455
303
  /** Video ID */
456
304
  video_id: string;
305
+ /** like, dislike, or none */
306
+ rating: "like" | "dislike" | "none";
307
+ }): Promise<MCPToolCallResponse>;
308
+ /**
309
+ * Subscribe to a channel
310
+ *
311
+ * @example
312
+ * ```typescript
313
+ * await client.youtube.subscribe({ channel_id: "UCxxxxxx" });
314
+ * ```
315
+ */
316
+ subscribe(params: {
317
+ /** Channel ID to subscribe to */
318
+ channel_id: string;
319
+ }): Promise<MCPToolCallResponse>;
320
+ /**
321
+ * Unsubscribe from a channel
322
+ *
323
+ * Requires the subscription ID from `listSubscriptions`, not the channel ID.
324
+ *
325
+ * @example
326
+ * ```typescript
327
+ * await client.youtube.unsubscribe({ subscription_id: "sub_abc123" });
328
+ * ```
329
+ */
330
+ unsubscribe(params: {
331
+ /** Subscription ID (the id field from listSubscriptions) */
332
+ subscription_id: string;
333
+ }): Promise<MCPToolCallResponse>;
334
+ /**
335
+ * Post a new top-level comment on a video
336
+ *
337
+ * @example
338
+ * ```typescript
339
+ * await client.youtube.addComment({ video_id: "dQw4w9WgXcQ", text: "Great video!" });
340
+ * ```
341
+ */
342
+ addComment(params: {
343
+ /** Video ID to comment on */
344
+ video_id: string;
345
+ /** Comment text */
346
+ text: string;
347
+ }): Promise<MCPToolCallResponse>;
348
+ /**
349
+ * Reply to an existing comment thread
350
+ *
351
+ * @example
352
+ * ```typescript
353
+ * await client.youtube.replyToComment({ comment_thread_id: "Ugw...", text: "Thanks!" });
354
+ * ```
355
+ */
356
+ replyToComment(params: {
357
+ /** Comment thread ID (the id from listComments) */
358
+ comment_thread_id: string;
359
+ /** Reply text */
360
+ text: string;
361
+ }): Promise<MCPToolCallResponse>;
362
+ /**
363
+ * Create a new playlist
364
+ *
365
+ * @example
366
+ * ```typescript
367
+ * const pl = await client.youtube.createPlaylist({ title: "My Favorites", privacy_status: "private" });
368
+ * ```
369
+ */
370
+ createPlaylist(params: {
371
+ /** Playlist title */
372
+ title: string;
373
+ /** Playlist description */
374
+ description?: string;
375
+ /** public, private, or unlisted (default: public) */
376
+ privacy_status?: "public" | "private" | "unlisted";
377
+ }): Promise<MCPToolCallResponse>;
378
+ /**
379
+ * Update a playlist's metadata
380
+ *
381
+ * Fetches current state first — only specified fields are changed.
382
+ *
383
+ * @example
384
+ * ```typescript
385
+ * await client.youtube.updatePlaylist({ playlist_id: "PLxxxxxx", title: "New Title" });
386
+ * ```
387
+ */
388
+ updatePlaylist(params: {
389
+ /** Playlist ID */
390
+ playlist_id: string;
391
+ /** New title */
392
+ title?: string;
393
+ /** New description */
394
+ description?: string;
395
+ /** public, private, or unlisted */
396
+ privacy_status?: "public" | "private" | "unlisted";
397
+ }): Promise<MCPToolCallResponse>;
398
+ /**
399
+ * Permanently delete a playlist
400
+ *
401
+ * @example
402
+ * ```typescript
403
+ * await client.youtube.deletePlaylist({ playlist_id: "PLxxxxxx" });
404
+ * ```
405
+ */
406
+ deletePlaylist(params: {
407
+ /** Playlist ID */
408
+ playlist_id: string;
409
+ }): Promise<MCPToolCallResponse>;
410
+ /**
411
+ * Add a video to a playlist
412
+ *
413
+ * @example
414
+ * ```typescript
415
+ * await client.youtube.addToPlaylist({ playlist_id: "PLxxxxxx", video_id: "dQw4w9WgXcQ" });
416
+ * ```
417
+ */
418
+ addToPlaylist(params: {
419
+ /** Playlist ID */
420
+ playlist_id: string;
421
+ /** Video ID to add */
422
+ video_id: string;
423
+ /** 0-indexed position in the playlist */
424
+ position?: number;
425
+ }): Promise<MCPToolCallResponse>;
426
+ /**
427
+ * Remove an item from a playlist
428
+ *
429
+ * Requires the playlist item ID (the `id` from `listPlaylistItems`), not the video ID.
430
+ *
431
+ * @example
432
+ * ```typescript
433
+ * await client.youtube.removeFromPlaylist({ playlist_item_id: "PLitem_abc" });
434
+ * ```
435
+ */
436
+ removeFromPlaylist(params: {
437
+ /** Playlist item ID (the id field from listPlaylistItems) */
438
+ playlist_item_id: string;
439
+ }): Promise<MCPToolCallResponse>;
440
+ /**
441
+ * Update a video's metadata
442
+ *
443
+ * Fetches current snippet first — only specified fields are changed.
444
+ * Video must be owned by the authenticated user.
445
+ *
446
+ * @example
447
+ * ```typescript
448
+ * await client.youtube.updateVideo({
449
+ * video_id: "dQw4w9WgXcQ",
450
+ * title: "Updated Title",
451
+ * tags: "music,classic",
452
+ * });
453
+ * ```
454
+ */
455
+ updateVideo(params: {
456
+ /** Video ID (must be owned by authenticated user) */
457
+ video_id: string;
458
+ /** New title (max 100 chars) */
459
+ title?: string;
460
+ /** New description (max 5000 chars) */
461
+ description?: string;
462
+ /** Comma-separated tag list */
463
+ tags?: string;
464
+ /** YouTube category ID (e.g. 22 = People & Blogs, 28 = Science & Technology) */
465
+ category_id?: string;
457
466
  }): Promise<MCPToolCallResponse>;
458
467
  }
459
468
  //# sourceMappingURL=youtube-client.d.ts.map