A comprehensive Model Context Protocol (MCP) server for Ed Discussions (EdStem) platform
The server provides 16 tools with consistent naming (verb_noun pattern), generally good descriptions (avg ~100 chars), and complete JSON schemas with typed parameters. However, parameter descriptions are often minimal or missing detail about constraints, formats, and valid ranges. Output schemas are not documented. Error handling guidance is absent. The tools lack idempotency hints, confirmation patterns for destructive operations, and structured error recovery paths. No tool annotations (readOnlyHint, destructiveHint) are present in the source, despite the risk metadata provided. Tool composition is reasonable but some parameter relationships are undocumented.
Generate student-only leaderboards for a course across activity, answers, hearts, questions, and posts
Create a new comment on a thread
Create a new thread in a course
Delete a comment
Delete a thread
Get detailed information about a specific course
Get information about the currently authenticated user
No output schemas documented. LLMs cannot infer what fields are returned, forcing them to guess field names for downstream tool chaining. This breaks the tool composition pattern.
Destructive operations (ed_delete_thread, ed_delete_comment) lack confirmation/dry-run patterns and do not explicitly warn LLMs that these actions are irreversible. Parameter descriptions say only 'Delete a thread' without guidance on consequences.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 28 | - | v1 |
Get detailed information about a specific thread
Check the health and connectivity of the Ed API
List all comments on a thread
List all courses for the current user
List threads in a course with optional filtering
Mark a thread as read
Mark a thread as unread
Update an existing comment
Update an existing thread
No error handling documentation. Tools provide no guidance to LLMs on retryability, user-fixable errors, or what to do if a call fails. No recovery patterns present.
Tool annotations missing. The source shows risk metadata (READ_ONLY, WRITE, DESTRUCTIVE) but these are not expressed as readOnlyHint, destructiveHint, or idempotentHint in the tool schemas. LLMs cannot infer safety properties.
Parameter descriptions lack constraint details. E.g., 'sort' parameter says it accepts 'new', 'top', 'unanswered' but the description does not state these are the ONLY valid values or explain what each means to an LLM. Enum is present in schema but not described in text.
Pagination support incomplete. ed_list_threads accepts limit and offset but does not return total_count or next_cursor. LLMs cannot reliably iterate through large result sets.
Implicit chaining dependencies not documented. ed_create_thread requires course_id and thread_type, but descriptions do not explain that course_id must come from ed_list_courses first, or that certain type values may only be valid for certain roles.
Optional parameter guidance missing. ed_get_thread has optional mark_as_read, but the description does not explain what happens by default or when an LLM should pass false. This forces the LLM to guess side effects.