@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.
- package/README.md +22 -1
- package/dist/helpers.js +9 -0
- package/dist/index.js +147 -120
- package/dist/prompts/questions.js +24 -0
- package/dist/prompts.js +4 -3
- package/dist/tools/classes.js +81 -295
- package/dist/tools/exams.js +67 -253
- package/dist/tools/integrations.js +59 -209
- package/dist/tools/metrics.js +12 -32
- package/dist/tools/organizations.js +147 -538
- package/dist/tools/permissions.js +185 -2213
- package/dist/tools/plays.js +104 -380
- package/dist/tools/questions.js +770 -1091
- package/dist/tools/quizes.js +68 -223
- package/dist/tools/tags.js +189 -1494
- package/dist/tools/users.js +157 -541
- package/dist/tools.js +11 -25
- package/package.json +3 -2
package/dist/tools/exams.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
1
2
|
/*
|
|
2
3
|
# Exams (Highest Level in EduBase Hierarchy)
|
|
3
4
|
|
|
@@ -12,298 +13,111 @@ Key characteristics:
|
|
|
12
13
|
- Generally limited to one attempt per user
|
|
13
14
|
- Questions cannot exist directly in Exams without being part of a Quiz set
|
|
14
15
|
*/
|
|
15
|
-
/* Tool definitions */
|
|
16
16
|
export const EDUBASE_API_TOOLS_EXAMS = [
|
|
17
17
|
// GET /exams - List owned and managed exams
|
|
18
18
|
{
|
|
19
19
|
name: 'edubase_get_exams',
|
|
20
20
|
description: "List owned and managed exams. Exams are the highest level in the EduBase Quiz hierarchy, built from Quiz sets.",
|
|
21
|
-
inputSchema: {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
page: {
|
|
33
|
-
type: 'number',
|
|
34
|
-
description: 'page number (default: 1), not used in search mode!',
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
required: [],
|
|
38
|
-
},
|
|
21
|
+
inputSchema: z.object({
|
|
22
|
+
search: z.string().optional().describe('search string to filter results'),
|
|
23
|
+
limit: z.number().optional().describe('limit number of results (default: 16)'),
|
|
24
|
+
page: z.number().optional().describe('page number (default: 1), not used in search mode!'),
|
|
25
|
+
}),
|
|
26
|
+
outputSchema: z.array(z.object({
|
|
27
|
+
exam: z.string().describe('exam identification string'),
|
|
28
|
+
id: z.string().optional().describe('external unique exam identifier (if set for the exam)'),
|
|
29
|
+
name: z.string().describe('title of the exam'),
|
|
30
|
+
active: z.boolean().describe('exam is active'),
|
|
31
|
+
})),
|
|
39
32
|
},
|
|
40
33
|
// GET /exam - Get/check exam
|
|
41
34
|
{
|
|
42
35
|
name: 'edubase_get_exam',
|
|
43
36
|
description: "Get/check exam.",
|
|
44
|
-
inputSchema: {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
37
|
+
inputSchema: z.object({
|
|
38
|
+
exam: z.string().describe('exam identification string'),
|
|
39
|
+
}),
|
|
40
|
+
outputSchema: z.object({
|
|
41
|
+
exam: z.string().describe('exam identification string'),
|
|
42
|
+
id: z.string().optional().describe('external unique exam identifier (if set for the exam)'),
|
|
43
|
+
name: z.string().describe('title of the exam'),
|
|
44
|
+
quiz: z.string().describe('Quiz identification string. The Quiz set the exam is attached to'),
|
|
45
|
+
active: z.boolean().describe('exam is active'),
|
|
46
|
+
status: z.string().describe('exam status (INACTIVE, ACTIVE, PAUSED, REVIEW, EXPIRED)'),
|
|
47
|
+
start: z.string().describe('start date and time'),
|
|
48
|
+
end: z.string().describe('end date and time'),
|
|
49
|
+
}),
|
|
54
50
|
},
|
|
55
51
|
// POST /exam - Create a new exam from an existing Quiz set
|
|
56
52
|
{
|
|
57
53
|
name: 'edubase_post_exam',
|
|
58
54
|
description: "Create a new exam from an existing Quiz set. Exams are at the top level of the EduBase Quiz hierarchy and MUST be created from existing Quiz sets. They are time-constrained, secured assessment instances of Quiz sets.",
|
|
59
|
-
inputSchema: {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
type: 'string',
|
|
72
|
-
description: "External unique exam identifier.\n" +
|
|
73
|
-
"Should be maximum 64 characters long!"
|
|
74
|
-
},
|
|
75
|
-
type: {
|
|
76
|
-
type: 'string',
|
|
77
|
-
description: "Type of the exam. (default: exam)\n" +
|
|
78
|
-
"- exam: regular exam\n" +
|
|
79
|
-
"- championship: exam with championship features enabled\n" +
|
|
80
|
-
"- homework: homework assignment, can be paused and continued during the exam period\n" +
|
|
81
|
-
"- survey: survey (optionally anonymous) with no grading"
|
|
82
|
-
},
|
|
83
|
-
quiz: {
|
|
84
|
-
type: 'string',
|
|
85
|
-
description: 'the Quiz set (specified using the quiz identification string) the exam is attached to',
|
|
86
|
-
},
|
|
87
|
-
open: {
|
|
88
|
-
type: 'string',
|
|
89
|
-
description: 'exam start time (in YYYY-mm-dd HH:ii:ss format)',
|
|
90
|
-
},
|
|
91
|
-
close: {
|
|
92
|
-
type: 'string',
|
|
93
|
-
description: 'exam end time (in YYYY-mm-dd HH:ii:ss format)',
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
required: ['title', 'quiz', 'open', 'close'],
|
|
97
|
-
},
|
|
55
|
+
inputSchema: z.object({
|
|
56
|
+
language: z.string().describe('desired exam language'),
|
|
57
|
+
title: z.string().describe('title of the exam'),
|
|
58
|
+
id: z.string().describe('External unique exam identifier. Should be maximum 64 characters long!'),
|
|
59
|
+
type: z.string().describe('Type of the exam. (default: exam) - exam: regular exam - championship: exam with championship features enabled - homework: homework assignment, can be paused and continued during the exam period - survey: survey (optionally anonymous) with no grading'),
|
|
60
|
+
quiz: z.string().describe('the Quiz set (specified using the quiz identification string) the exam is attached to'),
|
|
61
|
+
open: z.string().describe('exam start time (in YYYY-mm-dd HH:ii:ss format)'),
|
|
62
|
+
close: z.string().describe('exam end time (in YYYY-mm-dd HH:ii:ss format)'),
|
|
63
|
+
}).partial({ language: true, id: true, type: true }),
|
|
64
|
+
outputSchema: z.object({
|
|
65
|
+
exam: z.string().describe('exam identification string'),
|
|
66
|
+
}),
|
|
98
67
|
},
|
|
99
68
|
// DELETE /exam - Remove/archive exam
|
|
100
69
|
{
|
|
101
70
|
name: 'edubase_delete_exam',
|
|
102
71
|
description: "Remove/archive exam.",
|
|
103
|
-
inputSchema: {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
type: 'string',
|
|
108
|
-
description: 'exam identification string',
|
|
109
|
-
},
|
|
110
|
-
},
|
|
111
|
-
required: ['exam'],
|
|
112
|
-
},
|
|
72
|
+
inputSchema: z.object({
|
|
73
|
+
exam: z.string().describe('exam identification string'),
|
|
74
|
+
}),
|
|
75
|
+
outputSchema: z.object({}).optional(),
|
|
113
76
|
},
|
|
114
77
|
// GET /exam:users - List all users on an exam
|
|
115
78
|
{
|
|
116
79
|
name: 'edubase_get_exam_users',
|
|
117
80
|
description: "List all users on an exam.",
|
|
118
|
-
inputSchema: {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
},
|
|
126
|
-
required: ['exam'],
|
|
127
|
-
},
|
|
81
|
+
inputSchema: z.object({
|
|
82
|
+
exam: z.string().describe('exam identification string'),
|
|
83
|
+
}),
|
|
84
|
+
outputSchema: z.array(z.object({
|
|
85
|
+
user: z.string().describe('user identification string'),
|
|
86
|
+
name: z.string().describe('name of the examinee'),
|
|
87
|
+
})),
|
|
128
88
|
},
|
|
129
89
|
// POST /exam:users - Assign user(s) to an exam
|
|
130
90
|
{
|
|
131
91
|
name: 'edubase_post_exam_users',
|
|
132
92
|
description: "Assign user(s) to an exam.",
|
|
133
|
-
inputSchema: {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
description: 'exam identification string',
|
|
139
|
-
},
|
|
140
|
-
users: {
|
|
141
|
-
type: 'string',
|
|
142
|
-
description: 'comma-separated list of user identification strings',
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
required: ['exam', 'users'],
|
|
146
|
-
},
|
|
93
|
+
inputSchema: z.object({
|
|
94
|
+
exam: z.string().describe('exam identification string'),
|
|
95
|
+
users: z.string().describe('comma-separated list of user identification strings'),
|
|
96
|
+
}),
|
|
97
|
+
outputSchema: z.object({}).optional(),
|
|
147
98
|
},
|
|
148
99
|
// DELETE /exam:users - Remove user(s) from an exam
|
|
149
100
|
{
|
|
150
101
|
name: 'edubase_delete_exam_users',
|
|
151
102
|
description: "Remove user(s) from an exam.",
|
|
152
|
-
inputSchema: {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
description: 'exam identification string',
|
|
158
|
-
},
|
|
159
|
-
users: {
|
|
160
|
-
type: 'string',
|
|
161
|
-
description: 'comma-separated list of user identification strings',
|
|
162
|
-
},
|
|
163
|
-
},
|
|
164
|
-
required: ['exam', 'users'],
|
|
165
|
-
},
|
|
103
|
+
inputSchema: z.object({
|
|
104
|
+
exam: z.string().describe('exam identification string'),
|
|
105
|
+
users: z.string().describe('comma-separated list of user identification strings'),
|
|
106
|
+
}),
|
|
107
|
+
outputSchema: z.object({}).optional(),
|
|
166
108
|
},
|
|
167
109
|
// POST /exam:summary - Submit a new exam summary
|
|
168
110
|
{
|
|
169
111
|
name: 'edubase_post_exam_summary',
|
|
170
112
|
description: "Submit a new AI exam summary.",
|
|
171
|
-
inputSchema: {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
description: 'summary language',
|
|
181
|
-
},
|
|
182
|
-
type: {
|
|
183
|
-
type: 'string',
|
|
184
|
-
description: "Type of summary. (default: ai)\n" +
|
|
185
|
-
"- ai: AI-generated summary"
|
|
186
|
-
},
|
|
187
|
-
summary: {
|
|
188
|
-
type: 'string',
|
|
189
|
-
description: "Summary text. \n" +
|
|
190
|
-
"- basic HTML formatting allowed, but avoid complex designs\n" +
|
|
191
|
-
"- keep the summary short and concise\n" +
|
|
192
|
-
"- try to avoid including personal information (such as usernames, names and contact addresses)"
|
|
193
|
-
},
|
|
194
|
-
llm: {
|
|
195
|
-
type: 'string',
|
|
196
|
-
description: "Name of the Large Language Model used to generate the summary.\n" +
|
|
197
|
-
"- preferred values: openai / claude / gemini"
|
|
198
|
-
},
|
|
199
|
-
model: {
|
|
200
|
-
type: 'string',
|
|
201
|
-
description: 'Exact LLM model name used to generate the summary',
|
|
202
|
-
},
|
|
203
|
-
},
|
|
204
|
-
required: ['exam', 'type', 'summary', 'llm', 'model'],
|
|
205
|
-
},
|
|
113
|
+
inputSchema: z.object({
|
|
114
|
+
exam: z.string().describe('exam identification string'),
|
|
115
|
+
language: z.string().describe('summary language'),
|
|
116
|
+
type: z.string().describe('Type of summary. (default: ai) - ai: AI-generated summary'),
|
|
117
|
+
summary: z.string().describe('Summary text. - basic HTML formatting allowed, but avoid complex designs - keep the summary short and concise - try to avoid including personal information (such as usernames, names and contact addresses)'),
|
|
118
|
+
llm: z.string().describe('Name of the Large Language Model used to generate the summary. - preferred values: openai / claude / gemini'),
|
|
119
|
+
model: z.string().describe('Exact LLM model name used to generate the summary'),
|
|
120
|
+
}),
|
|
121
|
+
outputSchema: z.object({}).optional(),
|
|
206
122
|
},
|
|
207
123
|
];
|
|
208
|
-
/* Output schema definitions */
|
|
209
|
-
export const EDUBASE_API_TOOLS_EXAMS_OUTPUT_SCHEMA = {
|
|
210
|
-
// GET /exams - List owned and managed exams
|
|
211
|
-
edubase_get_exams: {
|
|
212
|
-
type: 'array',
|
|
213
|
-
items: {
|
|
214
|
-
type: 'object',
|
|
215
|
-
properties: {
|
|
216
|
-
exam: {
|
|
217
|
-
type: 'string',
|
|
218
|
-
description: 'exam identification string',
|
|
219
|
-
},
|
|
220
|
-
id: {
|
|
221
|
-
type: 'string',
|
|
222
|
-
description: 'external unique exam identifier (if set for the exam)',
|
|
223
|
-
},
|
|
224
|
-
name: {
|
|
225
|
-
type: 'string',
|
|
226
|
-
description: 'title of the exam',
|
|
227
|
-
},
|
|
228
|
-
active: {
|
|
229
|
-
type: 'boolean',
|
|
230
|
-
description: 'exam is active',
|
|
231
|
-
},
|
|
232
|
-
},
|
|
233
|
-
},
|
|
234
|
-
},
|
|
235
|
-
// GET /exam - Get/check exam
|
|
236
|
-
edubase_get_exam: {
|
|
237
|
-
type: 'object',
|
|
238
|
-
properties: {
|
|
239
|
-
exam: {
|
|
240
|
-
type: 'string',
|
|
241
|
-
description: 'exam identification string',
|
|
242
|
-
},
|
|
243
|
-
id: {
|
|
244
|
-
type: 'string',
|
|
245
|
-
description: 'external unique exam identifier (if set for the exam)',
|
|
246
|
-
},
|
|
247
|
-
name: {
|
|
248
|
-
type: 'string',
|
|
249
|
-
description: 'title of the exam',
|
|
250
|
-
},
|
|
251
|
-
quiz: {
|
|
252
|
-
type: 'string',
|
|
253
|
-
description: "Quiz identification string.\n" +
|
|
254
|
-
"- The Quiz set the exam is attached to"
|
|
255
|
-
},
|
|
256
|
-
active: {
|
|
257
|
-
type: 'boolean',
|
|
258
|
-
description: 'exam is active',
|
|
259
|
-
},
|
|
260
|
-
status: {
|
|
261
|
-
type: 'string',
|
|
262
|
-
description: 'exam status (INACTIVE, ACTIVE, PAUSED, REVIEW, EXPIRED)',
|
|
263
|
-
},
|
|
264
|
-
start: {
|
|
265
|
-
type: 'string',
|
|
266
|
-
description: 'start date and time',
|
|
267
|
-
},
|
|
268
|
-
end: {
|
|
269
|
-
type: 'string',
|
|
270
|
-
description: 'end date and time',
|
|
271
|
-
},
|
|
272
|
-
},
|
|
273
|
-
},
|
|
274
|
-
// GET /exam - Get/check exam
|
|
275
|
-
edubase_post_exam: {
|
|
276
|
-
type: 'object',
|
|
277
|
-
properties: {
|
|
278
|
-
exam: {
|
|
279
|
-
type: 'string',
|
|
280
|
-
description: 'exam identification string',
|
|
281
|
-
},
|
|
282
|
-
},
|
|
283
|
-
},
|
|
284
|
-
// DELETE /exam - Remove/archive exam
|
|
285
|
-
edubase_delete_exam: {},
|
|
286
|
-
// GET /exam:users - List all users on an exam
|
|
287
|
-
edubase_get_exam_users: {
|
|
288
|
-
type: 'array',
|
|
289
|
-
items: {
|
|
290
|
-
type: 'object',
|
|
291
|
-
properties: {
|
|
292
|
-
user: {
|
|
293
|
-
type: 'string',
|
|
294
|
-
description: 'user identification string',
|
|
295
|
-
},
|
|
296
|
-
name: {
|
|
297
|
-
type: 'string',
|
|
298
|
-
description: 'name of the examinee',
|
|
299
|
-
},
|
|
300
|
-
},
|
|
301
|
-
},
|
|
302
|
-
},
|
|
303
|
-
// POST /exam:users - Assign user(s) to an exam
|
|
304
|
-
edubase_post_exam_users: {},
|
|
305
|
-
// DELETE /exam:users - Remove user(s) from an exam
|
|
306
|
-
edubase_delete_exam_users: {},
|
|
307
|
-
// POST /exam:summary - Submit a new exam summary
|
|
308
|
-
edubase_post_exam_summary: {},
|
|
309
|
-
};
|