Skip to main content
Glama

canvas_get_submission

Retrieve submission details for a specific assignment in a Canvas course by providing course ID, assignment ID, and optional user ID.

Instructions

Get submission details for an assignment

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
assignment_idYesID of the assignment
course_idYesID of the course
user_idNoID of the user (optional, defaults to self)

Implementation Reference

  • Core implementation of canvas_get_submission tool: Makes authenticated GET request to Canvas API endpoint for retrieving a specific user's submission for an assignment, including comments, rubric assessment, and assignment details.
    async getSubmission(courseId: number, assignmentId: number, userId: number | 'self' = 'self'): Promise<CanvasSubmission> {
      const response = await this.client.get(
        `/courses/${courseId}/assignments/${assignmentId}/submissions/${userId}`,
        {
          params: {
            include: ['submission_comments', 'rubric_assessment', 'assignment']
          }
        }
      );
      return response.data;
    }
  • src/index.ts:224-235 (registration)
    MCP tool registration defining the name, description, and input schema (JSON Schema) for the canvas_get_submission tool.
      name: "canvas_get_submission",
      description: "Get submission details for an assignment",
      inputSchema: {
        type: "object",
        properties: {
          course_id: { type: "number", description: "ID of the course" },
          assignment_id: { type: "number", description: "ID of the assignment" },
          user_id: { type: "number", description: "ID of the user (optional, defaults to self)" }
        },
        required: ["course_id", "assignment_id"]
      }
    },
  • Tool dispatch handler in MCP server: Validates input arguments, calls CanvasClient.getSubmission, and formats response as MCP content block.
    case "canvas_get_submission": {
      const { course_id, assignment_id, user_id } = args as { 
        course_id: number; 
        assignment_id: number;
        user_id?: number;
      };
      if (!course_id || !assignment_id) {
        throw new Error("Missing required fields: course_id and assignment_id");
      }
      
      const submission = await this.client.getSubmission(course_id, assignment_id, user_id || 'self');
      return {
        content: [{ type: "text", text: JSON.stringify(submission, null, 2) }]
      };
    }
  • TypeScript interface defining the structure of Canvas submission data returned by the tool.
    export interface CanvasSubmission {
      readonly id: number;
      readonly assignment_id: AssignmentId;
      readonly user_id: UserId;
      readonly submitted_at: string | null;
      readonly score: number | null;
      readonly grade: string | null;
      readonly attempt: number;
      readonly workflow_state: CanvasSubmissionState;
      readonly body?: string;
      readonly url?: string;
      readonly attachments?: CanvasFile[];
      readonly submission_comments?: CanvasSubmissionComment[];
      readonly rubric_assessment?: CanvasRubricAssessment;
      readonly late: boolean;
      readonly missing: boolean;
    }
Install Server

Other Tools

Related 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/DMontgomery40/mcp-canvas-lms'

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