DeepTutor CLI
HKUDS/DeepTutor
Teaches the agent to set up and run DeepTutor from the command line: chat and capabilities, knowledge bases, partners, memory, sessions, notebooks and the server or Web app.
Bulk grading workflows for Canvas LMS assignments using rubrics.
$ npx skills add vishalsachdev/canvas-mcp --skill canvas-bulk-grading -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install vishalsachdev/canvas-mcp canvas-bulk-grading --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/vishalsachdev/canvas-mcp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/canvas-bulk-grading .claude/skills/canvas-bulk-grading && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "canvas-bulk-grading" agent skill from https://github.com/vishalsachdev/canvas-mcp/tree/main/skills/canvas-bulk-grading into .claude/skills/canvas-bulk-grading/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-bulk-grading", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/vishalsachdev/canvas-mcp/tree/main/skills/canvas-bulk-gradingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add vishalsachdev/canvas-mcp --skill canvas-bulk-grading -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install vishalsachdev/canvas-mcp canvas-bulk-grading --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vishalsachdev/canvas-mcp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/canvas-bulk-grading .agents/skills/canvas-bulk-grading && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "canvas-bulk-grading" agent skill from https://github.com/vishalsachdev/canvas-mcp/tree/main/skills/canvas-bulk-grading into .agents/skills/canvas-bulk-grading/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-bulk-grading", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add vishalsachdev/canvas-mcp --skill canvas-bulk-grading -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install vishalsachdev/canvas-mcp canvas-bulk-grading --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vishalsachdev/canvas-mcp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/canvas-bulk-grading .cursor/skills/canvas-bulk-grading && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "canvas-bulk-grading" agent skill from https://github.com/vishalsachdev/canvas-mcp/tree/main/skills/canvas-bulk-grading into .cursor/skills/canvas-bulk-grading/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-bulk-grading", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/vishalsachdev/canvas-mcp.git --path skills/canvas-bulk-grading--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add vishalsachdev/canvas-mcp --skill canvas-bulk-grading -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install vishalsachdev/canvas-mcp canvas-bulk-grading --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vishalsachdev/canvas-mcp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/canvas-bulk-grading .gemini/skills/canvas-bulk-grading && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "canvas-bulk-grading" agent skill from https://github.com/vishalsachdev/canvas-mcp/tree/main/skills/canvas-bulk-grading into .gemini/skills/canvas-bulk-grading/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-bulk-grading", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install vishalsachdev/canvas-mcp canvas-bulk-gradingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add vishalsachdev/canvas-mcp --skill canvas-bulk-grading -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/vishalsachdev/canvas-mcp.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/canvas-bulk-grading .github/skills/canvas-bulk-grading && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "canvas-bulk-grading" agent skill from https://github.com/vishalsachdev/canvas-mcp/tree/main/skills/canvas-bulk-grading into .github/skills/canvas-bulk-grading/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-bulk-grading", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add vishalsachdev/canvas-mcp --skill canvas-bulk-grading -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install vishalsachdev/canvas-mcp canvas-bulk-grading --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vishalsachdev/canvas-mcp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/canvas-bulk-grading .opencode/skills/canvas-bulk-grading && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "canvas-bulk-grading" agent skill from https://github.com/vishalsachdev/canvas-mcp/tree/main/skills/canvas-bulk-grading into .opencode/skills/canvas-bulk-grading/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "canvas-bulk-grading", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
canvas-bulk-gradingBulk grading workflows for Canvas LMS assignments using rubrics.
Canvas Bulk Grading is an agent skill from vishalsachdev/canvas-mcp. Bulk grading workflows for Canvas LMS assignments using rubrics. Covers single grading, batch grading, and code execution strategies with safety-first dry runs.
Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Education, covering Quizzes and assessments. The repository describes itself as: Canvas LMS MCP server — up to 102 tools and 8 agent skills for students & educators. Works with Claude, Cursor, Codex, and 40+ agents. The licence is MIT.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit eeeb479. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Canvas Bulk Grading loads about 2k tokens when it runs. Until then it costs about 45 tokens; SKILL.md has 762 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from vishalsachdev/canvas-mcp at commit eeeb479, republished under its MIT licence (© vishalsachdev). 762 words, ~2,003 tokens.
.claude/skills/canvas-bulk-grading/SKILL.md (or your agent's skills folder).Grade Canvas LMS assignments efficiently using rubric-based workflows. This skill requires the Canvas MCP server to be running and authenticated with an instructor or TA token.
use_for_grading=true. Use create_rubric for creation and associate_rubric for an existing rubric; use update_rubric (two-call preview + token) for text/point edits; add or remove criteria in the Canvas UI.Before grading, retrieve the assignment details and its rubric criteria.
get_assignment_details(course_identifier, assignment_id)Then get the rubric. Use get_rubric if the rubric is already linked to the assignment, or list_rubrics to browse all rubrics in the course:
get_rubric(course_identifier, assignment_id=assignment_id)
list_rubrics(course_identifier)
get_rubric(course_identifier, rubric_id=rubric_id)Record the criterion IDs (often prefixed with underscore, e.g., _8027) and rating IDs from the rubric response. These are required for rubric-based grading.
Retrieve all student submissions to determine how many need grading:
list_submissions(course_identifier, assignment_id)Note the user_id for each submission and the workflow_state (submitted, graded, pending_review). Count the submissions that need grading to determine which strategy to use.
Use this decision tree based on the number of submissions to grade:
How many submissions need grading?
|
+-- 1-9 submissions
| Use grade_with_rubric (one call per submission)
|
+-- 10-29 submissions
| Use bulk_grade_submissions (concurrent batch processing)
| Set max_concurrent: 5, rate_limit_delay: 1.0
| Run with dry_run: true first (Safety Rule 1)
|
+-- 30+ submissions OR custom grading logic needed
Use execute_typescript with bulkGrade function
Grading logic runs locally; only selected output returns to the model
Pass dryRun: true on the first runCall grade_with_rubric once per student:
grade_with_rubric(
course_identifier,
assignment_id,
user_id,
rubric_assessment: {
"criterion_id": {
"points": <number>,
"rating_id": "<string>", // optional
"comments": "<string>" // optional per-criterion feedback
}
},
comment: "Overall feedback" // optional
)Always dry run first. Build the grades dictionary mapping each user ID to their grade data, then validate before submitting:
bulk_grade_submissions(
course_identifier,
assignment_id,
grades: {
"user_id_1": {
"rubric_assessment": {
"criterion_id": {"points": 85, "comments": "Good analysis"}
},
"comment": "Overall feedback"
},
"user_id_2": {
"grade": 92,
"comment": "Excellent work"
}
},
dry_run: true, // VALIDATE FIRST
max_concurrent: 5,
rate_limit_delay: 1.0
)Review the dry run output. If everything looks correct, re-run with dry_run: false.
For large classes or custom grading logic, use execute_typescript to run grading locally. This avoids loading all submission data into the conversation context.
execute_typescript(code: `
import { bulkGrade } from './canvas/grading/bulkGrade.js';
await bulkGrade({
courseIdentifier: "COURSE_ID",
assignmentId: "ASSIGNMENT_ID",
dryRun: true, // preview first; re-run with false after review
gradingFunction: (submission) => {
// Custom grading logic runs locally -- no token cost
const notebook = submission.attachments?.find(
f => f.filename.endsWith('.ipynb')
);
if (!notebook) return null; // skip ungraded
return {
points: 100,
rubricAssessment: { "_8027": { points: 100 } }
// No `comment` here on purpose -- see Safety Rule 6. Add one only when
// the instructor asked for written feedback, and make it feedback.
};
}
});
`)Use search_canvas_tools("grading", "signatures") to discover available TypeScript modules and their function signatures before writing code.
The three strategies have very different token costs:
| Strategy | When | Token Cost | Why |
|---|---|---|---|
grade_with_rubric | 1-9 submissions | Low | Few round-trips, small payloads |
bulk_grade_submissions | 10-29 submissions | Medium | One call with batch data |
execute_typescript | 30+ submissions | Workload-dependent | Grading logic runs locally; only the code and selected output need to enter model context |
The key insight: as submission count grows, sending grading logic to the server can use less model context than bringing all submission data into the conversation.
bulk_grade_submissions, set dry_run: true before the real run. Review the output for correctness.grade_with_rubric first. Verify in Canvas that the grade and rubric feedback appear correctly.max_concurrent: 5 and rate_limit_delay: 1.0 (1 second between batches). Canvas rate limits are approximately 700 requests per 10 minutes.| Error | Cause | Action |
|---|---|---|
| 401 Unauthorized | Token expired or invalid | Regenerate Canvas API token |
| 403 Forbidden | Not an instructor/TA for this course | Verify Canvas role |
| 404 Not Found | Wrong course, assignment, or rubric ID | Re-check IDs with list_assignments or list_rubrics |
| 422 Unprocessable | Invalid rubric assessment format | Verify criterion IDs and point ranges match the rubric |
| Partial failures in bulk | Some grades submitted, others failed | Check each status. Unconfirmed assessments may already be saved: inspect Canvas before retrying to avoid duplicate comments. Retry only confirmed unsaved failures |
© vishalsachdev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/canvas-bulk-grading of vishalsachdev/canvas-mcp.
Open the folder on GitHubat commit eeeb479
Canvas Bulk Grading next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Canvas Bulk Grading this skillvishalsachdev/canvas-mcp | 284 | — | ~2k | Automated safety check: Pass | MIT | |
| DeepTutor CLIHKUDS/DeepTutor | 41k | — | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| AI Engineering Placement Quizrohitg00/ai-engineering-from-scratch | 66k | — | ~2k | Automated safety check: Pass | MIT | |
| Codebase to Coursezarazhangrui/codebase-to-course | 5.7k | — | ~4.4k | Automated safety check: Pass | None | |
| AI Engineering Phase Quizrohitg00/ai-engineering-from-scratch | 66k | — | ~2.1k | Automated safety check: Pass | MIT | |
| Scholar EvaluationK-Dense-AI/claude-scientific-writer | 2.4k | 2 repos | ~2.9k | Automated safety check: Notes | MIT |
HKUDS/DeepTutor
Teaches the agent to set up and run DeepTutor from the command line: chat and capabilities, knowledge bases, partners, memory, sessions, notebooks and the server or Web app.
rohitg00/ai-engineering-from-scratch
Runs a 10-question quiz across five areas to place a learner in the AI Engineering from Scratch curriculum, so they skip what they already know.
zarazhangrui/codebase-to-course
Turns a codebase into an interactive single-page HTML course for non-technical learners, with scroll modules, animated diagrams, quizzes and plain-English code translations.
rohitg00/ai-engineering-from-scratch
Quizzes you on a completed phase of the AI Engineering from Scratch course, taking a phase number or name and mapping it to that phase's directory.
K-Dense-AI/claude-scientific-writer
Provide qualitative-first, evidence-traceable developmental review of scholarly works and audit low-stakes research-assessment rubrics with optional local quality controls.
guanyang/open-agent-hub
This skill should be used when building agent evaluation systems: deterministic checks, regression suites, multi-dimensional rubrics, quality gates, production monitoring, baseline comparison, and…
vishalsachdev/canvas-mcp
Accessibility audit and remediation for Canvas LMS courses. An agent skill from vishalsachdev/canvas-mcp.
vishalsachdev/canvas-mcp
Scaffold complete Canvas LMS course structures from specs, templates, or existing courses.
vishalsachdev/canvas-mcp
Learning designer quality check for Canvas LMS courses. An agent skill from vishalsachdev/canvas-mcp.
vishalsachdev/canvas-mcp
Discussion forum facilitator for Canvas LMS. An agent skill from vishalsachdev/canvas-mcp.
vishalsachdev/canvas-mcp
Educator morning course health check for Canvas LMS. An agent skill from vishalsachdev/canvas-mcp.
vishalsachdev/canvas-mcp
Educator peer review management for Canvas LMS. An agent skill from vishalsachdev/canvas-mcp.
Categories
Bulk grading workflows for Canvas LMS assignments using rubrics. Canvas Bulk Grading is an agent skill from vishalsachdev/canvas-mcp. Bulk grading workflows for Canvas LMS assignments using rubrics.
Canvas Bulk Grading fits situations like: tasks that involve Quizzes and assessments.
Run `npx skills add vishalsachdev/canvas-mcp --skill canvas-bulk-grading -a claude-code`. Or copy the skill folder (skills/canvas-bulk-grading in vishalsachdev/canvas-mcp) into .claude/skills/canvas-bulk-grading in your project. Claude Code loads it when a task matches its description.
Run `npx skills add vishalsachdev/canvas-mcp --skill canvas-bulk-grading -a codex`. Or copy the skill folder (skills/canvas-bulk-grading in vishalsachdev/canvas-mcp) into .agents/skills/canvas-bulk-grading in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add vishalsachdev/canvas-mcp --skill canvas-bulk-grading -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/canvas-bulk-grading, .gemini/skills/canvas-bulk-grading, .github/skills/canvas-bulk-grading and .opencode/skills/canvas-bulk-grading in your project.
SKILL.md names no scripts, command-line tools or credentials: Canvas Bulk Grading is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Canvas Bulk Grading is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2k tokens (SKILL.md is roughly 8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Canvas Bulk Grading: DeepTutor CLI (HKUDS/DeepTutor, 41k stars), AI Engineering Placement Quiz (rohitg00/ai-engineering-from-scratch, 66k stars), Codebase to Course (zarazhangrui/codebase-to-course, 5.7k stars) and AI Engineering Phase Quiz (rohitg00/ai-engineering-from-scratch, 66k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
vishalsachdev (a GitHub user) maintains it in vishalsachdev/canvas-mcp, which has 284 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 8, 2026.
Source: vishalsachdev/canvas-mcp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.