@edubase/mcp 1.0.23 → 1.1.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.
@@ -1,1504 +1,199 @@
1
+ import * as z from 'zod/v4';
2
+ const tagRelationContentSchema = (entity) => z.object({
3
+ type: z.string().describe(`will be "${entity.contentType}"`),
4
+ code: z.string().describe(entity.contentCodeDescription),
5
+ id: z.string().describe(entity.contentIdDescription),
6
+ });
7
+ const createEntityTagTools = (entity) => [
8
+ {
9
+ name: `edubase_get_${entity.key}_tags`,
10
+ description: entity.listDescription,
11
+ inputSchema: z.object({
12
+ [entity.key]: z.string().describe(entity.paramDescription),
13
+ }),
14
+ outputSchema: z.array(z.object({
15
+ tag: z.string().describe('tag identification string'),
16
+ id: z.string().describe('external unique tag identifier (if set for the tag)'),
17
+ name: z.string().describe('title of the tag'),
18
+ })),
19
+ },
20
+ {
21
+ name: `edubase_get_${entity.key}_tag`,
22
+ description: entity.checkDescription,
23
+ inputSchema: z.object({
24
+ [entity.key]: z.string().describe(entity.paramDescription),
25
+ tag: z.string().describe('tag identification string'),
26
+ }),
27
+ outputSchema: z.object({
28
+ tag: z.string().describe('the tag identification string'),
29
+ content: tagRelationContentSchema(entity),
30
+ status: z.boolean().describe(entity.statusDescription),
31
+ }),
32
+ },
33
+ {
34
+ name: `edubase_post_${entity.key}_tag`,
35
+ description: entity.attachDescription,
36
+ inputSchema: z.object({
37
+ [entity.key]: z.string().describe(entity.paramDescription),
38
+ tag: z.string().describe('tag identification string'),
39
+ }),
40
+ outputSchema: z.object({
41
+ tag: z.string().describe('the tag identification string'),
42
+ content: tagRelationContentSchema(entity),
43
+ success: z.boolean().describe('operation was successful'),
44
+ }),
45
+ },
46
+ {
47
+ name: `edubase_delete_${entity.key}_tag`,
48
+ description: entity.removeDescription,
49
+ inputSchema: z.object({
50
+ [entity.key]: z.string().describe(entity.paramDescription),
51
+ tag: z.string().describe('tag identification string'),
52
+ }),
53
+ outputSchema: z.object({}).optional(),
54
+ },
55
+ ];
56
+ const TAG_ENTITIES = [
57
+ {
58
+ key: 'class',
59
+ paramDescription: 'class identification string',
60
+ listDescription: 'List all attached tags of a class.',
61
+ checkDescription: 'Check if tag is attached to a class.',
62
+ attachDescription: 'Attach tag to a class.',
63
+ removeDescription: 'Remove a tag attachment from a class.',
64
+ contentType: 'class',
65
+ contentCodeDescription: 'the class identification string',
66
+ contentIdDescription: 'external unique class identifier (if set for the class)',
67
+ statusDescription: 'tag is attached to this class',
68
+ },
69
+ {
70
+ key: 'course',
71
+ paramDescription: 'course identification string',
72
+ listDescription: 'List all attached tags of a course.',
73
+ checkDescription: 'Check if tag is attached to a course.',
74
+ attachDescription: 'Attach tag to a course.',
75
+ removeDescription: 'Remove a tag attachment from a course.',
76
+ contentType: 'course',
77
+ contentCodeDescription: 'the course identification string',
78
+ contentIdDescription: 'external unique course identifier (if set for the course)',
79
+ statusDescription: 'tag is attached to this course',
80
+ },
81
+ {
82
+ key: 'event',
83
+ paramDescription: 'event identification string',
84
+ listDescription: 'List all attached tags of an event.',
85
+ checkDescription: 'Check if tag is attached to an event.',
86
+ attachDescription: 'Attach tag to an event.',
87
+ removeDescription: 'Remove a tag attachment from an event.',
88
+ contentType: 'event',
89
+ contentCodeDescription: 'the event identification string',
90
+ contentIdDescription: 'external unique event identifier (if set for the event)',
91
+ statusDescription: 'tag is attached to this event',
92
+ },
93
+ {
94
+ key: 'exam',
95
+ paramDescription: 'exam identification string',
96
+ listDescription: 'List all attached tags of an exam.',
97
+ checkDescription: 'Check if tag is attached to an exam.',
98
+ attachDescription: 'Attach tag to an exam.',
99
+ removeDescription: 'Remove a tag attachment from an exam.',
100
+ contentType: 'exam',
101
+ contentCodeDescription: 'the exam identification string',
102
+ contentIdDescription: 'external unique exam identifier (if set for the exam)',
103
+ statusDescription: 'tag is attached to this exam',
104
+ },
105
+ {
106
+ key: 'integration',
107
+ paramDescription: 'integration identification string',
108
+ listDescription: 'List all attached tags of an integration.',
109
+ checkDescription: 'Check if tag is attached to an integration.',
110
+ attachDescription: 'Attach tag to an integration.',
111
+ removeDescription: 'Remove a tag attachment from an integration.',
112
+ contentType: 'integration',
113
+ contentCodeDescription: 'the integration identification string',
114
+ contentIdDescription: 'external unique integration identifier (if set for the integration)',
115
+ statusDescription: 'tag is attached to this integration',
116
+ },
117
+ {
118
+ key: 'organization',
119
+ paramDescription: 'organization identification string',
120
+ listDescription: 'List all attached tags of an organization.',
121
+ checkDescription: 'Check if tag is attached to an organization.',
122
+ attachDescription: 'Attach tag to an organization.',
123
+ removeDescription: 'Remove a tag attachment from an organization.',
124
+ contentType: 'organization',
125
+ contentCodeDescription: 'the organization identification string',
126
+ contentIdDescription: 'external unique organization identifier (if set for the organization)',
127
+ statusDescription: 'tag is attached to this organization',
128
+ },
129
+ {
130
+ key: 'quiz',
131
+ paramDescription: 'Quiz identification string',
132
+ listDescription: 'List all attached tags of a Quiz.',
133
+ checkDescription: 'Check if tag is attached to a Quiz.',
134
+ attachDescription: 'Attach tag to a Quiz.',
135
+ removeDescription: 'Remove a tag attachment from a Quiz.',
136
+ contentType: 'quiz',
137
+ contentCodeDescription: 'the Quiz identification string',
138
+ contentIdDescription: 'external unique Quiz identifier (if set for the Quiz)',
139
+ statusDescription: 'tag is attached to this quiz',
140
+ },
141
+ {
142
+ key: 'scorm',
143
+ paramDescription: 'SCORM identification string',
144
+ listDescription: 'List all attached tags of a SCORM learning material.',
145
+ checkDescription: 'Check if tag is attached to a SCORM learning material.',
146
+ attachDescription: 'Attach tag to a SCORM learning material.',
147
+ removeDescription: 'Remove a tag attachment from a SCORM learning material.',
148
+ contentType: 'scorm',
149
+ contentCodeDescription: 'the SCORM identification string',
150
+ contentIdDescription: 'external unique SCORM identifier (if set for the SCORM)',
151
+ statusDescription: 'tag is attached to this SCORM learning material',
152
+ },
153
+ {
154
+ key: 'video',
155
+ paramDescription: 'video identification string',
156
+ listDescription: 'List all attached tags of a video.',
157
+ checkDescription: 'Check if tag is attached to a video.',
158
+ attachDescription: 'Attach tag to a video.',
159
+ removeDescription: 'Remove a tag attachment from a video.',
160
+ contentType: 'video',
161
+ contentCodeDescription: 'the video identification string',
162
+ contentIdDescription: 'external unique video identifier (if set for the video)',
163
+ statusDescription: 'tag is attached to this video',
164
+ },
165
+ ];
1
166
  /* Tool definitions */
