Skip to main content
Glama

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
NameRequiredDescriptionDefault
course_idYes
assignment_idYes
user_idYes
release_dateNo
due_dateNo
late_due_dateNo
confirm_writeNo

Implementation Reference

  • 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}`",
            ]
  • Registration of the tool_set_extension function as an MCP tool.
    @mcp.tool()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Yuanpeng-Li/gradescope-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server