Agent skill

Canvas Bulk Grading

by vishalsachdev in vishalsachdev/canvas-mcp

Bulk grading workflows for Canvas LMS assignments using rubrics.

MITAuto-check passedEducation

Install Canvas Bulk Grading

skills CLI
$ npx skills add vishalsachdev/canvas-mcp --skill canvas-bulk-grading -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install vishalsachdev/canvas-mcp canvas-bulk-grading --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
canvas-bulk-grading
GitHub stars
284
Token cost
~2k tokens
SKILL.md length
762 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
MIT

At a glance

Bulk grading workflows for Canvas LMS assignments using rubrics.

  • Works in 3 steps: Gather Assignment and Rubric Information → List Submissions → Choose a Grading Strategy
  • Tasks that involve Quizzes and assessments
  • SKILL.md covers Prerequisites, Workflow, Token Efficiency and Safety Rules, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

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.

When your agent uses it

  • Tasks that involve Quizzes and assessments

Example prompts

  • “/canvas-bulk-grading”

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Gather Assignment and Rubric Information
  2. List Submissions
  3. Choose a Grading Strategy

What it can do on your machine

Read from SKILL.md and the folder at commit eeeb479. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    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.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~45
When it runs · the whole SKILL.md, loaded when a task matches
~2k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from vishalsachdev/canvas-mcp at commit eeeb479, republished under its MIT licence (© vishalsachdev). 762 words, ~2,003 tokens.

Download SKILL.mdSave it as .claude/skills/canvas-bulk-grading/SKILL.md (or your agent's skills folder).
name
canvas-bulk-grading
description
Bulk grading workflows for Canvas LMS assignments using rubrics. Covers single grading, batch grading, and code execution strategies with safety-first dry runs.

Canvas Bulk Grading

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.

Prerequisites

  • Canvas MCP server running and connected
  • Authenticated with an educator (instructor/TA) Canvas API token
  • Assignment must exist and have submissions to grade
  • Rubric must be created and associated with the assignment with 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.

Workflow

Step 1: Gather Assignment and Rubric Information

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.

Step 2: List Submissions

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.

Step 3: Choose a Grading Strategy

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 run
Strategy A: Single Grading (1-9 submissions)

Call 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
)
Strategy B: Bulk Grading (10-29 submissions)

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.

Strategy C: Code Execution (30+ submissions)

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.

Token Efficiency

The three strategies have very different token costs:

StrategyWhenToken CostWhy
grade_with_rubric1-9 submissionsLowFew round-trips, small payloads
bulk_grade_submissions10-29 submissionsMediumOne call with batch data
execute_typescript30+ submissionsWorkload-dependentGrading 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.

Show full SKILL.md (381 more words)Show less

Safety Rules

  1. Always dry run first. For bulk_grade_submissions, set dry_run: true before the real run. Review the output for correctness.
  2. Verify the rubric before grading. Confirm criterion IDs, point ranges, and rating IDs match the assignment rubric. Mismatched IDs cause silent failures or incorrect grades.
  3. Spot-check before bulk. For Strategy B and C, grade 1-2 submissions manually with grade_with_rubric first. Verify in Canvas that the grade and rubric feedback appear correctly.
  4. Respect rate limits. Use max_concurrent: 5 and rate_limit_delay: 1.0 (1 second between batches). Canvas rate limits are approximately 700 requests per 10 minutes.
  5. Do not grade without explicit instructor confirmation. Always present the grading plan (rubric mapping, point values, number of students affected) and wait for approval before submitting grades.
  6. Never attach a comment the instructor did not ask for. A submission comment is visible to the student in SpeedGrader, it appends on every call rather than replacing, and it cannot be un-sent. "Assign grade 8" means the grade only. Never generate a comment that restates the grade or narrates that grading happened (e.g. "Graded via automated review") — that reads to the student as a bot mark on their work and carries no feedback. Include a comment only when the instructor asked for written feedback, and then make it feedback about the work.

Example Prompts

  • "Grade Assignment 5 using the rubric"
  • "Show me the rubric for the midterm project and grade all submissions"
  • "Bulk grade all ungraded submissions for Assignment 3 -- give full marks on criterion 1 and 80% on criterion 2"
  • "How many submissions still need grading for the final paper?"
  • "Dry run bulk grading for Assignment 7 so I can review before submitting"
  • "Use code execution to grade all 150 homework submissions with custom logic"

Error Recovery