2
167
  export const EDUBASE_API_TOOLS_TAGS = [
3
168
  // GET /tags - List owned and managed tags
4
169
  {
5
170
  name: 'edubase_get_tags',
6
- description: "List owned and managed tags.",
7
- inputSchema: {
8
- type: 'object',
9
- properties: {
10
- search: {
11
- type: 'string',
12
- description: 'search string to filter results',
13
- },
14
- limit: {
15
- type: 'number',
16
- description: 'limit number of results (default: 16)',
17
- },
18
- page: {
19
- type: 'number',
20
- description: 'page number (default: 1), not used in search mode!',
21
- },
22
- },
23
- required: [],
24
- },
171
+ description: 'List owned and managed tags.',
172
+ inputSchema: z.object({
173
+ search: z.string().describe('search string to filter results').optional(),
174
+ limit: z.number().describe('limit number of results (default: 16)').optional(),
175
+ page: z.number().describe('page number (default: 1), not used in search mode!').optional(),
176
+ }),
177
+ outputSchema: z.array(z.object({
178
+ code: z.string().describe('tag identification string'),
179
+ id: z.string().describe('external unique tag identifier (if set for the tag)'),
180
+ name: z.string().describe('title of the tag'),
181
+ })),
25
182
  },
26
183
  // GET /tag - Get/check tag
27
184
  {
28
185
  name: 'edubase_get_tag',
29
- description: "Get/check tag.",
30
- inputSchema: {
31
- type: 'object',
32
- properties: {
33
- tag: {
34
- type: 'string',
35
- description: 'tag identification string',
36
- },
37
- },
38
- required: ['tag'],
39
- },
40
- },
41
- // GET /class:tags - List all attached tags of a class
42
- {
43
- name: 'edubase_get_class_tags',
44
- description: "List all attached tags of a class.",
45
- inputSchema: {
46
- type: 'object',
47
- properties: {
48
- class: {
49
- type: 'string',
50
- description: 'class identification string',
51
- },
52
- },
53
- required: ['class'],
54
- },
55
- },
56
- // GET /class:tag - Check if tag is attached to a class
57
- {
58
- name: 'edubase_get_class_tag',
59
- description: "Check if tag is attached to a class.",
60
- inputSchema: {
61
- type: 'object',
62
- properties: {
63
- class: {
64
- type: 'string',
65
- description: 'class identification string',
66
- },
67
- tag: {
68
- type: 'string',
69
- description: 'tag identification string',
70
- },
71
- },
72
- required: ['class', 'tag'],
73
- },
74
- },
75
- // POST /class:tag - Attach tag to class
76
- {
77
- name: 'edubase_post_class_tag',
78
- description: "Attach tag to a class.",
79
- inputSchema: {
80
- type: 'object',
81
- properties: {
82
- class: {
83
- type: 'string',
84
- description: 'class identification string',
85
- },
86
- tag: {
87
- type: 'string',
88
- description: 'tag identification string',
89
- },
90
- },
91
- required: ['class', 'tag'],
92
- },
93
- },
94
- // DELETE /class:tag - Remove a tag attachment from class
95
- {
96
- name: 'edubase_delete_class_tag',
97
- description: "Remove a tag attachment from a class.",
98
- inputSchema: {
99
- type: 'object',
100
- properties: {
101
- class: {
102
- type: 'string',
103
- description: 'class identification string',
104
- },
105
- tag: {
106
- type: 'string',
107
- description: 'tag identification string',
108
- },
109
- },
110
- required: ['class', 'tag'],
111
- },
112
- },
113
- // GET /course:tags - List all attached tags of a course
114
- {
115
- name: 'edubase_get_course_tags',
116
- description: "List all attached tags of a course.",
117
- inputSchema: {
118
- type: 'object',
119
- properties: {
120
- course: {
121
- type: 'string',
122
- description: 'course identification string',
123
- },
124
- },
125
- required: ['course'],
126
- },
127
- },
128
- // GET /course:tag - Check if tag is attached to a course
129
- {
130
- name: 'edubase_get_course_tag',
131
- description: "Check if tag is attached to a course.",
132
- inputSchema: {
133
- type: 'object',
134
- properties: {
135
- course: {
136
- type: 'string',
137
- description: 'course identification string',
138
- },
139
- tag: {
140
- type: 'string',
141
- description: 'tag identification string',
142
- },
143
- },
144
- required: ['course', 'tag'],
145
- },
146
- },
147
- // POST /course:tag - Attach tag to course
148
- {
149
- name: 'edubase_post_course_tag',
150
- description: "Attach tag to a course.",
151
- inputSchema: {
152
- type: 'object',
153
- properties: {
154
- course: {
155
- type: 'string',
156
- description: 'course identification string',
157
- },
158
- tag: {
159
- type: 'string',
160
- description: 'tag identification string',
161
- },
162
- },
163
- required: ['course', 'tag'],
164
- },
165
- },
166
- // DELETE /course:tag - Remove a tag attachment from course
167
- {
168
- name: 'edubase_delete_course_tag',
169
- description: "Remove a tag attachment from a course.",
170
- inputSchema: {
171
- type: 'object',
172
- properties: {
173
- course: {
174
- type: 'string',
175
- description: 'course identification string',
176
- },
177
- tag: {
178
- type: 'string',
179
- description: 'tag identification string',
180
- },
181
- },
182
- required: ['course', 'tag'],
183
- },
184
- },
185
- // GET /event:tags - List all attached tags of an event
186
- {
187
- name: 'edubase_get_event_tags',
188
- description: "List all attached tags of an event.",
189
- inputSchema: {
190
- type: 'object',
191
- properties: {
192
- event: {
193
- type: 'string',
194
- description: 'event identification string',
195
- },
196
- },
197
- required: ['event'],
198
- },
199
- },
200
- // GET /event:tag - Check if tag is attached to an event
201
- {
202
- name: 'edubase_get_event_tag',
203
- description: "Check if tag is attached to an event.",
204
- inputSchema: {
205
- type: 'object',
206
- properties: {
207
- event: {
208
- type: 'string',
209
- description: 'event identification string',
210
- },
211
- tag: {
212
- type: 'string',
213
- description: 'tag identification string',
214
- },
215
- },
216
- required: ['event', 'tag'],
217
- },
218
- },
219
- // POST /event:tag - Attach tag to event
220
- {
221
- name: 'edubase_post_event_tag',
222
- description: "Attach tag to an event.",
223
- inputSchema: {
224
- type: 'object',
225
- properties: {
226
- event: {
227
- type: 'string',
228
- description: 'event identification string',
229
- },
230
- tag: {
231
- type: 'string',
232
- description: 'tag identification string',
233
- },
234
- },
235
- required: ['event', 'tag'],
236
- },
237
- },
238
- // DELETE /event:tag - Remove a tag attachment from event
239
- {
240
- name: 'edubase_delete_event_tag',
241
- description: "Remove a tag attachment from an event.",
242
- inputSchema: {
243
- type: 'object',
244
- properties: {
245
- event: {
246
- type: 'string',
247
- description: 'event identification string',
248
- },
249
- tag: {
250
- type: 'string',
251
- description: 'tag identification string',
252
- },
253
- },
254
- required: ['event', 'tag'],
255
- },
256
- },
257
- // GET /exam:tags - List all attached tags of an exam
258
- {
259
- name: 'edubase_get_exam_tags',
260
- description: "List all attached tags of an exam.",
261
- inputSchema: {
262
- type: 'object',
263
- properties: {
264
- exam: {
265
- type: 'string',
266
- description: 'exam identification string',
267
- },
268
- },
269
- required: ['exam'],
270
- },
271
- },
272
- // GET /exam:tag - Check if tag is attached to an exam
273
- {
274
- name: 'edubase_get_exam_tag',
275
- description: "Check if tag is attached to an exam.",
276
- inputSchema: {
277
- type: 'object',
278
- properties: {
279
- exam: {
280
- type: 'string',
281
- description: 'exam identification string',
282
- },
283
- tag: {
284
- type: 'string',
285
- description: 'tag identification string',
286
- },
287
- },
288
- required: ['exam', 'tag'],
289
- },
290
- },
291
- // POST /exam:tag - Attach tag to exam
292
- {
293
- name: 'edubase_post_exam_tag',
294
- description: "Attach tag to an exam.",
295
- inputSchema: {
296
- type: 'object',
297
- properties: {
298
- exam: {
299
- type: 'string',
300
- description: 'exam identification string',
301
- },
302
- tag: {
303
- type: 'string',
304
- description: 'tag identification string',
305
- },
306
- },
307
- required: ['exam', 'tag'],
308
- },
309
- },
310
- // DELETE /exam:tag - Remove a tag attachment from exam
311
- {
312
- name: 'edubase_delete_exam_tag',
313
- description: "Remove a tag attachment from an exam.",
314
- inputSchema: {
315
- type: 'object',
316
- properties: {
317
- exam: {
318
- type: 'string',
319
- description: 'exam identification string',
320
- },
321
- tag: {
322
- type: 'string',
323
- description: 'tag identification string',
324
- },
325
- },
326
- required: ['exam', 'tag'],
327
- },
328
- },
329
- // GET /integration:tags - List all attached tags of an integration
330
- {
331
- name: 'edubase_get_integration_tags',
332
- description: "List all attached tags of an integration.",
333
- inputSchema: {
334
- type: 'object',
335
- properties: {
336
- integration: {
337
- type: 'string',
338
- description: 'integration identification string',
339
- },
340
- },
341
- required: ['integration'],
342
- },
343
- },
344
- // GET /integration:tag - Check if tag is attached to an integration
345
- {
346
- name: 'edubase_get_integration_tag',
347
- description: "Check if tag is attached to an integration.",
348
- inputSchema: {
349
- type: 'object',
350
- properties: {
351
- integration: {
352
- type: 'string',
353
- description: 'integration identification string',
354
- },
355
- tag: {
356
- type: 'string',
357
- description: 'tag identification string',
358
- },
359
- },
360
- required: ['integration', 'tag'],
361
- },
362
- },
363
- // POST /integration:tag - Attach tag to integration
364
- {
365
- name: 'edubase_post_integration_tag',
366
- description: "Attach tag to an integration.",
367
- inputSchema: {
368
- type: 'object',
369
- properties: {
370
- integration: {
371
- type: 'string',
372
- description: 'integration identification string',
373
- },
374
- tag: {
375
- type: 'string',
376
- description: 'tag identification string',
377
- },
378
- },
379
- required: ['integration', 'tag'],
380
- },
381
- },
382
- // DELETE /integration:tag - Remove a tag attachment from integration
383
- {
384
- name: 'edubase_delete_integration_tag',
385
- description: "Remove a tag attachment from an integration.",
386
- inputSchema: {
387
- type: 'object',
388
- properties: {
389
- integration: {
390
- type: 'string',
391
- description: 'integration identification string',
392
- },
393
- tag: {
394
- type: 'string',
395
- description: 'tag identification string',
396
- },
397
- },
398
- required: ['integration', 'tag'],
399
- },
400
- },
401
- // GET /organization:tags - List all attached tags of an organization
402
- {
403
- name: 'edubase_get_organization_tags',
404
- description: "List all attached tags of an organization.",
405
- inputSchema: {
406
- type: 'object',
407
- properties: {
408
- organization: {
409
- type: 'string',
410
- description: 'organization identification string',
411
- },
412
- },
413
- required: ['organization'],
414
- },
415
- },
416
- // GET /organization:tag - Check if tag is attached to an organization
417
- {
418
- name: 'edubase_get_organization_tag',
419
- description: "Check if tag is attached to an organization.",
420
- inputSchema: {
421
- type: 'object',
422
- properties: {
423
- organization: {
424
- type: 'string',
425
- description: 'organization identification string',
426
- },
427
- tag: {
428
- type: 'string',
429
- description: 'tag identification string',
430
- },
431
- },
432
- required: ['organization', 'tag'],
433
- },
434
- },
435
- // POST /organization:tag - Attach tag to organization
436
- {
437
- name: 'edubase_post_organization_tag',
438
- description: "Attach tag to an organization.",
439
- inputSchema: {
440
- type: 'object',
441
- properties: {
442
- organization: {
443
- type: 'string',
444
- description: 'organization identification string',
445
- },
446
- tag: {
447
- type: 'string',
448
- description: 'tag identification string',
449
- },
450
- },
451
- required: ['organization', 'tag'],
452
- },
453
- },
454
- // DELETE /organization:tag - Remove a tag attachment from organization
455
- {
456
- name: 'edubase_delete_organization_tag',
457
- description: "Remove a tag attachment from an organization.",
458
- inputSchema: {
459
- type: 'object',
460
- properties: {
461
- organization: {
462
- type: 'string',
463
- description: 'organization identification string',
464
- },
465
- tag: {
466
- type: 'string',
467
- description: 'tag identification string',
468
- },
469
- },
470
- required: ['organization', 'tag'],
471
- },
472
- },
473
- // GET /quiz:tags - List all attached tags of a Quiz
474
- {
475
- name: 'edubase_get_quiz_tags',
476
- description: "List all attached tags of a Quiz.",
477
- inputSchema: {
478
- type: 'object',
479
- properties: {
480
- quiz: {
481
- type: 'string',
482
- description: 'Quiz identification string',
483
- },
484
- },
485
- required: ['quiz'],
486
- },
487
- },
488
- // GET /quiz:tag - Check if tag is attached to a Quiz
489
- {
490
- name: 'edubase_get_quiz_tag',
491
- description: "Check if tag is attached to a Quiz.",
492
- inputSchema: {
493
- type: 'object',
494
- properties: {
495
- quiz: {
496
- type: 'string',
497
- description: 'Quiz identification string',
498
- },
499
- tag: {
500
- type: 'string',
501
- description: 'tag identification string',
502
- },
503
- },
504
- required: ['quiz', 'tag'],
505
- },
506
- },
507
- // POST /quiz:tag - Attach tag to Quiz
508
- {
509
- name: 'edubase_post_quiz_tag',
510
- description: "Attach tag to a Quiz.",
511
- inputSchema: {
512
- type: 'object',
513
- properties: {
514
- quiz: {
515
- type: 'string',
516
- description: 'Quiz identification string',
517
- },
518
- tag: {
519
- type: 'string',
520
- description: 'tag identification string',
521
- },
522
- },
523
- required: ['quiz', 'tag'],
524
- },
525
- },
526
- // DELETE /quiz:tag - Remove a tag attachment from Quiz
527
- {
528
- name: 'edubase_delete_quiz_tag',
529
- description: "Remove a tag attachment from a Quiz.",
530
- inputSchema: {
531
- type: 'object',
532
- properties: {
533
- quiz: {
534
- type: 'string',
535
- description: 'Quiz identification string',
536
- },
537
- tag: {
538
- type: 'string',
539
- description: 'tag identification string',
540
- },
541
- },
542
- required: ['quiz', 'tag'],
543
- },
544
- },
545
- // GET /scorm:tags - List all attached tags of a SCORM
546
- {
547
- name: 'edubase_get_scorm_tags',
548
- description: "List all attached tags of a SCORM learning material.",
549
- inputSchema: {
550
- type: 'object',
551
- properties: {
552
- scorm: {
553
- type: 'string',
554
- description: 'SCORM identification string',
555
- },
556
- },
557
- required: ['scorm'],
558
- },
559
- },
560
- // GET /scorm:tag - Check if tag is attached to a SCORM
561
- {
562
- name: 'edubase_get_scorm_tag',
563
- description: "Check if tag is attached to a SCORM learning material.",
564
- inputSchema: {
565
- type: 'object',
566
- properties: {
567
- scorm: {
568
- type: 'string',
569
- description: 'SCORM identification string',
570
- },
571
- tag: {
572
- type: 'string',
573
- description: 'tag identification string',
574
- },
575
- },
576
- required: ['scorm', 'tag'],
577
- },
578
- },
579
- // POST /scorm:tag - Attach tag to SCORM
580
- {
581
- name: 'edubase_post_scorm_tag',
582
- description: "Attach tag to a SCORM learning material.",
583
- inputSchema: {
584
- type: 'object',
585
- properties: {
586
- scorm: {
587
- type: 'string',
588
- description: 'SCORM identification string',
589
- },
590
- tag: {
591
- type: 'string',
592
- description: 'tag identification string',
593
- },
594
- },
595
- required: ['scorm', 'tag'],
596
- },
597
- },
598
- // DELETE /scorm:tag - Remove a tag attachment from SCORM
599
- {
600
- name: 'edubase_delete_scorm_tag',
601
- description: "Remove a tag attachment from a SCORM learning material.",
602
- inputSchema: {
603
- type: 'object',
604
- properties: {
605
- scorm: {
606
- type: 'string',
607
- description: 'SCORM identification string',
608
- },
609
- tag: {
610
- type: 'string',
611
- description: 'tag identification string',
612
- },
613
- },
614
- required: ['scorm', 'tag'],
615
- },
616
- },
617
- // GET /video:tags - List all attached tags of a video
618
- {
619
- name: 'edubase_get_video_tags',
620
- description: "List all attached tags of a video.",
621
- inputSchema: {
622
- type: 'object',
623
- properties: {
624
- video: {
625
- type: 'string',
626
- description: 'video identification string',
627
- },
628
- },
629
- required: ['video'],
630
- },
631
- },
632
- // GET /video:tag - Check if tag is attached to a video
633
- {
634
- name: 'edubase_get_video_tag',
635
- description: "Check if tag is attached to a video.",
636
- inputSchema: {
637
- type: 'object',
638
- properties: {
639
- video: {
640
- type: 'string',
641
- description: 'video identification string',
642
- },
643
- tag: {
644
- type: 'string',
645
- description: 'tag identification string',
646
- },
647
- },
648
- required: ['video', 'tag'],
649
- },
650
- },
651
- // POST /video:tag - Attach tag to video
652
- {
653
- name: 'edubase_post_video_tag',
654
- description: "Attach tag to a video.",
655
- inputSchema: {
656
- type: 'object',
657
- properties: {
658
- video: {
659
- type: 'string',
660
- description: 'video identification string',
661
- },
662
- tag: {
663
- type: 'string',
664
- description: 'tag identification string',
665
- },
666
- },
667
- required: ['video', 'tag'],
668
- },
669
- },
670
- // DELETE /video:tag - Remove a tag attachment from video
671
- {
672
- name: 'edubase_delete_video_tag',
673
- description: "Remove a tag attachment from a video.",
674
- inputSchema: {
675
- type: 'object',
676
- properties: {
677
- video: {
678
- type: 'string',
679
- description: 'video identification string',
680
- },
681
- tag: {
682
- type: 'string',
683
- description: 'tag identification string',
684
- },
685
- },
686
- required: ['video', 'tag'],
687
- },
688
- },
186
+ description: 'Get/check tag.',
187
+ inputSchema: z.object({
188
+ tag: z.string().describe('tag identification string'),
189
+ }),
190
+ outputSchema: z.object({
191
+ tag: z.string().describe('tag identification string'),
192
+ id: z.string().describe('external unique tag identifier (if set for the tag)'),
193
+ name: z.string().describe('title of the tag'),
194
+ color: z.string().describe('color in HEX format'),
195
+ icon: z.string().describe('Font Awesome icon class name'),
196
+ }),
197
+ },
198
+ ...TAG_ENTITIES.flatMap(createEntityTagTools),
689
199
  ];
