Read-only MCP server for Union College's Nexus (Moodle) LMS: courses, assignments, grades, materials, calendar, briefings
Nexus MCP has 15 well-named, read-only tools with consistent verb_noun naming (list_, get_, search_, upcoming_, overdue_, current_, course_, submission_, assignment_, daily_, weekly_, what_should_). All tools have descriptions (avg ~80 chars, within baseline 34 - 392). However, input schemas are present but minimal: most parameters lack explicit type constraints, enums, or detailed format guidance. Output schemas are not documented in the source. Error handling is mentioned in server instructions but not visible in tool definitions. No tool annotations (readOnlyHint, etc.) despite all being read-only. Composition is sound, tools are single-purpose and chainable (e.g., search_course_materials → get_material). Parameter descriptions are brief but present.
Get detailed information about a specific assignment including description, due date, and submission status
Get the student's grade in a specific course
Get recent updates in courses since a specified time
Get the student's current grades in all courses
Get a daily briefing of what's due today, recent announcements, and important updates
Get detailed information about a specific course including sections and modules
Get the content of a course material (file, page, or resource)
Output schemas not documented. LLMs cannot plan downstream calls or extract fields without knowing what each tool returns. Baseline: 100% of A+ tools have documented return types.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All 15 tools are read-only but lack explicit annotation. Agents cannot infer safety properties without annotations.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
List all courses the student is enrolled in, optionally filtered by status (inprogress, past, future)
Get the student's identity, Nexus version, and timezone information
Get assignments that are overdue
Search for course materials (files, pages, resources) by keyword
Get the submission status for a specific assignment
Get assignments due in the next N days (default 7)
Get a weekly briefing of assignments due this week, course updates, and announcements
Get a prioritized list of what the student should work on next based on due dates and course progress
Parameter descriptions lack format constraints and enums. E.g., 'status' in list_courses accepts 'inprogress|past|future|all' but no enum constraint is visible; 'since' in course_updates accepts '24h|7d|30d|ISO8601' but no enum. Baseline: constrained-input pattern requires enums for known sets.
No pagination parameters visible for list_courses or search_course_materials. Large result sets risk context window exhaustion. Baseline: tools returning lists should accept limit/offset and return total count.
Error handling guidance not visible in tool definitions. Server instructions mention error codes (NEXUS_AUTH_ERROR, NEXUS_PERMISSION_ERROR, etc.) but tools do not document recovery steps. Baseline: error responses must tell LLM what to do next.