Skip to main content
Glama

tool_modify_assignment_dates

Change assignment dates in Gradescope by updating release, due, or late due dates for instructors and TAs.

Instructions

Modify the dates of an assignment (release, due, late due).

At least one date must be provided. Only the provided dates will be changed.
Requires instructor or TA access.

Args:
    course_id: The Gradescope course ID.
    assignment_id: The assignment ID.
    release_date: New release date (ISO format: YYYY-MM-DDTHH:MM), or None to keep unchanged.
    due_date: New due date (ISO format: YYYY-MM-DDTHH:MM), or None to keep unchanged.
    late_due_date: New late due date (ISO format: YYYY-MM-DDTHH:MM), or None to keep unchanged.
    confirm_write: Must be True to apply the date change.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
course_idYes
assignment_idYes
release_dateNo
due_dateNo
late_due_dateNo
confirm_writeNo

Implementation Reference

  • The implementation of the logic for modifying assignment dates, including argument parsing and calling the lower-level API.
    def modify_assignment_dates(
        course_id: str,
        assignment_id: str,
        release_date: str | None = None,
        due_date: str | None = None,
        late_due_date: str | None = None,
        confirm_write: bool = False,
    ) -> str:
        """Modify the dates of an assignment.
    
        Args:
            course_id: The Gradescope course ID.
            assignment_id: The assignment ID.
            release_date: New release date in ISO format (YYYY-MM-DDTHH:MM), or None to keep unchanged.
            due_date: New due date in ISO format (YYYY-MM-DDTHH:MM), or None to keep unchanged.
            late_due_date: New late due date in ISO format (YYYY-MM-DDTHH:MM), or None to keep unchanged.
            confirm_write: Must be True to perform the update.
        """
        if not course_id or not assignment_id:
            return "Error: both course_id and assignment_id are 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}`",
            ]
            if release_date:
                details.append(f"release_date={release_date}")
            if due_date:
                details.append(f"due_date={due_date}")
            if late_due_date:
                details.append(f"late_due_date={late_due_date}")
            return write_confirmation_required("modify_assignment_dates", details)
    
        try:
            conn = get_connection()
            success = update_assignment_date(
                session=conn.session,
                course_id=course_id,
                assignment_id=assignment_id,
                release_date=rd,
                due_date=dd,
                late_due_date=ldd,
            )
        except AuthError as e:
            return f"Authentication error: {e}"
        except Exception as e:
            return f"Error updating assignment dates: {e}"
    
        if success:
            updates = []
            if release_date:
                updates.append(f"Release date → {release_date}")
            if due_date:
                updates.append(f"Due date → {due_date}")
            if late_due_date:
                updates.append(f"Late due date → {late_due_date}")
            return f"✅ Assignment `{assignment_id}` dates updated successfully:\n" + "\n".join(f"- {u}" for u in updates)
        else:
            return f"❌ Failed to update dates for assignment `{assignment_id}`. Check your permissions."
  • The tool registration and the wrapper function exposed to the MCP server.
    def tool_modify_assignment_dates(
        course_id: str,
        assignment_id: str,
        release_date: str | None = None,
        due_date: str | None = None,
        late_due_date: str | None = None,
        confirm_write: bool = False,
    ) -> str:
        """Modify the dates of an assignment (release, due, late due).
    
        At least one date must be provided. Only the provided dates will be changed.
        Requires instructor or TA access.
    
        Args:
            course_id: The Gradescope course ID.
            assignment_id: The assignment ID.
            release_date: New release date (ISO format: YYYY-MM-DDTHH:MM), or None to keep unchanged.
            due_date: New due date (ISO format: YYYY-MM-DDTHH:MM), or None to keep unchanged.
            late_due_date: New late due date (ISO format: YYYY-MM-DDTHH:MM), or None to keep unchanged.
            confirm_write: Must be True to apply the date change.
        """
        return modify_assignment_dates(
            course_id,
            assignment_id,
            release_date,
            due_date,
            late_due_date,
            confirm_write,
        )

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