MCP server for AI-powered student progress tracking and learning analytics
Server has 10 tools with basic descriptions and input schemas present. However, critical gaps undermine quality: (1) Parameter descriptions lack detail on constraints, formats, and valid ranges, e.g., 'The student ID' provides no guidance on format or how to obtain it. (2) No output schemas documented; responses are free-text markdown strings rather than structured JSON, forcing LLMs to parse unstructured text. (3) Error handling is minimal, most tools return plain error strings without recovery guidance. (4) Destructive operations (delete_student) lack proper confirmation patterns. (5) No pagination support on list_students despite potential for large result sets. (6) Tool names are clear (verb_noun pattern), but parameter naming inconsistencies exist (e.g., 'confirm' boolean for delete is non-standard). Average tool score: 52/100.
Create a new course.
Create a new student record.
Delete a student and all related data.
Enroll a student in a course.
Get comprehensive student profile with performance data.
List all courses.
List all students, optionally filtered by course.
No output schemas documented. All tools return free-text markdown strings instead of structured JSON. LLMs cannot reliably extract data for downstream tool calls or parse results programmatically.
Parameter descriptions lack actionable constraints. E.g., 'The student ID' does not explain format, length, or how to obtain it. 'Grade level (e.g., "9th Grade", "College Freshman")' uses examples instead of enums, inviting hallucinated values.
delete_student uses a non-standard 'confirm' boolean parameter. Best practice is a confirmation step or dry-run pattern. Current design risks accidental deletion if LLM omits the confirm flag.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Remove a student's enrollment from a course.
Update an existing course's information.
Update an existing student's information.
list_students and list_courses lack pagination (limit, offset, cursor). No total count returned. Large result sets will blow context windows and degrade LLM reasoning.
Error handling is minimal. Most errors return plain strings like 'Error: Student not found: {student_id}' without recovery guidance. LLMs cannot determine if the error is retryable or what to do next.