@edubase/mcp 1.0.23

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,348 @@
1
+ /* Tool definitions */
2
+ export const EDUBASE_API_TOOLS_CLASSES = [
3
+ // GET /classes - List owned and managed classes
4
+ {
5
+ name: 'edubase_get_classes',
6
+ description: "List owned and managed classes.",
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
+ },
25
+ },
26
+ // GET /class - Get/check class
27
+ {
28
+ name: 'edubase_get_class',
29
+ description: "Get/check class.",
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ class: {
34
+ type: 'string',
35
+ description: 'class identification string',
36
+ },
37
+ },
38
+ required: ['class'],
39
+ },
40
+ },
41
+ // GET /class:assignments - List all assignments in a class
42
+ {
43
+ name: 'edubase_get_class_assignments',
44
+ description: "List all assignments in 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:members - List all members in a class
57
+ {
58
+ name: 'edubase_get_class_members',
59
+ description: "List all members in a class.",
60
+ inputSchema: {
61
+ type: 'object',
62
+ properties: {
63
+ class: {
64
+ type: 'string',
65
+ description: 'class identification string',
66
+ },
67
+ },
68
+ required: ['class'],
69
+ },
70
+ },
71
+ // POST /class:members - Assign user(s) to a class
72
+ {
73
+ name: 'edubase_post_class_members',
74
+ description: "Assign user(s) to a class. Updates memberships if already member of the class.",
75
+ inputSchema: {
76
+ type: 'object',
77
+ properties: {
78
+ class: {
79
+ type: 'string',
80
+ description: 'class identification string',
81
+ },
82
+ users: {
83
+ type: 'string',
84
+ description: 'comma-separated list of user identification strings',
85
+ },
86
+ expires: {
87
+ type: 'string',
88
+ description: 'expiry in days or YYYY-MM-DD HH:ii:ss',
89
+ },
90
+ notify: {
91
+ type: 'boolean',
92
+ description: 'notify users (default: false)',
93
+ },
94
+ },
95
+ required: ['class', 'users'],
96
+ },
97
+ },
98
+ // DELETE /class:members - Remove user(s) from a class
99
+ {
100
+ name: 'edubase_delete_class_members',
101
+ description: "Remove user(s) from a class.",
102
+ inputSchema: {
103
+ type: 'object',
104
+ properties: {
105
+ class: {
106
+ type: 'string',
107
+ description: 'class identification string',
108
+ },
109
+ users: {
110
+ type: 'string',
111
+ description: 'comma-separated list of user identification strings',
112
+ },
113
+ },
114
+ required: ['class', 'users'],
115
+ },
116
+ },
117
+ // POST /classes:members - Assign user(s) to class(es)
118
+ {
119
+ name: 'edubase_post_classes_members',
120
+ description: "Assign user(s) to class(es). Updates memberships if already member of a class.",
121
+ inputSchema: {
122
+ type: 'object',
123
+ properties: {
124
+ classes: {
125
+ type: 'string',
126
+ description: 'comma-separated list of class identification strings',
127
+ },
128
+ users: {
129
+ type: 'string',
130
+ description: 'comma-separated list of user identification strings',
131
+ },
132
+ expires: {
133
+ type: 'string',
134
+ description: 'expiry in days or YYYY-MM-DD HH:ii:ss',
135
+ },
136
+ notify: {
137
+ type: 'boolean',
138
+ description: 'notify users (default: false)',
139
+ },
140
+ },
141
+ required: ['classes', 'users'],
142
+ },
143
+ },
144
+ // GET /user:classes - List all classes a user is member of
145
+ {
146
+ name: 'edubase_get_user_classes',
147
+ description: "List all classes a user is member of.",
148
+ inputSchema: {
149
+ type: 'object',
150
+ properties: {
151
+ user: {
152
+ type: 'string',
153
+ description: 'user identification string',
154
+ },
155
+ },
156
+ required: ['user'],
157
+ },
158
+ },
159
+ // POST /user:classes - Assign user to class(es)
160
+ {
161
+ name: 'edubase_post_user_classes',
162
+ description: "Assign user to class(es). Updates membership if already member of a class.",
163
+ inputSchema: {
164
+ type: 'object',
165
+ properties: {
166
+ user: {
167
+ type: 'string',
168
+ description: 'user identification string',
169
+ },
170
+ classes: {
171
+ type: 'string',
172
+ description: 'comma-separated list of class identification strings',
173
+ },
174
+ expires: {
175
+ type: 'string',
176
+ description: 'expiry in days or YYYY-MM-DD HH:ii:ss',
177
+ },
178
+ notify: {
179
+ type: 'boolean',
180
+ description: 'notify user (default: false)',
181
+ },
182
+ },
183
+ required: ['user', 'classes'],
184
+ },
185
+ },
186
+ // DELETE /user:classes - Remove user from class(es)
187
+ {
188
+ name: 'edubase_delete_user_classes',
189
+ description: "Remove user from class(es).",
190
+ inputSchema: {
191
+ type: 'object',
192
+ properties: {
193
+ user: {
194
+ type: 'string',
195
+ description: 'user identification string',
196
+ },
197
+ classes: {
198
+ type: 'string',
199
+ description: 'comma-separated list of class identification strings',
200
+ },
201
+ },
202
+ required: ['user', 'classes'],
203
+ },
204
+ },
205
+ ];
206
+ /* Output schema definitions */
207
+ export const EDUBASE_API_TOOLS_CLASSES_OUTPUT_SCHEMA = {
208
+ // GET /classes - List owned and managed classes
209
+ edubase_get_classes: {
210
+ type: 'array',
211
+ items: {
212
+ type: 'object',
213
+ properties: {
214
+ class: {
215
+ type: 'string',
216
+ description: 'class identification string',
217
+ },
218
+ id: {
219
+ type: 'string',
220
+ description: 'external unique class identifier (if set for the class)',
221
+ },
222
+ name: {
223
+ type: 'string',
224
+ description: 'title of the class',
225
+ },
226
+ },
227
+ },
228
+ },
229
+ // GET /class - Get/check class
230
+ edubase_get_class: {
231
+ type: 'object',
232
+ properties: {
233
+ class: {
234
+ type: 'string',
235
+ description: 'class identification string',
236
+ },
237
+ id: {
238
+ type: 'string',
239
+ description: 'external unique class identifier (if set for the class)',
240
+ },
241
+ name: {
242
+ type: 'string',
243
+ description: 'title of the class',
244
+ },
245
+ start: {
246
+ type: 'string',
247
+ description: 'start date and time (if set)',
248
+ },
249
+ end: {
250
+ type: 'string',
251
+ description: 'end date and time (if set)',
252
+ },
253
+ },
254
+ },
255
+ // GET /class:assignments - List all assignments in a class
256
+ edubase_get_class_assignments: {
257
+ type: 'array',
258
+ items: {
259
+ type: 'object',
260
+ properties: {
261
+ assignment: {
262
+ type: 'string',
263
+ description: 'assignment identification string',
264
+ },
265
+ name: {
266
+ type: 'string',
267
+ description: 'title of the assignment',
268
+ },
269
+ link: {
270
+ type: 'string',
271
+ description: 'link to the assignment page',
272
+ },
273
+ status: {
274
+ type: 'string',
275
+ description: 'assignment and submission state (INACTIVE, ACTIVE, STARTED, SUBMITTED, GRADED)',
276
+ },
277
+ starts: {
278
+ type: 'string',
279
+ description: 'when the assignment submission starts',
280
+ },
281
+ ends: {
282
+ type: 'string',
283
+ description: 'when the assignment submission ends',
284
+ },
285
+ },
286
+ },
287
+ },
288
+ // GET /class:members - List all members in a class
289
+ edubase_get_class_members: {
290
+ type: 'array',
291
+ items: {
292
+ type: 'object',
293
+ properties: {
294
+ user: {
295
+ type: 'string',
296
+ description: 'user identification string',
297
+ },
298
+ name: {
299
+ type: 'string',
300
+ description: 'name of the member',
301
+ },
302
+ active: {
303
+ type: 'boolean',
304
+ description: 'active membership (approved and not expired)',
305
+ },
306
+ },
307
+ },
308
+ },
309
+ // POST /class:members - Assign user(s) to a class
310
+ edubase_post_class_members: {},
311
+ // DELETE /class:members - Remove user(s) from a class
312
+ edubase_delete_class_members: {},
313
+ // POST /classes:members - Assign user(s) to class(es)
314
+ edubase_post_classes_members: {},
315
+ // GET /user:classes - List all classes a user is member of
316
+ edubase_get_user_classes: {
317
+ type: 'array',
318
+ items: {
319
+ type: 'object',
320
+ properties: {
321
+ class: {
322
+ type: 'string',
323
+ description: 'class identification string',
324
+ },
325
+ id: {
326
+ type: 'string',
327
+ description: 'external unique class identifier (if set for the class)',
328
+ },
329
+ name: {
330
+ type: 'string',
331
+ description: 'title of the class',
332
+ },
333
+ link: {
334
+ type: 'string',
335
+ description: 'link to the class page',
336
+ },
337
+ active: {
338
+ type: 'boolean',
339
+ description: 'active membership (approved and not expired)',
340
+ },
341
+ },
342
+ },
343
+ },
344
+ // POST /user:classes - Assign user to class(es)
345
+ edubase_post_user_classes: {},
346
+ // DELETE /user:classes - Remove user from class(es)
347
+ edubase_delete_user_classes: {},
348
+ };
@@ -0,0 +1,309 @@
1
+ /*
2
+ # Exams (Highest Level in EduBase Hierarchy)
3
+
4
+ Exams are time-limited, secure instances of Quiz sets in EduBase.
5
+ They represent the highest level in the EduBase hierarchy, above both Questions and Quiz sets.
6
+
7
+ Key characteristics:
8
+ - Exams are always created from existing Quiz sets
9
+ - They have specific start and end times
10
+ - They include additional security features (cheating detection, prevention of simultaneous account access during exam)
11
+ - Usually restrict access to hints/solutions
12
+ - Generally limited to one attempt per user
13
+ - Questions cannot exist directly in Exams without being part of a Quiz set
14
+ */
15
+ /* Tool definitions */
16
+ export const EDUBASE_API_TOOLS_EXAMS = [
17
+ // GET /exams - List owned and managed exams
18
+ {
19
+ name: 'edubase_get_exams',
20
+ description: "List owned and managed exams. Exams are the highest level in the EduBase Quiz hierarchy, built from Quiz sets.",
21
+ inputSchema: {
22
+ type: 'object',
23
+ properties: {
24
+ search: {
25
+ type: 'string',
26
+ description: 'search string to filter results',
27
+ },
28
+ limit: {
29
+ type: 'number',
30
+ description: 'limit number of results (default: 16)',
31
+ },
32
+ page: {
33
+ type: 'number',
34
+ description: 'page number (default: 1), not used in search mode!',
35
+ },
36
+ },
37
+ required: [],
38
+ },
39
+ },
40
+ // GET /exam - Get/check exam
41
+ {
42
+ name: 'edubase_get_exam',
43
+ description: "Get/check exam.",
44
+ inputSchema: {
45
+ type: 'object',
46
+ properties: {
47
+ exam: {
48
+ type: 'string',
49
+ description: 'exam identification string',
50
+ },
51
+ },
52
+ required: ['exam'],
53
+ },
54
+ },
55
+ // POST /exam - Create a new exam from an existing Quiz set
56
+ {
57
+ name: 'edubase_post_exam',
58
+ 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
+ type: 'object',
61
+ properties: {
62
+ language: {
63
+ type: 'string',
64
+ description: 'desired exam language',
65
+ },
66
+ title: {
67
+ type: 'string',
68
+ description: 'title of the exam',
69
+ },
70
+ id: {
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
+ },
98
+ },
99
+ // DELETE /exam - Remove/archive exam
100
+ {
101
+ name: 'edubase_delete_exam',
102
+ description: "Remove/archive exam.",
103
+ inputSchema: {
104
+ type: 'object',
105
+ properties: {
106
+ exam: {
107
+ type: 'string',
108
+ description: 'exam identification string',
109
+ },
110
+ },
111
+ required: ['exam'],
112
+ },
113
+ },
114
+ // GET /exam:users - List all users on an exam
115
+ {
116
+ name: 'edubase_get_exam_users',
117
+ description: "List all users on an exam.",
118
+ inputSchema: {
119
+ type: 'object',
120
+ properties: {
121
+ exam: {
122
+ type: 'string',
123
+ description: 'exam identification string',
124
+ },
125
+ },
126
+ required: ['exam'],
127
+ },
128
+ },
129
+ // POST /exam:users - Assign user(s) to an exam
130
+ {
131
+ name: 'edubase_post_exam_users',
132
+ description: "Assign user(s) to an exam.",
133
+ inputSchema: {
134
+ type: 'object',
135
+ properties: {
136
+ exam: {
137
+ type: 'string',
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
+ },
147
+ },
148
+ // DELETE /exam:users - Remove user(s) from an exam
149
+ {
150
+ name: 'edubase_delete_exam_users',
151
+ description: "Remove user(s) from an exam.",
152
+ inputSchema: {
153
+ type: 'object',
154
+ properties: {
155
+ exam: {
156
+ type: 'string',
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
+ },
166
+ },
167
+ // POST /exam:summary - Submit a new exam summary
168
+ {
169
+ name: 'edubase_post_exam_summary',
170
+ description: "Submit a new AI exam summary.",
171
+ inputSchema: {
172
+ type: 'object',
173
+ properties: {
174
+ exam: {
175
+ type: 'string',
176
+ description: 'exam identification string',
177
+ },
178
+ language: {
179
+ type: 'string',
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
+ },
206
+ },
207
+ ];
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
+ };