Gradescope MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Gradescope MCP what assignments do I have due in the next 7 days?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Gradescope MCP
A lightweight, read-only MCP server for Gradescope. It provides student-focused access to courses, assignments, deadlines, submission history, and uploaded submission files through a small set of MCP tools.
The server is built on
gradescopeapi and does not expose
Gradescope write operations. Downloading a submitted file only creates a local
copy; it does not modify anything on Gradescope.
Features
gradescope_list_courses— courses visible to the accountgradescope_list_assignments— exact assignment dates, status, and grades for one coursegradescope_upcoming_assignments— upcoming work across student courses, sorted by due timegradescope_list_submissions— the authenticated student's submitted assignmentsgradescope_get_submission_files— filenames and metadata for the student's own uploaded filesgradescope_download_submission_file— download one of those files to the local machine
The server does not upload submissions or expose grading, roster management, extension management, or other Gradescope write operations.
Gradescope does not provide an official public student API.
gradescopeapiworks by parsing Gradescope pages, so site changes can occasionally require a library update.
Related MCP server: Canvas MCP for students
Requirements
Python 3.11+
A Gradescope email/password login
If you normally enter Gradescope only through university SSO, create a native Gradescope password using Gradescope's password-reset flow. Do not store your university SSO password here.
Setup
git clone https://github.com/YeetingWaterbottle/gradescope-mcp.git
cd gradescope-mcp
uv sync --no-devCreate a local credential file from the example:
cp .env.example .envOn PowerShell:
Copy-Item .env.example .envEdit .env:
GRADESCOPE_EMAIL="student@example.com"
GRADESCOPE_PASSWORD="your-native-gradescope-password".env is ignored by Git.
Run the server:
uv run gradescope-mcpWhen .env is in the current working directory it is loaded automatically.
You can instead keep credentials elsewhere:
uv run gradescope-mcp --env-file /absolute/path/to/gradescope.envPowerShell example:
uv run gradescope-mcp --env-file C:\Users\you\.config\gradescope.envEnvironment variables supplied by the parent process take precedence over values in the dotenv file.
Run directly from GitHub
Run the server directly from GitHub with uvx:
uvx --from git+https://github.com/YeetingWaterbottle/gradescope-mcp.git gradescope-mcp --env-file /absolute/path/to/gradescope.envMCP client configuration
The exact UI varies by client. A generic stdio configuration using the public GitHub repository is:
{
"command": "uvx",
"args": [
"--from",
"git+https://github.com/YeetingWaterbottle/gradescope-mcp.git",
"gradescope-mcp",
"--env-file",
"/absolute/path/to/gradescope.env"
]
}On Windows, use normal JSON escaping for the credential path, for example
"C:\\Users\\you\\.config\\gradescope.env".
examples/chat-on-steroids.json contains the same configuration as a reusable
template. Replace the credential-file path with an absolute path on your
machine.
Tools
gradescope_list_courses
Returns courses grouped by role (student / instructor) with Gradescope
course IDs and term information.
gradescope_list_assignments
Input:
{"course_id": "123456"}Returns assignment ID, name, release time, due time, late due time, status, grade, and maximum grade.
The status field is Gradescope's own displayed status. The MCP does not
reinterpret it. If Gradescope displays Submitted, the tool returns
Submitted.
gradescope_upcoming_assignments
Input:
{"days": 14}Aggregates assignments from all student courses and returns those due within the requested window, sorted by exact due timestamp. The accepted range is 1–365 days.
gradescope_list_submissions
Optionally accepts a course_id. If omitted, it lists the authenticated
student's submissions across all student courses. The result includes the
assignment and submission IDs needed to inspect attached files.
gradescope_get_submission_files
Given a course, assignment, and submission ID, returns safe file metadata such
as filename, type, page count, and a short file_ref.
Gradescope's temporary signed storage URLs are deliberately kept inside the MCP server rather than exposed in model context.
PDF/image-style homework submissions and Gradescope text/source-file submissions are supported when Gradescope exposes them to the authenticated student. Online-form assignments naturally return an empty file list.
gradescope_download_submission_file
Downloads one file identified by file_ref to a directory on the machine
running the MCP server. It never changes Gradescope. By default it refuses to
overwrite an existing local file.
Read-only design
The project exposes only student-focused read operations against Gradescope. Instructor-oriented and write operations such as roster management, grading, extensions, assignment configuration, and submission uploads are not included.
Development
uv sync --all-groups
uv run pytestCI runs on Linux, macOS, and Windows with Python 3.11–3.13.
Security
Never commit
.env.Prefer a Gradescope-specific/native password rather than reusing an important password.
Keep credential files readable only by your user where your OS supports that.
The MCP exposes only read operations against Gradescope, but the credentials still represent your account and should be protected accordingly.
License
MIT. See LICENSE.
Available Tools
6 toolsgradescope_download_submission_fileAIdempotent
Download one of the authenticated student's own submitted files locally.
This does not modify Gradescope. It creates a file on the machine running
the MCP server. file_ref comes from gradescope_get_submission_files.
Inputs: file_ref (required), course_id (required), assignment_id (required), submission_id (required), +2 more. Returns: object
gradescope_get_submission_filesARead-onlyIdempotent
Return safe metadata for files in one of the authenticated student's submissions.
Temporary signed Gradescope/S3 URLs are intentionally not returned. Use gradescope_download_submission_file to retrieve a file.
Inputs: course_id (required), assignment_id (required), submission_id (required). Returns: object
gradescope_list_assignmentsBRead-onlyIdempotent
List assignments for one Gradescope course.
status is the exact status parsed from Gradescope's student course table.
It is intentionally not reinterpreted into a separate submitted/not-submitted flag.
Inputs: course_id (required). Returns: result
gradescope_list_coursesARead-onlyIdempotent
List Gradescope courses grouped by student/instructor role.
Inputs: no named parameters. Returns: object
gradescope_list_submissionsARead-onlyIdempotent
List the authenticated student's own submitted assignments.
If course_id is omitted, submissions from all student courses are returned. This does not download submitted files.
Inputs: course_id. Returns: result
gradescope_upcoming_assignmentsBRead-onlyIdempotent
Return upcoming assignments across all student courses, sorted by due time.
Inputs: days. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool targets a distinct resource or action: listing courses, assignments, upcoming assignments, submissions, getting file metadata, and downloading a file. Descriptions clarify boundaries (e.g., list_assignments vs list_submissions), leaving no overlapping purposes.
All tools use a consistent gradescope_ prefix and snake_case. However, most list operations start with list_, while gradescope_upcoming_assignments breaks that pattern by not including the list_ verb, a minor deviation.
Six tools are well-scoped for a read-focused Gradescope student workflow, with each tool earning its place. No bloated or missing tools at the set level.
The set covers the core student journey: viewing courses, assignments, upcoming deadlines, submissions, and downloading submitted files. Minor gaps exist, such as no tool for detailed assignment or course metadata, but these are manageable workarounds.
Maintenance
Related MCP Connectors
Search university course materials, your flashcards, quizzes, streak and quota. All tools read-only.
Read-only flight-training records for CFIs, students and schools: syllabus, schedule, FAR/AIM.
Read-only access to your Citlyze workspace: AI search visibility, citations, and recommendations.
Read-only University of Macau course, instructor and review data.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables students to locally archive and read their own course assignments, deadlines, original and graded PDFs, rubric feedback, comments, and submission history through a read-only MCP connection. Supports course and assignment summaries, document reading with OCR, change tracking, and scheduled syncs.12MIT
- AlicenseAqualityBmaintenanceEnables AI apps to read a student's courses, due dates, grades, missing work, announcements, modules, discussions, syllabus, and calendar events in a read-only way. It cannot submit, edit, or delete anything, and credentials go only to the user's own school.21180 npmMIT
- AlicenseAqualityBmaintenanceEnables AI apps to read a student's Moodle courses, upcoming and overdue due dates, assignment submission statuses, course grades, gradebook items and announcements. It is strictly read only, so it can never submit, edit or delete anything.17186 npmMIT
- AlicenseAqualityBmaintenanceLets AI apps read a student's Google Classroom data, including active classes, to-do and missing assignments, upcoming due dates, grades on returned work, and announcements. It is read-only, so it can never turn in, edit, or delete anything.14238 npmMIT