Skip to main content
Glama

get_my_submission_status

Check assignment submission status across Canvas courses to identify missing submissions. Filter by specific course to focus on relevant assignments.

Instructions

Get your submission status for assignments.

    Args:
        course_identifier: Optional course code or ID to filter by specific course.
                         If not provided, shows all courses.

    Returns your submission status across assignments, highlighting missing submissions.
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
course_identifierNo

Implementation Reference

  • The handler function that implements the core logic of the 'get_my_submission_status' tool. It fetches assignments from Canvas API for specified or all courses, checks submission status, categorizes them into submitted, overdue, and not submitted, and formats a user-friendly report.
    @mcp.tool()
    @validate_params
    async def get_my_submission_status(course_identifier: str | int | None = None) -> str:
        """Get your submission status for assignments.
    
        Args:
            course_identifier: Optional course code or ID to filter by specific course.
                             If not provided, shows all courses.
    
        Returns your submission status across assignments, highlighting missing submissions.
        """
        if course_identifier:
            # Get submissions for specific course
            course_id = await get_course_id(course_identifier)
    
            assignments = await fetch_all_paginated_results(
                f"/courses/{course_id}/assignments",
                params={"include[]": ["submission"], "per_page": 100}
            )
    
            if isinstance(assignments, dict) and "error" in assignments:
                return f"Error fetching assignments: {assignments['error']}"
    
            course_display = await get_course_code(course_id) or course_identifier
            output_lines = [f"Submission Status for {course_display}:\n"]
    
        else:
            # Get all courses and their assignments
            courses = await fetch_all_paginated_results(
                "/courses",
                params={"enrollment_state": "active", "per_page": 100}
            )
    
            if isinstance(courses, dict) and "error" in courses:
                return f"Error fetching courses: {courses['error']}"
    
            output_lines = ["Submission Status (All Courses):\n"]
            all_assignments = []
    
            for course in courses:
                course_id = course.get("id")
                course_name = course.get("course_code", course.get("name", "Unknown"))
    
                assignments = await fetch_all_paginated_results(
                    f"/courses/{course_id}/assignments",
                    params={"include[]": ["submission"], "per_page": 100}
                )
    
                if not isinstance(assignments, dict) or "error" not in assignments:
                    for assignment in assignments if isinstance(assignments, list) else []:
                        assignment["_course_name"] = course_name
                        all_assignments.append(assignment)
    
            assignments = all_assignments
    
        if not assignments:
            return "No assignments found."
    
        # Separate submitted and missing
        submitted = []
        missing = []
    
        for assignment in assignments:
            submission = assignment.get("submission")
            is_submitted = submission and submission.get("submitted_at") is not None
    
            if is_submitted:
                submitted.append(assignment)
            else:
                # Check if past due
                due_at = assignment.get("due_at")
                if due_at:
                    due_date = parse_date(due_at)
                    if due_date and due_date < datetime.now():
                        missing.append((assignment, "OVERDUE"))
                    else:
                        missing.append((assignment, "NOT SUBMITTED"))
                else:
                    missing.append((assignment, "NOT SUBMITTED"))
    
        # Format output
        if missing:
            output_lines.append(f"⚠️  Missing Submissions ({len(missing)}):\n")
            for assignment, status in missing:
                name = assignment.get("name", "Unnamed")
                due_at = format_date(assignment.get("due_at")) if assignment.get("due_at") else "No due date"
                course_name = assignment.get("_course_name", "")
    
                output_lines.append(
                    f"• {name}\n"
                    f"  {f'Course: {course_name}' if course_name else ''}\n"
                    f"  Due: {due_at}\n"
                    f"  Status: {status}\n"
                )
    
        if submitted:
            output_lines.append(f"\n✅ Submitted ({len(submitted)}):\n")
            for assignment in submitted[:10]:  # Show first 10
                name = assignment.get("name", "Unnamed")
                submission = assignment.get("submission", {})
                submitted_at = format_date(submission.get("submitted_at"))
                course_name = assignment.get("_course_name", "")
    
                output_lines.append(
                    f"• {name}\n"
                    f"  {f'Course: {course_name}' if course_name else ''}\n"
                    f"  Submitted: {submitted_at}\n"
                )
    
        return "\n".join(output_lines)
  • The call to register_student_tools(mcp) within register_all_tools, which triggers the registration of the student tools including 'get_my_submission_status' via its @mcp.tool() decorator.
    register_student_tools(mcp)
Install Server

Other Tools

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/vishalsachdev/canvas-mcp'

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