MCP Server for Moodle Connector. Exposes Moodle connector as MCP tools for Claude Code, OpenCode, and other MCP clients.
Server has 8 tools with explicit schemas and descriptions, but quality is inconsistent. All tools have basic descriptions (10-50 chars), which is below the 50-200 char baseline for LLM-optimized descriptions. Parameter descriptions are minimal or missing context. No output schemas documented. Error handling is generic ('Tool execution failed') with no recovery guidance. Tool names lack action verbs (e.g., 'courses' instead of 'list_courses', 'materials' instead of 'get_materials'). No parameter validation, no enum constraints, no field-level documentation. The 'download' tool accepts a URL parameter but provides no format constraints or validation hints.
Get course announcements
Get all assignments with deadlines
Get list of enrolled courses
Get upcoming deadlines and calendar events
Download a file from Moodle
Get grades overview or per-course grades
Get course materials and resources
Tool names lack action verbs. 'courses', 'materials', 'announcements' should be 'list_courses', 'get_materials', 'get_announcements'. LLMs infer intent from verb-noun patterns; bare nouns are ambiguous.
Descriptions are too short (10-50 chars vs. baseline 50-200). 'Get list of enrolled courses' lacks context on when to use this vs. summary(). No guidance on prerequisites or expected output structure.
No output schemas documented. LLMs cannot plan downstream calls or extract fields. E.g., does courses() return course_id, course_name, enrollment_date? Unknown.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Get full summary of all course data
Error handling is generic and non-actionable. 'Tool execution failed. Please check your configuration and try again.' gives the LLM no recovery path. Should categorize errors (retryable, user-fixable, fatal) and suggest next steps.
Optional parameters lack clarity on defaults and constraints. 'course_id' is described as 'Optional: specific course ID' but no guidance on what happens if omitted (all courses? current course?). No enum constraints, no format hints.