@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,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
- 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
- },
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
- type: 'object',
46
- properties: {
47
- exam: {
48
- type: 'string',
49
- description: 'exam identification string',
50
- },
51
- },
52
- required: ['exam'],
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
- 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
- },
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
- type: 'object',
105
- properties: {
106
- exam: {
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
- type: 'object',
120
- properties: {
121
- exam: {
122
- type: 'string',
123
- description: 'exam identification string',
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
- 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
- },
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
- 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
- },
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
- 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
- },
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
- };