tool_set_extension
Set or update assignment due date extensions for students in Gradescope courses to accommodate individual needs.
Instructions
Add or update an extension for a student on an assignment.
If the student already has an extension, it will be overwritten.
At least one date must be provided. Dates must be in order:
release_date <= due_date <= late_due_date.
Requires instructor or TA access.
Args:
course_id: The Gradescope course ID.
assignment_id: The assignment ID.
user_id: The student's Gradescope user ID (found via get_course_roster).
release_date: Extension release date (ISO format: YYYY-MM-DDTHH:MM).
due_date: Extension due date (ISO format: YYYY-MM-DDTHH:MM).
late_due_date: Extension late due date (ISO format: YYYY-MM-DDTHH:MM).
confirm_write: Must be True to apply the extension update.Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| course_id | Yes | ||
| assignment_id | Yes | ||
| user_id | Yes | ||
| release_date | No | ||
| due_date | No | ||
| late_due_date | No | ||
| confirm_write | No |
Implementation Reference
- src/gradescope_mcp/server.py:153-180 (handler)The MCP tool handler that receives the request and calls the underlying extension utility.
def tool_set_extension( course_id: str, assignment_id: str, user_id: str, release_date: str | None = None, due_date: str | None = None, late_due_date: str | None = None, confirm_write: bool = False, ) -> str: """Add or update an extension for a student on an assignment. If the student already has an extension, it will be overwritten. At least one date must be provided. Dates must be in order: release_date <= due_date <= late_due_date. Requires instructor or TA access. Args: course_id: The Gradescope course ID. assignment_id: The assignment ID. user_id: The student's Gradescope user ID (found via get_course_roster). release_date: Extension release date (ISO format: YYYY-MM-DDTHH:MM). due_date: Extension due date (ISO format: YYYY-MM-DDTHH:MM). late_due_date: Extension late due date (ISO format: YYYY-MM-DDTHH:MM). confirm_write: Must be True to apply the extension update. """ return set_extension( course_id, - The core logic implementation for setting an extension.
def set_extension( course_id: str, assignment_id: str, user_id: str, release_date: str | None = None, due_date: str | None = None, late_due_date: str | None = None, confirm_write: bool = False, ) -> str: """Add or update an extension for a student on an assignment. Args: course_id: The Gradescope course ID. assignment_id: The assignment ID. user_id: The student's Gradescope user ID. Use get_course_roster to find user IDs. release_date: Extension release date in ISO format (YYYY-MM-DDTHH:MM), or None. due_date: Extension due date in ISO format (YYYY-MM-DDTHH:MM), or None. late_due_date: Extension late due date in ISO format (YYYY-MM-DDTHH:MM), or None. confirm_write: Must be True to perform the update. """ if not all([course_id, assignment_id, user_id]): return "Error: course_id, assignment_id, and user_id are all required." if not any([release_date, due_date, late_due_date]): return "Error: at least one date must be provided." def parse_date(date_str: str | None) -> datetime.datetime | None: if date_str is None: return None try: return datetime.datetime.fromisoformat(date_str) except ValueError: raise ValueError(f"Invalid date format: '{date_str}'. Use ISO format: YYYY-MM-DDTHH:MM") try: rd = parse_date(release_date) dd = parse_date(due_date) ldd = parse_date(late_due_date) except ValueError as e: return f"Error: {e}" if not confirm_write: details = [ f"course_id=`{course_id}`", f"assignment_id=`{assignment_id}`", f"user_id=`{user_id}`", ] - src/gradescope_mcp/server.py:152-152 (registration)Registration of the tool_set_extension function as an MCP tool.
@mcp.tool()