MCP server for D2L Brightspace (multi-auth, opt-in writes, session cache)
17 tools with consistent verb-noun naming (get_*, clear_*). All have descriptions (avg ~80 chars, within baseline 34-392). Input schemas present for all tools with typed parameters. However, descriptions are terse and lack WHEN/WHY guidance. Output schemas are not documented in visible code. Error handling is minimal, no recovery guidance or actionable error messages. Parameter descriptions are adequate but lack format constraints, ranges, or dependency hints. No tool annotations (readOnlyHint/destructiveHint). Composition is sound (single responsibility per tool), but chaining metadata (e.g., course_id in responses) not verified in source.
Verify authentication status and session expiration
Clear HTTP response cache and/or domain-specific caches (courses, grades, assignments, content, communications, calendar)
Retrieve announcements for a course
Retrieve assignment files and instructions, with optional local save capability
Retrieve assignments for a course with optional detailed formatting
Retrieve audit log entries for write tool invocations
Retrieve calendar events for a course within a specified number of days
Output schemas not documented in visible source code. LLMs cannot plan downstream tool calls or extract required fields without knowing response structure.
Descriptions lack WHEN/WHY context. E.g., 'Retrieve announcements for a course' does not explain when to call this vs get-course-content or get-discussions. Descriptions average ~80 chars but lack dependency hints.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot infer which tools are safe to retry or have side effects. clear-cache is reversible but not marked.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Retrieve email addresses of all students in a course
Retrieve course content modules and topics with optional depth control
Retrieve server diagnostics including metrics, profile, base URL, and version information
Retrieve discussion forums and topics for a course
Retrieve feedback for a specific assignment submission
Retrieve user's grades for a course with optional detailed formatting
Retrieve groups the authenticated user belongs to in a course
Retrieve quiz attempt history with scores and submission status
Retrieve course roster with optional role filtering
Retrieve course syllabus content
Parameter descriptions lack format constraints and ranges. E.g., 'days' in get-calendar-events has no min/max; 'limit' in get-announcements has no bounds. LLMs may pass absurd values.
No error handling guidance in visible code. Errors likely return raw HTTP status or stack traces instead of actionable recovery hints (e.g., 'Course not found. Try get-roster to list available courses.').