get_submissions
Retrieve student assignment submissions from Moodle courses. Filter by specific students or assignments to access submission data for grading or review.
Instructions
Obtiene las entregas de tareas en el curso configurado
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| assignmentId | No | ID opcional de la tarea. Si no se proporciona, se devolverán todas las entregas | |
| studentId | No | ID opcional del estudiante. Si no se proporciona, se devolverán entregas de todos los estudiantes |
Implementation Reference
- src/index.ts:357-444 (handler)The primary handler function for the 'get_submissions' tool. Fetches assignments from Moodle, retrieves submissions and grades for specified assignments and optionally a student, processes and formats the data, and returns it as JSON.private async getSubmissions(args: any) { const studentId = args.studentId; const assignmentId = args.assignmentId; console.error(`[API] Requesting submissions${studentId ? ` for student ${studentId}` : ''}`); // Primero obtenemos todas las tareas const assignmentsResponse = await this.axiosInstance.get('', { params: { wsfunction: 'mod_assign_get_assignments', courseids: [MOODLE_COURSE_ID], }, }); const assignments = assignmentsResponse.data.courses[0]?.assignments || []; // Si se especificó un ID de tarea, filtramos solo esa tarea const targetAssignments = assignmentId ? assignments.filter((a: any) => a.id === assignmentId) : assignments; if (targetAssignments.length === 0) { return { content: [ { type: 'text', text: 'No se encontraron tareas para el criterio especificado.', }, ], }; } // Para cada tarea, obtenemos todas las entregas const submissionsPromises = targetAssignments.map(async (assignment: any) => { const submissionsResponse = await this.axiosInstance.get('', { params: { wsfunction: 'mod_assign_get_submissions', assignmentids: [assignment.id], }, }); const submissions = submissionsResponse.data.assignments[0]?.submissions || []; // Obtenemos las calificaciones para esta tarea const gradesResponse = await this.axiosInstance.get('', { params: { wsfunction: 'mod_assign_get_grades', assignmentids: [assignment.id], }, }); const grades = gradesResponse.data.assignments[0]?.grades || []; // Si se especificó un ID de estudiante, filtramos solo sus entregas const targetSubmissions = studentId ? submissions.filter((s: any) => s.userid === studentId) : submissions; // Procesamos cada entrega const processedSubmissions = targetSubmissions.map((submission: any) => { const studentGrade = grades.find((g: any) => g.userid === submission.userid); return { userid: submission.userid, status: submission.status, timemodified: new Date(submission.timemodified * 1000).toISOString(), grade: studentGrade ? studentGrade.grade : 'No calificado', }; }); return { assignment: assignment.name, assignmentId: assignment.id, submissions: processedSubmissions.length > 0 ? processedSubmissions : 'No hay entregas', }; }); const results = await Promise.all(submissionsPromises); return { content: [ { type: 'text', text: JSON.stringify(results, null, 2), }, ], }; }
- src/index.ts:158-171 (schema)Input schema for 'get_submissions' tool defining optional parameters studentId and assignmentId.inputSchema: { type: 'object', properties: { studentId: { type: 'number', description: 'ID opcional del estudiante. Si no se proporciona, se devolverán entregas de todos los estudiantes', }, assignmentId: { type: 'number', description: 'ID opcional de la tarea. Si no se proporciona, se devolverán todas las entregas', }, }, required: [], },
- src/index.ts:155-172 (registration)Registration of the 'get_submissions' tool in the MCP server's list of available tools, including name, description, and input schema.{ name: 'get_submissions', description: 'Obtiene las entregas de tareas en el curso configurado', inputSchema: { type: 'object', properties: { studentId: { type: 'number', description: 'ID opcional del estudiante. Si no se proporciona, se devolverán entregas de todos los estudiantes', }, assignmentId: { type: 'number', description: 'ID opcional de la tarea. Si no se proporciona, se devolverán todas las entregas', }, }, required: [], }, },
- src/index.ts:249-250 (registration)Dispatch registration in the CallToolRequestSchema handler that calls the getSubmissions method when 'get_submissions' is invoked.case 'get_submissions': return await this.getSubmissions(request.params.arguments);