Local CLI framework for SJTU Canvas course data, downloads, and indexing with MCP stdio server support
Server has 19 tools with complete JSON schemas and descriptions. Naming follows verb_noun convention (get_, list_, download_, etc.). Descriptions are present but brief (avg ~80 chars, below 194-char baseline). Parameters have types and descriptions. However, output schemas are not documented, responses are returned as pretty-printed JSON without formal schema declarations. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Missing parameter constraints (enums, ranges) for several tools. Composition is sound, tools are single-responsibility and chainable.
Download course files to the local filesystem
Download submission attachments for a course
Export PPT assets from a SJTU course video
Generate a course index with markdown and JSON output
Get details for a specific Canvas course
Get a complete bundle of course data including files, folders, modules, and assignments
Get the current authenticated Canvas user
Output schemas not documented. Tools return pretty-printed JSON without formal schema declarations. LLMs cannot plan downstream calls or validate response structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
Get a specific submission for the current user
Get detailed information about a specific SJTU course video
Get PPT replay metadata for a SJTU course video
Get subtitles for a SJTU course video in SRT format
List all assignments in a Canvas course
List all files in a Canvas course
List all folders in a Canvas course
List all modules in a Canvas course
List SJTU course videos for a Canvas course
List all Canvas courses for the current user
List the current user's submissions for a course
Plan a course download and return the download plan
Descriptions are brief (avg ~65-75 chars, below 194-char baseline). Missing context on WHEN to use each tool and dependencies between tools (e.g., call list_courses before get_course).
No pagination support. list_* tools return all results without limit, offset, or cursor. Large course enrollments could blow context window.
Error handling lacks recovery guidance. Errors are caught and returned as tool_error but do not suggest next steps or alternatives.