@opentabs-dev/opentabs-plugin-twitch 0.0.81 → 0.0.82

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.
@@ -0,0 +1,1492 @@
1
+ {
2
+ "sdkVersion": "0.0.81",
3
+ "iconSvg": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.571 4.714h1.715v5.143H11.57zm4.715 0H18v5.143h-1.714zM6 0L1.714 4.286v15.428h5.143V24l4.286-4.286h3.428L22.286 12V0zm14.571 11.143l-3.428 3.428h-3.429l-3 3v-3H6.857V1.714h13.714Z\" fill=\"#9146FF\"/></svg>",
4
+ "iconInactiveSvg": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.571 4.714h1.715v5.143H11.57zm4.715 0H18v5.143h-1.714zM6 0L1.714 4.286v15.428h5.143V24l4.286-4.286h3.428L22.286 12V0zm14.571 11.143l-3.428 3.428h-3.429l-3 3v-3H6.857V1.714h13.714Z\" fill=\"#999999\"/></svg>",
5
+ "iconDarkSvg": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.571 4.714h1.715v5.143H11.57zm4.715 0H18v5.143h-1.714zM6 0L1.714 4.286v15.428h5.143V24l4.286-4.286h3.428L22.286 12V0zm14.571 11.143l-3.428 3.428h-3.429l-3 3v-3H6.857V1.714h13.714Z\" fill=\"#9146FF\"/></svg>",
6
+ "iconDarkInactiveSvg": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.571 4.714h1.715v5.143H11.57zm4.715 0H18v5.143h-1.714zM6 0L1.714 4.286v15.428h5.143V24l4.286-4.286h3.428L22.286 12V0zm14.571 11.143l-3.428 3.428h-3.429l-3 3v-3H6.857V1.714h13.714Z\" fill=\"#999999\"/></svg>",
7
+ "tools": [
8
+ {
9
+ "name": "get_current_user",
10
+ "displayName": "Get Current User",
11
+ "description": "Get the authenticated Twitch user profile including email, display name, follower count, partner/affiliate status, and account creation date.",
12
+ "summary": "Get the authenticated Twitch user profile",
13
+ "icon": "user",
14
+ "group": "Users",
15
+ "input_schema": {
16
+ "type": "object",
17
+ "properties": {},
18
+ "additionalProperties": false
19
+ },
20
+ "output_schema": {
21
+ "type": "object",
22
+ "properties": {
23
+ "user": {
24
+ "type": "object",
25
+ "properties": {
26
+ "id": {
27
+ "type": "string",
28
+ "description": "Twitch user ID"
29
+ },
30
+ "login": {
31
+ "type": "string",
32
+ "description": "Twitch login name (lowercase, URL-safe)"
33
+ },
34
+ "displayName": {
35
+ "type": "string",
36
+ "description": "User display name"
37
+ },
38
+ "profileImageURL": {
39
+ "type": "string",
40
+ "description": "URL of the user's profile image"
41
+ },
42
+ "description": {
43
+ "type": "string",
44
+ "description": "User bio / channel description"
45
+ },
46
+ "createdAt": {
47
+ "type": "string",
48
+ "description": "ISO 8601 timestamp of account creation"
49
+ },
50
+ "hasPrime": {
51
+ "type": "boolean",
52
+ "description": "Whether the user has Twitch Prime"
53
+ },
54
+ "roles": {
55
+ "type": "object",
56
+ "properties": {
57
+ "isPartner": {
58
+ "type": "boolean",
59
+ "description": "Whether the user is a Twitch Partner"
60
+ },
61
+ "isAffiliate": {
62
+ "type": "boolean",
63
+ "description": "Whether the user is a Twitch Affiliate"
64
+ }
65
+ },
66
+ "required": [
67
+ "isPartner",
68
+ "isAffiliate"
69
+ ],
70
+ "additionalProperties": false,
71
+ "description": "Partner and Affiliate status"
72
+ },
73
+ "followerCount": {
74
+ "type": "number",
75
+ "description": "Total number of followers"
76
+ }
77
+ },
78
+ "required": [
79
+ "id",
80
+ "login",
81
+ "displayName",
82
+ "profileImageURL",
83
+ "description",
84
+ "createdAt",
85
+ "hasPrime",
86
+ "roles",
87
+ "followerCount"
88
+ ],
89
+ "additionalProperties": false
90
+ }
91
+ },
92
+ "required": [
93
+ "user"
94
+ ],
95
+ "additionalProperties": false
96
+ }
97
+ },
98
+ {
99
+ "name": "get_user_profile",
100
+ "displayName": "Get User Profile",
101
+ "description": "Get a Twitch user profile by their login name. Returns display name, bio, follower count, partner/affiliate status, profile image, and account creation date.",
102
+ "summary": "Get a Twitch user profile by login name",
103
+ "icon": "user",
104
+ "group": "Users",
105
+ "input_schema": {
106
+ "type": "object",
107
+ "properties": {
108
+ "login": {
109
+ "type": "string",
110
+ "description": "Twitch login name (e.g., \"shroud\", \"ninja\")"
111
+ }
112
+ },
113
+ "required": [
114
+ "login"
115
+ ],
116
+ "additionalProperties": false
117
+ },
118
+ "output_schema": {
119
+ "type": "object",
120
+ "properties": {
121
+ "user": {
122
+ "type": "object",
123
+ "properties": {
124
+ "id": {
125
+ "type": "string",
126
+ "description": "Twitch user ID"
127
+ },
128
+ "login": {
129
+ "type": "string",
130
+ "description": "Twitch login name (lowercase, URL-safe)"
131
+ },
132
+ "displayName": {
133
+ "type": "string",
134
+ "description": "User display name"
135
+ },
136
+ "profileImageURL": {
137
+ "type": "string",
138
+ "description": "URL of the user's profile image"
139
+ },
140
+ "description": {
141
+ "type": "string",
142
+ "description": "User bio / channel description"
143
+ },
144
+ "createdAt": {
145
+ "type": "string",
146
+ "description": "ISO 8601 timestamp of account creation"
147
+ },
148
+ "hasPrime": {
149
+ "type": "boolean",
150
+ "description": "Whether the user has Twitch Prime"
151
+ },
152
+ "roles": {
153
+ "type": "object",
154
+ "properties": {
155
+ "isPartner": {
156
+ "type": "boolean",
157
+ "description": "Whether the user is a Twitch Partner"
158
+ },
159
+ "isAffiliate": {
160
+ "type": "boolean",
161
+ "description": "Whether the user is a Twitch Affiliate"
162
+ }
163
+ },
164
+ "required": [
165
+ "isPartner",
166
+ "isAffiliate"
167
+ ],
168
+ "additionalProperties": false,
169
+ "description": "Partner and Affiliate status"
170
+ },
171
+ "followerCount": {
172
+ "type": "number",
173
+ "description": "Total number of followers"
174
+ }
175
+ },
176
+ "required": [
177
+ "id",
178
+ "login",
179
+ "displayName",
180
+ "profileImageURL",
181
+ "description",
182
+ "createdAt",
183
+ "hasPrime",
184
+ "roles",
185
+ "followerCount"
186
+ ],
187
+ "additionalProperties": false
188
+ }
189
+ },
190
+ "required": [
191
+ "user"
192
+ ],
193
+ "additionalProperties": false
194
+ }
195
+ },
196
+ {
197
+ "name": "get_top_streams",
198
+ "displayName": "Get Top Streams",
199
+ "description": "Get the top live streams on Twitch sorted by viewer count. Returns stream title, viewer count, broadcaster info, and the game being played.",
200
+ "summary": "Get top live streams by viewer count",
201
+ "icon": "radio",
202
+ "group": "Streams",
203
+ "input_schema": {
204
+ "type": "object",
205
+ "properties": {
206
+ "first": {
207
+ "description": "Number of streams to return (default 10, max 25)",
208
+ "type": "integer",
209
+ "minimum": 1,
210
+ "maximum": 25
211
+ }
212
+ },
213
+ "additionalProperties": false
214
+ },
215
+ "output_schema": {
216
+ "type": "object",
217
+ "properties": {
218
+ "streams": {
219
+ "type": "array",
220
+ "items": {
221
+ "type": "object",
222
+ "properties": {
223
+ "id": {
224
+ "type": "string",
225
+ "description": "Stream ID"
226
+ },
227
+ "title": {
228
+ "type": "string",
229
+ "description": "Stream title"
230
+ },
231
+ "viewersCount": {
232
+ "type": "number",
233
+ "description": "Current number of viewers"
234
+ },
235
+ "type": {
236
+ "type": "string",
237
+ "description": "Stream type (e.g. \"live\")"
238
+ },
239
+ "createdAt": {
240
+ "type": "string",
241
+ "description": "ISO 8601 timestamp when the stream started"
242
+ },
243
+ "broadcaster": {
244
+ "type": "object",
245
+ "properties": {
246
+ "id": {
247
+ "type": "string",
248
+ "description": "Twitch user ID"
249
+ },
250
+ "login": {
251
+ "type": "string",
252
+ "description": "Twitch login name (lowercase, URL-safe)"
253
+ },
254
+ "displayName": {
255
+ "type": "string",
256
+ "description": "User display name"
257
+ },
258
+ "profileImageURL": {
259
+ "type": "string",
260
+ "description": "URL of the user's profile image"
261
+ }
262
+ },
263
+ "required": [
264
+ "id",
265
+ "login",
266
+ "displayName",
267
+ "profileImageURL"
268
+ ],
269
+ "additionalProperties": false,
270
+ "description": "Broadcaster info"
271
+ },
272
+ "game": {
273
+ "type": "object",
274
+ "properties": {
275
+ "id": {
276
+ "type": "string",
277
+ "description": "Game/category ID"
278
+ },
279
+ "name": {
280
+ "type": "string",
281
+ "description": "Game/category name"
282
+ }
283
+ },
284
+ "required": [
285
+ "id",
286
+ "name"
287
+ ],
288
+ "additionalProperties": false,
289
+ "description": "Game/category being streamed"
290
+ }
291
+ },
292
+ "required": [
293
+ "id",
294
+ "title",
295
+ "viewersCount",
296
+ "type",
297
+ "createdAt",
298
+ "broadcaster",
299
+ "game"
300
+ ],
301
+ "additionalProperties": false
302
+ }
303
+ }
304
+ },
305
+ "required": [
306
+ "streams"
307
+ ],
308
+ "additionalProperties": false
309
+ }
310
+ },
311
+ {
312
+ "name": "get_streams_by_game",
313
+ "displayName": "Get Streams by Game",
314
+ "description": "Get live streams for a specific game/category. Provide either the game name (e.g., \"Just Chatting\") or game ID. Returns streams sorted by viewer count.",
315
+ "summary": "Get live streams for a game or category",
316
+ "icon": "radio",
317
+ "group": "Streams",
318
+ "input_schema": {
319
+ "type": "object",
320
+ "properties": {
321
+ "name": {
322
+ "description": "Game name (e.g., \"Just Chatting\", \"Fortnite\")",
323
+ "type": "string"
324
+ },
325
+ "id": {
326
+ "description": "Game ID (alternative to name)",
327
+ "type": "string"
328
+ },
329
+ "first": {
330
+ "description": "Number of streams to return (default 10, max 25)",
331
+ "type": "integer",
332
+ "minimum": 1,
333
+ "maximum": 25
334
+ }
335
+ },
336
+ "additionalProperties": false
337
+ },
338
+ "output_schema": {
339
+ "type": "object",
340
+ "properties": {
341
+ "streams": {
342
+ "type": "array",
343
+ "items": {
344
+ "type": "object",
345
+ "properties": {
346
+ "id": {
347
+ "type": "string",
348
+ "description": "Stream ID"
349
+ },
350
+ "title": {
351
+ "type": "string",
352
+ "description": "Stream title"
353
+ },
354
+ "viewersCount": {
355
+ "type": "number",
356
+ "description": "Current number of viewers"
357
+ },
358
+ "type": {
359
+ "type": "string",
360
+ "description": "Stream type (e.g. \"live\")"
361
+ },
362
+ "createdAt": {
363
+ "type": "string",
364
+ "description": "ISO 8601 timestamp when the stream started"
365
+ },
366
+ "broadcaster": {
367
+ "type": "object",
368
+ "properties": {
369
+ "id": {
370
+ "type": "string",
371
+ "description": "Twitch user ID"
372
+ },
373
+ "login": {
374
+ "type": "string",
375
+ "description": "Twitch login name (lowercase, URL-safe)"
376
+ },
377
+ "displayName": {
378
+ "type": "string",
379
+ "description": "User display name"
380
+ },
381
+ "profileImageURL": {
382
+ "type": "string",
383
+ "description": "URL of the user's profile image"
384
+ }
385
+ },
386
+ "required": [
387
+ "id",
388
+ "login",
389
+ "displayName",
390
+ "profileImageURL"
391
+ ],
392
+ "additionalProperties": false,
393
+ "description": "Broadcaster info"
394
+ },
395
+ "game": {
396
+ "type": "object",
397
+ "properties": {
398
+ "id": {
399
+ "type": "string",
400
+ "description": "Game/category ID"
401
+ },
402
+ "name": {
403
+ "type": "string",
404
+ "description": "Game/category name"
405
+ }
406
+ },
407
+ "required": [
408
+ "id",
409
+ "name"
410
+ ],
411
+ "additionalProperties": false,
412
+ "description": "Game/category being streamed"
413
+ }
414
+ },
415
+ "required": [
416
+ "id",
417
+ "title",
418
+ "viewersCount",
419
+ "type",
420
+ "createdAt",
421
+ "broadcaster",
422
+ "game"
423
+ ],
424
+ "additionalProperties": false
425
+ }
426
+ }
427
+ },
428
+ "required": [
429
+ "streams"
430
+ ],
431
+ "additionalProperties": false
432
+ }
433
+ },
434
+ {
435
+ "name": "get_stream",
436
+ "displayName": "Get Stream",
437
+ "description": "Get the current live stream for a channel by login name. Returns stream title, viewer count, game, and start time. Returns null stream if the channel is offline.",
438
+ "summary": "Get live stream info for a channel",
439
+ "icon": "radio",
440
+ "group": "Streams",
441
+ "input_schema": {
442
+ "type": "object",
443
+ "properties": {
444
+ "login": {
445
+ "type": "string",
446
+ "description": "Channel login name (e.g., \"shroud\")"
447
+ }
448
+ },
449
+ "required": [
450
+ "login"
451
+ ],
452
+ "additionalProperties": false
453
+ },
454
+ "output_schema": {
455
+ "type": "object",
456
+ "properties": {
457
+ "stream": {
458
+ "anyOf": [
459
+ {
460
+ "type": "object",
461
+ "properties": {
462
+ "id": {
463
+ "type": "string",
464
+ "description": "Stream ID"
465
+ },
466
+ "title": {
467
+ "type": "string",
468
+ "description": "Stream title"
469
+ },
470
+ "viewersCount": {
471
+ "type": "number",
472
+ "description": "Current number of viewers"
473
+ },
474
+ "type": {
475
+ "type": "string",
476
+ "description": "Stream type (e.g. \"live\")"
477
+ },
478
+ "createdAt": {
479
+ "type": "string",
480
+ "description": "ISO 8601 timestamp when the stream started"
481
+ },
482
+ "broadcaster": {
483
+ "type": "object",
484
+ "properties": {
485
+ "id": {
486
+ "type": "string",
487
+ "description": "Twitch user ID"
488
+ },
489
+ "login": {
490
+ "type": "string",
491
+ "description": "Twitch login name (lowercase, URL-safe)"
492
+ },
493
+ "displayName": {
494
+ "type": "string",
495
+ "description": "User display name"
496
+ },
497
+ "profileImageURL": {
498
+ "type": "string",
499
+ "description": "URL of the user's profile image"
500
+ }
501
+ },
502
+ "required": [
503
+ "id",
504
+ "login",
505
+ "displayName",
506
+ "profileImageURL"
507
+ ],
508
+ "additionalProperties": false,
509
+ "description": "Broadcaster info"
510
+ },
511
+ "game": {
512
+ "type": "object",
513
+ "properties": {
514
+ "id": {
515
+ "type": "string",
516
+ "description": "Game/category ID"
517
+ },
518
+ "name": {
519
+ "type": "string",
520
+ "description": "Game/category name"
521
+ }
522
+ },
523
+ "required": [
524
+ "id",
525
+ "name"
526
+ ],
527
+ "additionalProperties": false,
528
+ "description": "Game/category being streamed"
529
+ }
530
+ },
531
+ "required": [
532
+ "id",
533
+ "title",
534
+ "viewersCount",
535
+ "type",
536
+ "createdAt",
537
+ "broadcaster",
538
+ "game"
539
+ ],
540
+ "additionalProperties": false
541
+ },
542
+ {
543
+ "type": "null"
544
+ }
545
+ ],
546
+ "description": "Current stream info, or null if offline"
547
+ },
548
+ "isLive": {
549
+ "type": "boolean",
550
+ "description": "Whether the channel is currently live"
551
+ }
552
+ },
553
+ "required": [
554
+ "stream",
555
+ "isLive"
556
+ ],
557
+ "additionalProperties": false
558
+ }
559
+ },
560
+ {
561
+ "name": "get_top_games",
562
+ "displayName": "Get Top Games",
563
+ "description": "Get the top games/categories on Twitch sorted by viewer count. Returns game name, total viewers, number of broadcasters, and box art URL.",
564
+ "summary": "Get top games and categories by viewer count",
565
+ "icon": "gamepad-2",
566
+ "group": "Games",
567
+ "input_schema": {
568
+ "type": "object",
569
+ "properties": {
570
+ "first": {
571
+ "description": "Number of games to return (default 10, max 25)",
572
+ "type": "integer",
573
+ "minimum": 1,
574
+ "maximum": 25
575
+ }
576
+ },
577
+ "additionalProperties": false
578
+ },
579
+ "output_schema": {
580
+ "type": "object",
581
+ "properties": {
582
+ "games": {
583
+ "type": "array",
584
+ "items": {
585
+ "type": "object",
586
+ "properties": {
587
+ "id": {
588
+ "type": "string",
589
+ "description": "Game/category ID"
590
+ },
591
+ "name": {
592
+ "type": "string",
593
+ "description": "Game/category name"
594
+ },
595
+ "displayName": {
596
+ "type": "string",
597
+ "description": "Localized display name for the game"
598
+ },
599
+ "viewersCount": {
600
+ "type": "number",
601
+ "description": "Total viewers across all streams"
602
+ },
603
+ "broadcastersCount": {
604
+ "type": "number",
605
+ "description": "Number of channels currently streaming this game"
606
+ },
607
+ "boxArtURL": {
608
+ "type": "string",
609
+ "description": "URL of the game box art image"
610
+ }
611
+ },
612
+ "required": [
613
+ "id",
614
+ "name",
615
+ "displayName",
616
+ "viewersCount",
617
+ "broadcastersCount",
618
+ "boxArtURL"
619
+ ],
620
+ "additionalProperties": false
621
+ }
622
+ }
623
+ },
624
+ "required": [
625
+ "games"
626
+ ],
627
+ "additionalProperties": false
628
+ }
629
+ },
630
+ {
631
+ "name": "get_game",
632
+ "displayName": "Get Game",
633
+ "description": "Get details about a specific game/category on Twitch by name or ID. Returns viewer count, broadcaster count, and box art URL.",
634
+ "summary": "Get game/category details",
635
+ "icon": "gamepad-2",
636
+ "group": "Games",
637
+ "input_schema": {
638
+ "type": "object",
639
+ "properties": {
640
+ "name": {
641
+ "description": "Game name (e.g., \"Just Chatting\", \"Fortnite\")",
642
+ "type": "string"
643
+ },
644
+ "id": {
645
+ "description": "Game ID (alternative to name)",
646
+ "type": "string"
647
+ }
648
+ },
649
+ "additionalProperties": false
650
+ },
651
+ "output_schema": {
652
+ "type": "object",
653
+ "properties": {
654
+ "game": {
655
+ "type": "object",
656
+ "properties": {
657
+ "id": {
658
+ "type": "string",
659
+ "description": "Game/category ID"
660
+ },
661
+ "name": {
662
+ "type": "string",
663
+ "description": "Game/category name"
664
+ },
665
+ "displayName": {
666
+ "type": "string",
667
+ "description": "Localized display name for the game"
668
+ },
669
+ "viewersCount": {
670
+ "type": "number",
671
+ "description": "Total viewers across all streams"
672
+ },
673
+ "broadcastersCount": {
674
+ "type": "number",
675
+ "description": "Number of channels currently streaming this game"
676
+ },
677
+ "boxArtURL": {
678
+ "type": "string",
679
+ "description": "URL of the game box art image"
680
+ }
681
+ },
682
+ "required": [
683
+ "id",
684
+ "name",
685
+ "displayName",
686
+ "viewersCount",
687
+ "broadcastersCount",
688
+ "boxArtURL"
689
+ ],
690
+ "additionalProperties": false
691
+ }
692
+ },
693
+ "required": [
694
+ "game"
695
+ ],
696
+ "additionalProperties": false
697
+ }
698
+ },
699
+ {
700
+ "name": "search_channels",
701
+ "displayName": "Search Channels",
702
+ "description": "Search for Twitch channels by keyword. Returns matching channels with their live status, follower count, and current stream info if live.",
703
+ "summary": "Search for Twitch channels",
704
+ "icon": "search",
705
+ "group": "Search",
706
+ "input_schema": {
707
+ "type": "object",
708
+ "properties": {
709
+ "query": {
710
+ "type": "string",
711
+ "description": "Search query text"
712
+ }
713
+ },
714
+ "required": [
715
+ "query"
716
+ ],
717
+ "additionalProperties": false
718
+ },
719
+ "output_schema": {
720
+ "type": "object",
721
+ "properties": {
722
+ "channels": {
723
+ "type": "array",
724
+ "items": {
725
+ "type": "object",
726
+ "properties": {
727
+ "id": {
728
+ "type": "string",
729
+ "description": "Channel user ID"
730
+ },
731
+ "login": {
732
+ "type": "string",
733
+ "description": "Channel login name"
734
+ },
735
+ "displayName": {
736
+ "type": "string",
737
+ "description": "Channel display name"
738
+ },
739
+ "profileImageURL": {
740
+ "type": "string",
741
+ "description": "Profile image URL"
742
+ },
743
+ "followerCount": {
744
+ "type": "number",
745
+ "description": "Total number of followers"
746
+ },
747
+ "isLive": {
748
+ "type": "boolean",
749
+ "description": "Whether the channel is currently live"
750
+ },
751
+ "stream": {
752
+ "anyOf": [
753
+ {
754
+ "type": "object",
755
+ "properties": {
756
+ "id": {
757
+ "type": "string",
758
+ "description": "Stream ID"
759
+ },
760
+ "title": {
761
+ "type": "string",
762
+ "description": "Stream title"
763
+ },
764
+ "viewersCount": {
765
+ "type": "number",
766
+ "description": "Current number of viewers"
767
+ },
768
+ "type": {
769
+ "type": "string",
770
+ "description": "Stream type (e.g. \"live\")"
771
+ },
772
+ "createdAt": {
773
+ "type": "string",
774
+ "description": "ISO 8601 timestamp when the stream started"
775
+ },
776
+ "broadcaster": {
777
+ "type": "object",
778
+ "properties": {
779
+ "id": {
780
+ "type": "string",
781
+ "description": "Twitch user ID"
782
+ },
783
+ "login": {
784
+ "type": "string",
785
+ "description": "Twitch login name (lowercase, URL-safe)"
786
+ },
787
+ "displayName": {
788
+ "type": "string",
789
+ "description": "User display name"
790
+ },
791
+ "profileImageURL": {
792
+ "type": "string",
793
+ "description": "URL of the user's profile image"
794
+ }
795
+ },
796
+ "required": [
797
+ "id",
798
+ "login",
799
+ "displayName",
800
+ "profileImageURL"
801
+ ],
802
+ "additionalProperties": false,
803
+ "description": "Broadcaster info"
804
+ },
805
+ "game": {
806
+ "type": "object",
807
+ "properties": {
808
+ "id": {
809
+ "type": "string",
810
+ "description": "Game/category ID"
811
+ },
812
+ "name": {
813
+ "type": "string",
814
+ "description": "Game/category name"
815
+ }
816
+ },
817
+ "required": [
818
+ "id",
819
+ "name"
820
+ ],
821
+ "additionalProperties": false,
822
+ "description": "Game/category being streamed"
823
+ }
824
+ },
825
+ "required": [
826
+ "id",
827
+ "title",
828
+ "viewersCount",
829
+ "type",
830
+ "createdAt",
831
+ "broadcaster",
832
+ "game"
833
+ ],
834
+ "additionalProperties": false
835
+ },
836
+ {
837
+ "type": "null"
838
+ }
839
+ ],
840
+ "description": "Current stream info if live, null otherwise"
841
+ }
842
+ },
843
+ "required": [
844
+ "id",
845
+ "login",
846
+ "displayName",
847
+ "profileImageURL",
848
+ "followerCount",
849
+ "isLive",
850
+ "stream"
851
+ ],
852
+ "additionalProperties": false
853
+ }
854
+ }
855
+ },
856
+ "required": [
857
+ "channels"
858
+ ],
859
+ "additionalProperties": false
860
+ }
861
+ },
862
+ {
863
+ "name": "search_categories",
864
+ "displayName": "Search Categories",
865
+ "description": "Search for games and categories on Twitch by keyword. Returns matching games with viewer counts and box art.",
866
+ "summary": "Search for games and categories",
867
+ "icon": "search",
868
+ "group": "Search",
869
+ "input_schema": {
870
+ "type": "object",
871
+ "properties": {
872
+ "query": {
873
+ "type": "string",
874
+ "description": "Search query text"
875
+ }
876
+ },
877
+ "required": [
878
+ "query"
879
+ ],
880
+ "additionalProperties": false
881
+ },
882
+ "output_schema": {
883
+ "type": "object",
884
+ "properties": {
885
+ "categories": {
886
+ "type": "array",
887
+ "items": {
888
+ "type": "object",
889
+ "properties": {
890
+ "id": {
891
+ "type": "string",
892
+ "description": "Game/category ID"
893
+ },
894
+ "name": {
895
+ "type": "string",
896
+ "description": "Game/category name"
897
+ },
898
+ "displayName": {
899
+ "type": "string",
900
+ "description": "Localized display name for the game"
901
+ },
902
+ "viewersCount": {
903
+ "type": "number",
904
+ "description": "Total viewers across all streams"
905
+ },
906
+ "broadcastersCount": {
907
+ "type": "number",
908
+ "description": "Number of channels currently streaming this game"
909
+ },
910
+ "boxArtURL": {
911
+ "type": "string",
912
+ "description": "URL of the game box art image"
913
+ }
914
+ },
915
+ "required": [
916
+ "id",
917
+ "name",
918
+ "displayName",
919
+ "viewersCount",
920
+ "broadcastersCount",
921
+ "boxArtURL"
922
+ ],
923
+ "additionalProperties": false
924
+ }
925
+ }
926
+ },
927
+ "required": [
928
+ "categories"
929
+ ],
930
+ "additionalProperties": false
931
+ }
932
+ },
933
+ {
934
+ "name": "get_user_clips",
935
+ "displayName": "Get User Clips",
936
+ "description": "Get clips from a Twitch channel sorted by view count. Provide the broadcaster login name and optionally filter by time period.",
937
+ "summary": "Get clips from a Twitch channel",
938
+ "icon": "clapperboard",
939
+ "group": "Clips",
940
+ "input_schema": {
941
+ "type": "object",
942
+ "properties": {
943
+ "login": {
944
+ "type": "string",
945
+ "description": "Broadcaster login name (e.g., \"shroud\")"
946
+ },
947
+ "period": {
948
+ "description": "Time period filter (default ALL_TIME)",
949
+ "type": "string",
950
+ "enum": [
951
+ "LAST_DAY",
952
+ "LAST_WEEK",
953
+ "LAST_MONTH",
954
+ "ALL_TIME"
955
+ ]
956
+ },
957
+ "first": {
958
+ "description": "Number of clips to return (default 10, max 25)",
959
+ "type": "integer",
960
+ "minimum": 1,
961
+ "maximum": 25
962
+ }
963
+ },
964
+ "required": [
965
+ "login"
966
+ ],
967
+ "additionalProperties": false
968
+ },
969
+ "output_schema": {
970
+ "type": "object",
971
+ "properties": {
972
+ "clips": {
973
+ "type": "array",
974
+ "items": {
975
+ "type": "object",
976
+ "properties": {
977
+ "id": {
978
+ "type": "string",
979
+ "description": "Clip ID"
980
+ },
981
+ "slug": {
982
+ "type": "string",
983
+ "description": "URL-safe slug for the clip"
984
+ },
985
+ "title": {
986
+ "type": "string",
987
+ "description": "Clip title"
988
+ },
989
+ "viewCount": {
990
+ "type": "number",
991
+ "description": "Total number of views"
992
+ },
993
+ "createdAt": {
994
+ "type": "string",
995
+ "description": "ISO 8601 timestamp when the clip was created"
996
+ },
997
+ "thumbnailURL": {
998
+ "type": "string",
999
+ "description": "URL of the clip thumbnail image"
1000
+ },
1001
+ "durationSeconds": {
1002
+ "type": "number",
1003
+ "description": "Clip duration in seconds"
1004
+ },
1005
+ "broadcaster": {
1006
+ "type": "object",
1007
+ "properties": {
1008
+ "id": {
1009
+ "type": "string",
1010
+ "description": "Broadcaster user ID"
1011
+ },
1012
+ "login": {
1013
+ "type": "string",
1014
+ "description": "Broadcaster login name"
1015
+ },
1016
+ "displayName": {
1017
+ "type": "string",
1018
+ "description": "Broadcaster display name"
1019
+ }
1020
+ },
1021
+ "required": [
1022
+ "id",
1023
+ "login",
1024
+ "displayName"
1025
+ ],
1026
+ "additionalProperties": false,
1027
+ "description": "Broadcaster who was clipped"
1028
+ },
1029
+ "game": {
1030
+ "type": "object",
1031
+ "properties": {
1032
+ "id": {
1033
+ "type": "string",
1034
+ "description": "Game/category ID"
1035
+ },
1036
+ "name": {
1037
+ "type": "string",
1038
+ "description": "Game/category name"
1039
+ }
1040
+ },
1041
+ "required": [
1042
+ "id",
1043
+ "name"
1044
+ ],
1045
+ "additionalProperties": false,
1046
+ "description": "Game/category at the time of the clip"
1047
+ }
1048
+ },
1049
+ "required": [
1050
+ "id",
1051
+ "slug",
1052
+ "title",
1053
+ "viewCount",
1054
+ "createdAt",
1055
+ "thumbnailURL",
1056
+ "durationSeconds",
1057
+ "broadcaster",
1058
+ "game"
1059
+ ],
1060
+ "additionalProperties": false
1061
+ }
1062
+ }
1063
+ },
1064
+ "required": [
1065
+ "clips"
1066
+ ],
1067
+ "additionalProperties": false
1068
+ }
1069
+ },
1070
+ {
1071
+ "name": "get_game_clips",
1072
+ "displayName": "Get Game Clips",
1073
+ "description": "Get top clips for a specific game/category on Twitch. Provide the game name and optionally filter by time period.",
1074
+ "summary": "Get top clips for a game or category",
1075
+ "icon": "clapperboard",
1076
+ "group": "Clips",
1077
+ "input_schema": {
1078
+ "type": "object",
1079
+ "properties": {
1080
+ "name": {
1081
+ "type": "string",
1082
+ "description": "Game name (e.g., \"Fortnite\", \"Just Chatting\")"
1083
+ },
1084
+ "period": {
1085
+ "description": "Time period filter (default LAST_WEEK)",
1086
+ "type": "string",
1087
+ "enum": [
1088
+ "LAST_DAY",
1089
+ "LAST_WEEK",
1090
+ "LAST_MONTH",
1091
+ "ALL_TIME"
1092
+ ]
1093
+ },
1094
+ "first": {
1095
+ "description": "Number of clips to return (default 10, max 25)",
1096
+ "type": "integer",
1097
+ "minimum": 1,
1098
+ "maximum": 25
1099
+ }
1100
+ },
1101
+ "required": [
1102
+ "name"
1103
+ ],
1104
+ "additionalProperties": false
1105
+ },
1106
+ "output_schema": {
1107
+ "type": "object",
1108
+ "properties": {
1109
+ "clips": {
1110
+ "type": "array",
1111
+ "items": {
1112
+ "type": "object",
1113
+ "properties": {
1114
+ "id": {
1115
+ "type": "string",
1116
+ "description": "Clip ID"
1117
+ },
1118
+ "slug": {
1119
+ "type": "string",
1120
+ "description": "URL-safe slug for the clip"
1121
+ },
1122
+ "title": {
1123
+ "type": "string",
1124
+ "description": "Clip title"
1125
+ },
1126
+ "viewCount": {
1127
+ "type": "number",
1128
+ "description": "Total number of views"
1129
+ },
1130
+ "createdAt": {
1131
+ "type": "string",
1132
+ "description": "ISO 8601 timestamp when the clip was created"
1133
+ },
1134
+ "thumbnailURL": {
1135
+ "type": "string",
1136
+ "description": "URL of the clip thumbnail image"
1137
+ },
1138
+ "durationSeconds": {
1139
+ "type": "number",
1140
+ "description": "Clip duration in seconds"
1141
+ },
1142
+ "broadcaster": {
1143
+ "type": "object",
1144
+ "properties": {
1145
+ "id": {
1146
+ "type": "string",
1147
+ "description": "Broadcaster user ID"
1148
+ },
1149
+ "login": {
1150
+ "type": "string",
1151
+ "description": "Broadcaster login name"
1152
+ },
1153
+ "displayName": {
1154
+ "type": "string",
1155
+ "description": "Broadcaster display name"
1156
+ }
1157
+ },
1158
+ "required": [
1159
+ "id",
1160
+ "login",
1161
+ "displayName"
1162
+ ],
1163
+ "additionalProperties": false,
1164
+ "description": "Broadcaster who was clipped"
1165
+ },
1166
+ "game": {
1167
+ "type": "object",
1168
+ "properties": {
1169
+ "id": {
1170
+ "type": "string",
1171
+ "description": "Game/category ID"
1172
+ },
1173
+ "name": {
1174
+ "type": "string",
1175
+ "description": "Game/category name"
1176
+ }
1177
+ },
1178
+ "required": [
1179
+ "id",
1180
+ "name"
1181
+ ],
1182
+ "additionalProperties": false,
1183
+ "description": "Game/category at the time of the clip"
1184
+ }
1185
+ },
1186
+ "required": [
1187
+ "id",
1188
+ "slug",
1189
+ "title",
1190
+ "viewCount",
1191
+ "createdAt",
1192
+ "thumbnailURL",
1193
+ "durationSeconds",
1194
+ "broadcaster",
1195
+ "game"
1196
+ ],
1197
+ "additionalProperties": false
1198
+ }
1199
+ }
1200
+ },
1201
+ "required": [
1202
+ "clips"
1203
+ ],
1204
+ "additionalProperties": false
1205
+ }
1206
+ },
1207
+ {
1208
+ "name": "get_user_videos",
1209
+ "displayName": "Get User Videos",
1210
+ "description": "Get videos (VODs, highlights, uploads) from a Twitch channel. Optionally filter by video type and sort order.",
1211
+ "summary": "Get videos from a Twitch channel",
1212
+ "icon": "video",
1213
+ "group": "Videos",
1214
+ "input_schema": {
1215
+ "type": "object",
1216
+ "properties": {
1217
+ "login": {
1218
+ "type": "string",
1219
+ "description": "Broadcaster login name (e.g., \"shroud\")"
1220
+ },
1221
+ "type": {
1222
+ "description": "Video type filter (default: all types)",
1223
+ "type": "string",
1224
+ "enum": [
1225
+ "ARCHIVE",
1226
+ "HIGHLIGHT",
1227
+ "UPLOAD",
1228
+ "PAST_PREMIERE"
1229
+ ]
1230
+ },
1231
+ "sort": {
1232
+ "description": "Sort order (default TIME — most recent first)",
1233
+ "type": "string",
1234
+ "enum": [
1235
+ "TIME",
1236
+ "VIEWS"
1237
+ ]
1238
+ },
1239
+ "first": {
1240
+ "description": "Number of videos to return (default 10, max 25)",
1241
+ "type": "integer",
1242
+ "minimum": 1,
1243
+ "maximum": 25
1244
+ }
1245
+ },
1246
+ "required": [
1247
+ "login"
1248
+ ],
1249
+ "additionalProperties": false
1250
+ },
1251
+ "output_schema": {
1252
+ "type": "object",
1253
+ "properties": {
1254
+ "videos": {
1255
+ "type": "array",
1256
+ "items": {
1257
+ "type": "object",
1258
+ "properties": {
1259
+ "id": {
1260
+ "type": "string",
1261
+ "description": "Video ID"
1262
+ },
1263
+ "title": {
1264
+ "type": "string",
1265
+ "description": "Video title"
1266
+ },
1267
+ "viewCount": {
1268
+ "type": "number",
1269
+ "description": "Total number of views"
1270
+ },
1271
+ "publishedAt": {
1272
+ "type": "string",
1273
+ "description": "ISO 8601 timestamp when the video was published"
1274
+ },
1275
+ "lengthSeconds": {
1276
+ "type": "number",
1277
+ "description": "Video duration in seconds"
1278
+ },
1279
+ "game": {
1280
+ "type": "object",
1281
+ "properties": {
1282
+ "id": {
1283
+ "type": "string",
1284
+ "description": "Game/category ID"
1285
+ },
1286
+ "name": {
1287
+ "type": "string",
1288
+ "description": "Game/category name"
1289
+ }
1290
+ },
1291
+ "required": [
1292
+ "id",
1293
+ "name"
1294
+ ],
1295
+ "additionalProperties": false,
1296
+ "description": "Game/category associated with the video"
1297
+ },
1298
+ "thumbnailURL": {
1299
+ "type": "string",
1300
+ "description": "URL of the video thumbnail image"
1301
+ }
1302
+ },
1303
+ "required": [
1304
+ "id",
1305
+ "title",
1306
+ "viewCount",
1307
+ "publishedAt",
1308
+ "lengthSeconds",
1309
+ "game",
1310
+ "thumbnailURL"
1311
+ ],
1312
+ "additionalProperties": false
1313
+ }
1314
+ },
1315
+ "totalCount": {
1316
+ "type": "number",
1317
+ "description": "Total number of videos available"
1318
+ }
1319
+ },
1320
+ "required": [
1321
+ "videos",
1322
+ "totalCount"
1323
+ ],
1324
+ "additionalProperties": false
1325
+ }
1326
+ },
1327
+ {
1328
+ "name": "get_video",
1329
+ "displayName": "Get Video",
1330
+ "description": "Get details about a specific Twitch video by its ID. Returns title, view count, duration, game, and broadcaster info.",
1331
+ "summary": "Get details about a specific video",
1332
+ "icon": "video",
1333
+ "group": "Videos",
1334
+ "input_schema": {
1335
+ "type": "object",
1336
+ "properties": {
1337
+ "id": {
1338
+ "type": "string",
1339
+ "description": "Video ID (e.g., \"2717949378\")"
1340
+ }
1341
+ },
1342
+ "required": [
1343
+ "id"
1344
+ ],
1345
+ "additionalProperties": false
1346
+ },
1347
+ "output_schema": {
1348
+ "type": "object",
1349
+ "properties": {
1350
+ "video": {
1351
+ "type": "object",
1352
+ "properties": {
1353
+ "id": {
1354
+ "type": "string",
1355
+ "description": "Video ID"
1356
+ },
1357
+ "title": {
1358
+ "type": "string",
1359
+ "description": "Video title"
1360
+ },
1361
+ "viewCount": {
1362
+ "type": "number",
1363
+ "description": "Total number of views"
1364
+ },
1365
+ "publishedAt": {
1366
+ "type": "string",
1367
+ "description": "ISO 8601 timestamp when the video was published"
1368
+ },
1369
+ "lengthSeconds": {
1370
+ "type": "number",
1371
+ "description": "Video duration in seconds"
1372
+ },
1373
+ "game": {
1374
+ "type": "object",
1375
+ "properties": {
1376
+ "id": {
1377
+ "type": "string",
1378
+ "description": "Game/category ID"
1379
+ },
1380
+ "name": {
1381
+ "type": "string",
1382
+ "description": "Game/category name"
1383
+ }
1384
+ },
1385
+ "required": [
1386
+ "id",
1387
+ "name"
1388
+ ],
1389
+ "additionalProperties": false,
1390
+ "description": "Game/category associated with the video"
1391
+ },
1392
+ "thumbnailURL": {
1393
+ "type": "string",
1394
+ "description": "URL of the video thumbnail image"
1395
+ },
1396
+ "broadcaster": {
1397
+ "type": "object",
1398
+ "properties": {
1399
+ "id": {
1400
+ "type": "string",
1401
+ "description": "Broadcaster user ID"
1402
+ },
1403
+ "login": {
1404
+ "type": "string",
1405
+ "description": "Broadcaster login name"
1406
+ },
1407
+ "displayName": {
1408
+ "type": "string",
1409
+ "description": "Broadcaster display name"
1410
+ }
1411
+ },
1412
+ "required": [
1413
+ "id",
1414
+ "login",
1415
+ "displayName"
1416
+ ],
1417
+ "additionalProperties": false,
1418
+ "description": "Video broadcaster"
1419
+ }
1420
+ },
1421
+ "required": [
1422
+ "id",
1423
+ "title",
1424
+ "viewCount",
1425
+ "publishedAt",
1426
+ "lengthSeconds",
1427
+ "game",
1428
+ "thumbnailURL",
1429
+ "broadcaster"
1430
+ ],
1431
+ "additionalProperties": false
1432
+ }
1433
+ },
1434
+ "required": [
1435
+ "video"
1436
+ ],
1437
+ "additionalProperties": false
1438
+ }
1439
+ },
1440
+ {
1441
+ "name": "get_channel_emotes",
1442
+ "displayName": "Get Channel Emotes",
1443
+ "description": "Get subscription emotes for a Twitch channel. Returns the emote name (token) and ID for each emote across all subscription tiers.",
1444
+ "summary": "Get subscription emotes for a channel",
1445
+ "icon": "smile",
1446
+ "group": "Chat",
1447
+ "input_schema": {
1448
+ "type": "object",
1449
+ "properties": {
1450
+ "login": {
1451
+ "type": "string",
1452
+ "description": "Channel login name (e.g., \"shroud\")"
1453
+ }
1454
+ },
1455
+ "required": [
1456
+ "login"
1457
+ ],
1458
+ "additionalProperties": false
1459
+ },
1460
+ "output_schema": {
1461
+ "type": "object",
1462
+ "properties": {
1463
+ "emotes": {
1464
+ "type": "array",
1465
+ "items": {
1466
+ "type": "object",
1467
+ "properties": {
1468
+ "id": {
1469
+ "type": "string",
1470
+ "description": "Emote ID"
1471
+ },
1472
+ "token": {
1473
+ "type": "string",
1474
+ "description": "Emote name/token used in chat"
1475
+ }
1476
+ },
1477
+ "required": [
1478
+ "id",
1479
+ "token"
1480
+ ],
1481
+ "additionalProperties": false
1482
+ }
1483
+ }
1484
+ },
1485
+ "required": [
1486
+ "emotes"
1487
+ ],
1488
+ "additionalProperties": false
1489
+ }
1490
+ }
1491
+ ]
1492
+ }