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)

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