provide_feedback
Submit grading and personalized feedback for student assignments in Moodle to support learning progress and assessment.
Instructions
Proporciona feedback sobre una tarea entregada por un estudiante
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| assignmentId | Yes | ID de la tarea | |
| feedback | Yes | Texto del feedback a proporcionar | |
| grade | No | Calificación numérica a asignar | |
| studentId | Yes | ID del estudiante |
Implementation Reference
- src/index.ts:446-483 (handler)The handler function that executes the provide_feedback tool. It validates input parameters, calls the Moodle API (mod_assign_save_grade) to save the grade and feedback comment for a student's assignment submission.private async provideFeedback(args: any) { if (!args.studentId || !args.assignmentId || !args.feedback) { throw new McpError( ErrorCode.InvalidParams, 'Student ID, Assignment ID, and feedback are required' ); } console.error(`[API] Providing feedback for student ${args.studentId} on assignment ${args.assignmentId}`); const response = await this.axiosInstance.get('', { params: { wsfunction: 'mod_assign_save_grade', assignmentid: args.assignmentId, userid: args.studentId, grade: args.grade || 0, attemptnumber: -1, // Último intento addattempt: 0, workflowstate: 'released', applytoall: 0, plugindata: { assignfeedbackcomments_editor: { text: args.feedback, format: 1, // Formato HTML }, }, }, }); return { content: [ { type: 'text', text: `Feedback proporcionado correctamente para el estudiante ${args.studentId} en la tarea ${args.assignmentId}.`, }, ], }; }
- src/index.ts:176-196 (schema)Input schema definition for the provide_feedback tool, specifying parameters and required fields.inputSchema: { type: 'object', properties: { studentId: { type: 'number', description: 'ID del estudiante', }, assignmentId: { type: 'number', description: 'ID de la tarea', }, grade: { type: 'number', description: 'Calificación numérica a asignar', }, feedback: { type: 'string', description: 'Texto del feedback a proporcionar', }, }, required: ['studentId', 'assignmentId', 'feedback'],
- src/index.ts:174-252 (registration)Tool registration in the ListToolsRequestSchema response (lines 174-198) and dispatch in the CallToolRequestSchema switch case (lines 251-252).name: 'provide_feedback', description: 'Proporciona feedback sobre una tarea entregada por un estudiante', inputSchema: { type: 'object', properties: { studentId: { type: 'number', description: 'ID del estudiante', }, assignmentId: { type: 'number', description: 'ID de la tarea', }, grade: { type: 'number', description: 'Calificación numérica a asignar', }, feedback: { type: 'string', description: 'Texto del feedback a proporcionar', }, }, required: ['studentId', 'assignmentId', 'feedback'], }, }, { name: 'get_submission_content', description: 'Obtiene el contenido detallado de una entrega específica, incluyendo texto y archivos adjuntos', inputSchema: { type: 'object', properties: { studentId: { type: 'number', description: 'ID del estudiante', }, assignmentId: { type: 'number', description: 'ID de la tarea', }, }, required: ['studentId', 'assignmentId'], }, }, { name: 'get_quiz_grade', description: 'Obtiene la calificación de un estudiante en un quiz específico', inputSchema: { type: 'object', properties: { studentId: { type: 'number', description: 'ID del estudiante', }, quizId: { type: 'number', description: 'ID del quiz', }, }, required: ['studentId', 'quizId'], }, }, ], })); this.server.setRequestHandler(CallToolRequestSchema, async (request) => { console.error(`[Tool] Executing tool: ${request.params.name}`); try { switch (request.params.name) { case 'get_students': return await this.getStudents(); case 'get_assignments': return await this.getAssignments(); case 'get_quizzes': return await this.getQuizzes(); case 'get_submissions': return await this.getSubmissions(request.params.arguments); case 'provide_feedback': return await this.provideFeedback(request.params.arguments);
- src/index.ts:238-281 (registration)The CallToolRequestSchema handler that dispatches to the provide_feedback method based on tool name.this.server.setRequestHandler(CallToolRequestSchema, async (request) => { console.error(`[Tool] Executing tool: ${request.params.name}`); try { switch (request.params.name) { case 'get_students': return await this.getStudents(); case 'get_assignments': return await this.getAssignments(); case 'get_quizzes': return await this.getQuizzes(); case 'get_submissions': return await this.getSubmissions(request.params.arguments); case 'provide_feedback': return await this.provideFeedback(request.params.arguments); case 'get_submission_content': return await this.getSubmissionContent(request.params.arguments); case 'get_quiz_grade': return await this.getQuizGrade(request.params.arguments); default: throw new McpError( ErrorCode.MethodNotFound, `Unknown tool: ${request.params.name}` ); } } catch (error) { console.error('[Error]', error); if (axios.isAxiosError(error)) { return { content: [ { type: 'text', text: `Moodle API error: ${ error.response?.data?.message || error.message }`, }, ], isError: true, }; } throw error; } }); }