690
- /* Output schema definitions */
691
- export const EDUBASE_API_TOOLS_TAGS_OUTPUT_SCHEMA = {
692
- // GET /tags - List owned and managed tags
693
- edubase_get_tags: {
694
- type: 'array',
695
- items: {
696
- type: 'object',
697
- properties: {
698
- code: {
699
- type: 'string',
700
- description: 'tag identification string',
701
- },
702
- id: {
703
- type: 'string',
704
- description: 'external unique tag identifier (if set for the tag)',
705
- },
706
- name: {
707
- type: 'string',
708
- description: 'title of the tag',
709
- },
710
- },
711
- },
712
- },
713
- // GET /tag - Get/check tag
714
- edubase_get_tag: {
715
- type: 'object',
716
- properties: {
717
- tag: {
718
- type: 'string',
719
- description: 'tag identification string',
720
- },
721
- id: {
722
- type: 'string',
723
- description: 'external unique tag identifier (if set for the tag)',
724
- },
725
- name: {
726
- type: 'string',
727
- description: 'title of the tag',
728
- },
729
- color: {
730
- type: 'string',
731
- description: 'color in HEX format',
732
- },
733
- icon: {
734
- type: 'string',
735
- description: 'Font Awesome icon class name',
736
- },
737
- },
738
- },
739
- // GET /class:tags - List all attached tags of a class
740
- edubase_get_class_tags: {
741
- type: 'array',
742
- items: {
743
- type: 'object',
744
- properties: {
745
- tag: {
746
- type: 'string',
747
- description: 'tag identification string',
748
- },
749
- id: {
750
- type: 'string',
751
- description: 'external unique tag identifier (if set for the tag)',
752
- },
753
- name: {
754
- type: 'string',
755
- description: 'title of the tag',
756
- },
757
- },
758
- },
759
- },
760
- // GET /class:tag - Check if tag is attached to a class
761
- edubase_get_class_tag: {
762
- type: 'object',
763
- properties: {
764
- tag: {
765
- type: 'string',
766
- description: 'the tag identification string',
767
- },
768
- content: {
769
- type: 'object',
770
- properties: {
771
- type: {
772
- type: 'string',
773
- description: 'will be "class"',
774
- },
775
- code: {
776
- type: 'string',
777
- description: 'the class identification string',
778
- },
779
- id: {
780
- type: 'string',
781
- description: 'external unique class identifier (if set for the class)',
782
- },
783
- },
784
- },
785
- status: {
786
- type: 'boolean',
787
- description: 'tag is attached to this class',
788
- },
789
- },
790
- },
791
- // POST /class:tag - Attach tag to class
792
- edubase_post_class_tag: {
793
- type: 'object',
794
- properties: {
795
- tag: {
796
- type: 'string',
797
- description: 'the tag identification string',
798
- },
799
- content: {
800
- type: 'object',
801
- properties: {
802
- type: {
803
- type: 'string',
804
- description: 'will be "class"',
805
- },
806
- code: {
807
- type: 'string',
808
- description: 'the class identification string',
809
- },
810
- id: {
811
- type: 'string',
812
- description: 'external unique class identifier (if set for the class)',
813
- },
814
- },
815
- },
816
- success: {
817
- type: 'boolean',
818
- description: 'operation was successful',
819
- },
820
- },
821
- },
822
- // DELETE /class:tag - Remove a tag attachment from class
823
- edubase_delete_class_tag: {},
824
- // GET /course:tags - List all attached tags of a course
825
- edubase_get_course_tags: {
826
- type: 'array',
827
- items: {
828
- type: 'object',
829
- properties: {
830
- tag: {
831
- type: 'string',
832
- description: 'tag identification string',
833
- },
834
- id: {
835
- type: 'string',
836
- description: 'external unique tag identifier (if set for the tag)',
837
- },
838
- name: {
839
- type: 'string',
840
- description: 'title of the tag',
841
- },
842
- },
843
- },
844
- },
845
- // GET /course:tag - Check if tag is attached to a course
846
- edubase_get_course_tag: {
847
- type: 'object',
848
- properties: {
849
- tag: {
850
- type: 'string',
851
- description: 'the tag identification string',
852
- },
853
- content: {
854
- type: 'object',
855
- properties: {
856
- type: {
857
- type: 'string',
858
- description: 'will be "course"',
859
- },
860
- code: {
861
- type: 'string',
862
- description: 'the course identification string',
863
- },
864
- id: {
865
- type: 'string',
866
- description: 'external unique course identifier (if set for the course)',
867
- },
868
- },
869
- },
870
- status: {
871
- type: 'boolean',
872
- description: 'tag is attached to this course',
873
- },
874
- },
875
- },
876
- // POST /course:tag - Attach tag to course
877
- edubase_post_course_tag: {
878
- type: 'object',
879
- properties: {
880
- tag: {
881
- type: 'string',
882
- description: 'the tag identification string',
883
- },
884
- content: {
885
- type: 'object',
886
- properties: {
887
- type: {
888
- type: 'string',
889
- description: 'will be "course"',
890
- },
891
- code: {
892
- type: 'string',
893
- description: 'the course identification string',
894
- },
895
- id: {
896
- type: 'string',
897
- description: 'external unique course identifier (if set for the course)',
898
- },
899
- },
900
- },
901
- success: {
902
- type: 'boolean',
903
- description: 'operation was successful',
904
- },
905
- },
906
- },
907
- // DELETE /course:tag - Remove a tag attachment from course
908
- edubase_delete_course_tag: {},
909
- // GET /event:tags - List all attached tags of an event
910
- edubase_get_event_tags: {
911
- type: 'array',
912
- items: {
913
- type: 'object',
914
- properties: {
915
- tag: {
916
- type: 'string',
917
- description: 'tag identification string',
918
- },
919
- id: {
920
- type: 'string',
921
- description: 'external unique tag identifier (if set for the tag)',
922
- },
923
- name: {
924
- type: 'string',
925
- description: 'title of the tag',
926
- },
927
- },
928
- },
929
- },
930
- // GET /event:tag - Check if tag is attached to an event
931
- edubase_get_event_tag: {
932
- type: 'object',
933
- properties: {
934
- tag: {
935
- type: 'string',
936
- description: 'the tag identification string',
937
- },
938
- content: {
939
- type: 'object',
940
- properties: {
941
- type: {
942
- type: 'string',
943
- description: 'will be "event"',
944
- },
945
- code: {
946
- type: 'string',
947
- description: 'the event identification string',
948
- },
949
- id: {
950
- type: 'string',
951
- description: 'external unique event identifier (if set for the event)',
952
- },
953
- },
954
- },
955
- status: {
956
- type: 'boolean',
957
- description: 'tag is attached to this event',
958
- },
959
- },
960
- },
961
- // POST /event:tag - Attach tag to event
962
- edubase_post_event_tag: {
963
- type: 'object',
964
- properties: {
965
- tag: {
966
- type: 'string',
967
- description: 'the tag identification string',
968
- },
969
- content: {
970
- type: 'object',
971
- properties: {
972
- type: {
973
- type: 'string',
974
- description: 'will be "event"',
975
- },
976
- code: {
977
- type: 'string',
978
- description: 'the event identification string',
979
- },
980
- id: {
981
- type: 'string',
982
- description: 'external unique event identifier (if set for the event)',
983
- },
984
- },
985
- },
986
- success: {
987
- type: 'boolean',
988
- description: 'operation was successful',
989
- },
990
- },
991
- },
992
- // DELETE /event:tag - Remove a tag attachment from event
993
- edubase_delete_event_tag: {},
994
- // GET /exam:tags - List all attached tags of an exam
995
- edubase_get_exam_tags: {
996
- type: 'array',
997
- items: {
998
- type: 'object',
999
- properties: {
1000
- tag: {
1001
- type: 'string',
1002
- description: 'tag identification string',
1003
- },
1004
- id: {
1005
- type: 'string',
1006
- description: 'external unique tag identifier (if set for the tag)',
1007
- },
1008
- name: {
1009
- type: 'string',
1010
- description: 'title of the tag',
1011
- },
1012
- },
1013
- },
1014
- },
1015
- // GET /exam:tag - Check if tag is attached to an exam
1016
- edubase_get_exam_tag: {
1017
- type: 'object',
1018
- properties: {
1019
- tag: {
1020
- type: 'string',
1021
- description: 'the tag identification string',
1022
- },
1023
- content: {
1024
- type: 'object',
1025
- properties: {
1026
- type: {
1027
- type: 'string',
1028
- description: 'will be "exam"',
1029
- },
1030
- code: {
1031
- type: 'string',
1032
- description: 'the exam identification string',
1033
- },
1034
- id: {
1035
- type: 'string',
1036
- description: 'external unique exam identifier (if set for the exam)',
1037
- },
1038
- },
1039
- },
1040
- status: {
1041
- type: 'boolean',
1042
- description: 'tag is attached to this exam',
1043
- },
1044
- },
1045
- },
1046
- // POST /exam:tag - Attach tag to exam
1047
- edubase_post_exam_tag: {
1048
- type: 'object',
1049
- properties: {
1050
- tag: {
1051
- type: 'string',
1052
- description: 'the tag identification string',
1053
- },
1054
- content: {
1055
- type: 'object',
1056
- properties: {
1057
- type: {
1058
- type: 'string',
1059
- description: 'will be "exam"',
1060
- },
1061
- code: {
1062
- type: 'string',
1063
- description: 'the exam identification string',
1064
- },
1065
- id: {
1066
- type: 'string',
1067
- description: 'external unique exam identifier (if set for the exam)',
1068
- },
1069
- },
1070
- },
1071
- success: {
1072
- type: 'boolean',
1073
- description: 'operation was successful',
1074
- },
1075
- },
1076
- },
1077
- // DELETE /exam:tag - Remove a tag attachment from exam
1078
- edubase_delete_exam_tag: {},
1079
- // GET /integration:tags - List all attached tags of an integration
1080
- edubase_get_integration_tags: {
1081
- type: 'array',
1082
- items: {
1083
- type: 'object',
1084
- properties: {
1085
- tag: {
1086
- type: 'string',
1087
- description: 'tag identification string',
1088
- },
1089
- id: {
1090
- type: 'string',
1091
- description: 'external unique tag identifier (if set for the tag)',
1092
- },
1093
- name: {
1094
- type: 'string',
1095
- description: 'title of the tag',
1096
- },
1097
- },
1098
- },
1099
- },
1100
- // GET /integration:tag - Check if tag is attached to an integration
1101
- edubase_get_integration_tag: {
1102
- type: 'object',
1103
- properties: {
1104
- tag: {
1105
- type: 'string',
1106
- description: 'the tag identification string',
1107
- },
1108
- content: {
1109
- type: 'object',
1110
- properties: {
1111
- type: {
1112
- type: 'string',
1113
- description: 'will be "integration"',
1114
- },
1115
- code: {
1116
- type: 'string',
1117
- description: 'the integration identification string',
1118
- },
1119
- id: {
1120
- type: 'string',
1121
- description: 'external unique integration identifier (if set for the integration)',
1122
- },
1123
- },
1124
- },
1125
- status: {
1126
- type: 'boolean',
1127
- description: 'tag is attached to this integration',
1128
- },
1129
- },
1130
- },
1131
- // POST /integration:tag - Attach tag to integration
1132
- edubase_post_integration_tag: {
1133
- type: 'object',
1134
- properties: {
1135
- tag: {
1136
- type: 'string',
1137
- description: 'the tag identification string',
1138
- },
1139
- content: {
1140
- type: 'object',
1141
- properties: {
1142
- type: {
1143
- type: 'string',
1144
- description: 'will be "integration"',
1145
- },
1146
- code: {
1147
- type: 'string',
1148
- description: 'the integration identification string',
1149
- },
1150
- id: {
1151
- type: 'string',
1152
- description: 'external unique integration identifier (if set for the integration)',
1153
- },
1154
- },
1155
- },
1156
- success: {
1157
- type: 'boolean',
1158
- description: 'operation was successful',
1159
- },
1160
- },
1161
- },
1162
- // DELETE /integration:tag - Remove a tag attachment from integration
1163
- edubase_delete_integration_tag: {},
1164
- // GET /organization:tags - List all attached tags of an organization
1165
- edubase_get_organization_tags: {
1166
- type: 'array',
1167
- items: {
1168
- type: 'object',
1169
- properties: {
1170
- tag: {
1171
- type: 'string',
1172
- description: 'tag identification string',
1173
- },
1174
- id: {
1175
- type: 'string',
1176
- description: 'external unique tag identifier (if set for the tag)',
1177
- },
1178
- name: {
1179
- type: 'string',
1180
- description: 'title of the tag',
1181
- },
1182
- },
1183
- },
1184
- },
1185
- // GET /organization:tag - Check if tag is attached to an organization
1186
- edubase_get_organization_tag: {
1187
- type: 'object',
1188
- properties: {
1189
- tag: {
1190
- type: 'string',
1191
- description: 'the tag identification string',
1192
- },
1193
- content: {
1194
- type: 'object',
1195
- properties: {
1196
- type: {
1197
- type: 'string',
1198
- description: 'will be "organization"',
1199
- },
1200
- code: {
1201
- type: 'string',
1202
- description: 'the organization identification string',
1203
- },
1204
- id: {
1205
- type: 'string',
1206
- description: 'external unique organization identifier (if set for the organization)',
1207
- },
1208
- },
1209
- },
1210
- status: {
1211
- type: 'boolean',
1212
- description: 'tag is attached to this organization',
1213
- },
1214
- },
1215
- },
1216
- // POST /organization:tag - Attach tag to organization
1217
- edubase_post_organization_tag: {
1218
- type: 'object',
1219
- properties: {
1220
- tag: {
1221
- type: 'string',
1222
- description: 'the tag identification string',
1223
- },
1224
- content: {
1225
- type: 'object',
1226
- properties: {
1227
- type: {
1228
- type: 'string',
1229
- description: 'will be "organization"',
1230
- },
1231
- code: {
1232
- type: 'string',
1233
- description: 'the organization identification string',
1234
- },
1235
- id: {
1236
- type: 'string',
1237
- description: 'external unique organization identifier (if set for the organization)',
1238
- },
1239
- },
1240
- },
1241
- success: {
1242
- type: 'boolean',
1243
- description: 'operation was successful',
1244
- },
1245
- },
1246
- },
1247
- // DELETE /organization:tag - Remove a tag attachment from organization
1248
- edubase_delete_organization_tag: {},
1249
- // GET /quiz:tags - List all attached tags of a Quiz
1250
- edubase_get_quiz_tags: {
1251
- type: 'array',
1252
- items: {
1253
- type: 'object',
1254
- properties: {
1255
- tag: {
1256
- type: 'string',
1257
- description: 'tag identification string',
1258
- },
1259
- id: {
1260
- type: 'string',
1261
- description: 'external unique tag identifier (if set for the tag)',
1262
- },
1263
- name: {
1264
- type: 'string',
1265
- description: 'title of the tag',
1266
- },
1267
- },
1268
- },
1269
- },
1270
- // GET /quiz:tag - Check if tag is attached to a Quiz
1271
- edubase_get_quiz_tag: {
1272
- type: 'object',
1273
- properties: {
1274
- tag: {
1275
- type: 'string',
1276
- description: 'the tag identification string',
1277
- },
1278
- content: {
1279
- type: 'object',
1280
- properties: {
1281
- type: {
1282
- type: 'string',
1283
- description: 'will be "quiz"',
1284
- },
1285
- code: {
1286
- type: 'string',
1287
- description: 'the Quiz identification string',
1288
- },
1289
- id: {
1290
- type: 'string',
1291
- description: 'external unique Quiz identifier (if set for the Quiz)',
1292
- },
1293
- },
1294
- },
1295
- status: {
1296
- type: 'boolean',
1297
- description: 'tag is attached to this quiz',
1298
- },
1299
- },
1300
- },
1301
- // POST /quiz:tag - Attach tag to Quiz
1302
- edubase_post_quiz_tag: {
1303
- type: 'object',
1304
- properties: {
1305
- tag: {
1306
- type: 'string',
1307
- description: 'the tag identification string',
1308
- },
1309
- content: {
1310
- type: 'object',
1311
- properties: {
1312
- type: {
1313
- type: 'string',
1314
- description: 'will be "quiz"',
1315
- },
1316
- code: {
1317
- type: 'string',
1318
- description: 'the Quiz identification string',
1319
- },
1320
- id: {
1321
- type: 'string',
1322
- description: 'external unique Quiz identifier (if set for the Quiz)',
1323
- },
1324
- },
1325
- },
1326
- success: {
1327
- type: 'boolean',
1328
- description: 'operation was successful',
1329
- },
1330
- },
1331
- },
1332
- // DELETE /quiz:tag - Remove a tag attachment from Quiz
1333
- edubase_delete_quiz_tag: {},
1334
- // GET /scorm:tags - List all attached tags of a SCORM learning material
1335
- edubase_get_scorm_tags: {
1336
- type: 'array',
1337
- items: {
1338
- type: 'object',
1339
- properties: {
1340
- tag: {
1341
- type: 'string',
1342
- description: 'tag identification string',
1343
- },
1344
- id: {
1345
- type: 'string',
1346
- description: 'external unique tag identifier (if set for the tag)',
1347
- },
1348
- name: {
1349
- type: 'string',
1350
- description: 'title of the tag',
1351
- },
1352
- },
1353
- },
1354
- },
1355
- // GET /scorm:tag - Check if tag is attached to a SCORM learning material
1356
- edubase_get_scorm_tag: {
1357
- type: 'object',
1358
- properties: {
1359
- tag: {
1360
- type: 'string',
1361
- description: 'the tag identification string',
1362
- },
1363
- content: {
1364
- type: 'object',
1365
- properties: {
1366
- type: {
1367
- type: 'string',
1368
- description: 'will be "scorm"',
1369
- },
1370
- code: {
1371
- type: 'string',
1372
- description: 'the SCORM identification string',
1373
- },
1374
- id: {
1375
- type: 'string',
1376
- description: 'external unique SCORM identifier (if set for the SCORM)',
1377
- },
1378
- },
1379
- },
1380
- status: {
1381
- type: 'boolean',
1382
- description: 'tag is attached to this SCORM learning material',
1383
- },
1384
- },
1385
- },
1386
- // POST /scorm:tag - Attach tag to SCORM learning material
1387
- edubase_post_scorm_tag: {
1388
- type: 'object',
1389
- properties: {
1390
- tag: {
1391
- type: 'string',
1392
- description: 'the tag identification string',
1393
- },
1394
- content: {
1395
- type: 'object',
1396
- properties: {
1397
- type: {
1398
- type: 'string',
1399
- description: 'will be "scorm"',
1400
- },
1401
- code: {
1402
- type: 'string',
1403
- description: 'the SCORM identification string',
1404
- },
1405
- id: {
1406
- type: 'string',
1407
- description: 'external unique SCORM identifier (if set for the SCORM)',
1408
- },
1409
- },
1410
- },
1411
- success: {
1412
- type: 'boolean',
1413
- description: 'operation was successful',
1414
- },
1415
- },
1416
- },
1417
- // DELETE /scorm:tag - Remove a tag attachment from SCORM learning material
1418
- edubase_delete_scorm_tag: {},
1419
- // GET /video:tags - List all attached tags of a video
1420
- edubase_get_video_tags: {
1421
- type: 'array',
1422
- items: {
1423
- type: 'object',
1424
- properties: {
1425
- tag: {
1426
- type: 'string',
1427
- description: 'tag identification string',
1428
- },
1429
- id: {
1430
- type: 'string',
1431
- description: 'external unique tag identifier (if set for the tag)',
1432
- },
1433
- name: {
1434
- type: 'string',
1435
- description: 'title of the tag',
1436
- },
1437
- },
1438
- },
1439
- },
1440
- // GET /video:tag - Check if tag is attached to a video
1441
- edubase_get_video_tag: {
1442
- type: 'object',
1443
- properties: {
1444
- tag: {
1445
- type: 'string',
1446
- description: 'the tag identification string',
1447
- },
1448
- content: {
1449
- type: 'object',
1450
- properties: {
1451
- type: {
1452
- type: 'string',
1453
- description: 'will be "video"',
1454
- },
1455
- code: {
1456
- type: 'string',
1457
- description: 'the video identification string',
1458
- },
1459
- id: {
1460
- type: 'string',
1461
- description: 'external unique video identifier (if set for the video)',
1462
- },
1463
- },
1464
- },
1465
- status: {
1466
- type: 'boolean',
1467
- description: 'tag is attached to this video',
1468
- },
1469
- },
1470
- },
1471
- // POST /video:tag - Attach tag to video
1472
- edubase_post_video_tag: {
1473
- type: 'object',
1474
- properties: {
1475
- tag: {
1476
- type: 'string',
1477
- description: 'the tag identification string',
1478
- },
1479
- content: {
1480
- type: 'object',
1481
- properties: {
1482
- type: {
1483
- type: 'string',
1484
- description: 'will be "video"',
1485
- },
1486
- code: {
1487
- type: 'string',
1488
- description: 'the video identification string',
1489
- },
1490
- id: {
1491
- type: 'string',
1492
- description: 'external unique video identifier (if set for the video)',
1493
- },
1494
- },
1495
- },
1496
- success: {
1497
- type: 'boolean',
1498
- description: 'operation was successful',
1499
- },
1500
- },
1501
- },
1502
- // DELETE /video:tag - Remove a tag attachment from video
1503
- edubase_delete_video_tag: {},
1504
- };