integrate-sdk 0.9.25-dev.0 → 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.
- package/dist/adapters/index.js +28 -10
- package/dist/adapters/solid-start.js +28 -10
- package/dist/adapters/svelte-kit.js +28 -10
- package/dist/ai/anthropic.js +11 -1
- package/dist/ai/google.js +11 -1
- package/dist/ai/index.js +11 -1
- package/dist/ai/openai.js +11 -1
- package/dist/ai/vercel-ai.js +11 -1
- package/dist/code-mode/executor.js +5 -1
- package/dist/code-mode/index.js +11 -1
- package/dist/code-mode/runtime-stub.d.ts +1 -1
- package/dist/code-mode/runtime-stub.d.ts.map +1 -1
- package/dist/code-mode/runtime-stub.js +5 -1
- package/dist/code-mode/tool-builder.d.ts.map +1 -1
- package/dist/code-mode/tool-builder.js +11 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +197 -10
- package/dist/server.js +292 -64
- package/dist/src/code-mode/runtime-stub.d.ts +1 -1
- package/dist/src/code-mode/runtime-stub.d.ts.map +1 -1
- package/dist/src/code-mode/tool-builder.d.ts.map +1 -1
- package/dist/src/integrations/excel-client.d.ts +284 -0
- package/dist/src/integrations/excel-client.d.ts.map +1 -0
- package/dist/src/integrations/excel.d.ts +22 -0
- package/dist/src/integrations/excel.d.ts.map +1 -0
- package/dist/src/integrations/gdrive-client.d.ts +264 -0
- package/dist/src/integrations/gdrive-client.d.ts.map +1 -0
- package/dist/src/integrations/gdrive.d.ts +22 -0
- package/dist/src/integrations/gdrive.d.ts.map +1 -0
- package/dist/src/integrations/onedrive-client.d.ts +47 -250
- package/dist/src/integrations/onedrive-client.d.ts.map +1 -1
- package/dist/src/integrations/onedrive.d.ts +1 -1
- package/dist/src/integrations/onedrive.d.ts.map +1 -1
- package/dist/src/integrations/powerpoint-client.d.ts +99 -0
- package/dist/src/integrations/powerpoint-client.d.ts.map +1 -0
- package/dist/src/integrations/powerpoint.d.ts +22 -0
- package/dist/src/integrations/powerpoint.d.ts.map +1 -0
- package/dist/src/integrations/whatsapp-client.d.ts +406 -211
- package/dist/src/integrations/whatsapp-client.d.ts.map +1 -1
- package/dist/src/integrations/whatsapp.d.ts +1 -1
- package/dist/src/integrations/whatsapp.d.ts.map +1 -1
- package/dist/src/integrations/word-client.d.ts +99 -0
- package/dist/src/integrations/word-client.d.ts.map +1 -0
- package/dist/src/integrations/word.d.ts +22 -0
- package/dist/src/integrations/word.d.ts.map +1 -0
- package/dist/src/integrations/youtube-client.d.ts +292 -283
- package/dist/src/integrations/youtube-client.d.ts.map +1 -1
- package/dist/src/integrations/youtube.d.ts +2 -2
- package/dist/src/integrations/youtube.d.ts.map +1 -1
- package/dist/src/server.d.ts +4 -0
- package/dist/src/server.d.ts.map +1 -1
- package/index.ts +8 -0
- package/package.json +1 -1
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* YouTube Integration Client Types
|
|
3
|
-
* Fully typed interface for YouTube
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
-
|
|
103
|
+
publishedAt: string;
|
|
252
104
|
resourceId: {
|
|
253
105
|
kind: string;
|
|
254
106
|
channelId: string;
|
|
255
107
|
};
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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
|
-
|
|
296
|
-
/**
|
|
126
|
+
/** Search query text */
|
|
127
|
+
query: string;
|
|
128
|
+
/** video, channel, or playlist (default: video) */
|
|
297
129
|
type?: "video" | "channel" | "playlist";
|
|
298
|
-
/**
|
|
299
|
-
|
|
300
|
-
/**
|
|
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
|
|
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
|
-
/**
|
|
144
|
+
/** YouTube video ID */
|
|
327
145
|
video_id: string;
|
|
328
|
-
/** Parts to include */
|
|
329
|
-
part?: string[];
|
|
330
146
|
}): Promise<MCPToolCallResponse>;
|
|
331
147
|
/**
|
|
332
|
-
*
|
|
148
|
+
* Get the authenticated user's own channel
|
|
333
149
|
*
|
|
334
150
|
* @example
|
|
335
151
|
* ```typescript
|
|
336
|
-
* const
|
|
337
|
-
*
|
|
338
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
|
356
|
-
*
|
|
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
|
-
/**
|
|
381
|
-
|
|
382
|
-
/** Page token for pagination */
|
|
383
|
-
pageToken?: string;
|
|
235
|
+
/** Default: 10 */
|
|
236
|
+
max_results?: number;
|
|
384
237
|
}): Promise<MCPToolCallResponse>;
|
|
385
238
|
/**
|
|
386
|
-
*
|
|
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
|
|
391
|
-
* channel_id: "UCxxxxxx"
|
|
392
|
-
* });
|
|
245
|
+
* const subs = await client.youtube.listSubscriptions({ max_results: 20 });
|
|
393
246
|
* ```
|
|
394
247
|
*/
|
|
395
|
-
|
|
396
|
-
/**
|
|
397
|
-
|
|
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
|
|
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
|
|
407
|
-
* maxResults: 50
|
|
408
|
-
* });
|
|
259
|
+
* const threads = await client.youtube.listComments({ video_id: "dQw4w9WgXcQ" });
|
|
409
260
|
* ```
|
|
410
261
|
*/
|
|
411
|
-
|
|
412
|
-
/**
|
|
413
|
-
|
|
414
|
-
/**
|
|
415
|
-
|
|
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
|
|
269
|
+
* List replies to a specific comment thread
|
|
423
270
|
*
|
|
424
271
|
* @example
|
|
425
272
|
* ```typescript
|
|
426
|
-
* const
|
|
427
|
-
* video_id: "dQw4w9WgXcQ",
|
|
428
|
-
* maxResults: 100
|
|
429
|
-
* });
|
|
273
|
+
* const replies = await client.youtube.listCommentReplies({ comment_thread_id: "Ugw..." });
|
|
430
274
|
* ```
|
|
431
275
|
*/
|
|
432
|
-
|
|
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
|
-
*
|
|
295
|
+
* Like, dislike, or remove a rating from a video
|
|
446
296
|
*
|
|
447
297
|
* @example
|
|
448
298
|
* ```typescript
|
|
449
|
-
*
|
|
450
|
-
* video_id: "dQw4w9WgXcQ"
|
|
451
|
-
* });
|
|
299
|
+
* await client.youtube.rateVideo({ video_id: "dQw4w9WgXcQ", rating: "like" });
|
|
452
300
|
* ```
|
|
453
301
|
*/
|
|
454
|
-
|
|
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
|