ErrorCauseAction
401 UnauthorizedToken expired or invalidRegenerate Canvas API token
403 ForbiddenNot an instructor/TA for this courseVerify Canvas role
404 Not FoundWrong course, assignment, or rubric IDRe-check IDs with list_assignments or list_rubrics
422 UnprocessableInvalid rubric assessment formatVerify criterion IDs and point ranges match the rubric
Partial failures in bulkSome grades submitted, others failedCheck 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

Files

Just SKILL.md in skills/canvas-bulk-grading of vishalsachdev/canvas-mcp.

Open the folder on GitHubat commit eeeb479

Compare with similar skills

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.

Canvas Bulk Grading compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Canvas Bulk Grading this skillvishalsachdev/canvas-mcp284—~2kAutomated safety check: PassMIT
DeepTutor CLIHKUDS/DeepTutor41k—~2.8kAutomated safety check: PassApache-2.0
AI Engineering Placement Quizrohitg00/ai-engineering-from-scratch66k—~2kAutomated safety check: PassMIT
Codebase to Coursezarazhangrui/codebase-to-course5.7k—~4.4kAutomated safety check: PassNone
AI Engineering Phase Quizrohitg00/ai-engineering-from-scratch66k—~2.1kAutomated safety check: PassMIT
Scholar EvaluationK-Dense-AI/claude-scientific-writer2.4k2 repos~2.9kAutomated safety check: NotesMIT

Similar skills

  • 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.

    41k GitHub stars~2.8k tokensUpdated today
    EducationAuto-check passed
  • AI Engineering Placement Quiz

    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.

    66k GitHub stars~2k tokensUpdated yesterday
    EducationAuto-check passed
  • Codebase to Course

    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.

    5.7k GitHub stars~4.4k tokensUpdated 6 mo ago
    EducationAuto-check passed
  • AI Engineering Phase Quiz

    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.

    66k GitHub stars~2.1k tokensUpdated yesterday
    EducationAuto-check passed
  • Scholar Evaluation

    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.

    2.4k GitHub starsUsed in 2 repos~2.9k tokens
    EducationAuto-check: notes
  • Evaluation

    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…

    975 GitHub starsUsed in 2 repos~4.2k tokens
    EducationAuto-check passed

More from vishalsachdev/canvas-mcp

All 8 skills in this repo
  • Canvas Accessibility Auditor

    vishalsachdev/canvas-mcp

    Accessibility audit and remediation for Canvas LMS courses. An agent skill from vishalsachdev/canvas-mcp.

    284 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Canvas Course Builder

    vishalsachdev/canvas-mcp

    Scaffold complete Canvas LMS course structures from specs, templates, or existing courses.

    284 GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Canvas Course Qc

    vishalsachdev/canvas-mcp

    Learning designer quality check for Canvas LMS courses. An agent skill from vishalsachdev/canvas-mcp.

    284 GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Canvas Discussion Facilitator

    vishalsachdev/canvas-mcp

    Discussion forum facilitator for Canvas LMS. An agent skill from vishalsachdev/canvas-mcp.

    284 GitHub stars~2.6k tokensUpdated today
    Auto-check passed
  • Canvas Morning Check

    vishalsachdev/canvas-mcp

    Educator morning course health check for Canvas LMS. An agent skill from vishalsachdev/canvas-mcp.

    284 GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Canvas Peer Review Manager

    vishalsachdev/canvas-mcp

    Educator peer review management for Canvas LMS. An agent skill from vishalsachdev/canvas-mcp.

    284 GitHub stars~2.8k tokensUpdated today
    Auto-check passed

Categories

Questions about Canvas Bulk Grading

What does Canvas Bulk Grading do?

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.

When should I use Canvas Bulk Grading?

Canvas Bulk Grading fits situations like: tasks that involve Quizzes and assessments.

How do I install Canvas Bulk Grading in Claude Code?

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.

How do I install Canvas Bulk Grading in Codex?

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.

Can I use Canvas Bulk Grading in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Canvas Bulk Grading need to run?

SKILL.md names no scripts, command-line tools or credentials: Canvas Bulk Grading is instructions for the agent only.

Does Canvas Bulk Grading access the network?

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.

Is Canvas Bulk Grading safe to install?

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.

What licence does Canvas Bulk Grading use?

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.

How many tokens does Canvas Bulk Grading use?

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.

What are the alternatives to Canvas Bulk Grading?

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.

Who maintains Canvas Bulk Grading?

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.