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
| Name | Required | Description | Default |
|---|---|---|---|
| assignment_id | Yes | ID of the assignment | |
| course_id | Yes | ID of the course | |
| user_id | No | ID of the user (optional, defaults to self) |
Input Schema (JSON Schema)
{
"properties": {
"assignment_id": {
"description": "ID of the assignment",
"type": "number"
},
"course_id": {
"description": "ID of the course",
"type": "number"
},
"user_id": {
"description": "ID of the user (optional, defaults to self)",
"type": "number"
}
},
"required": [
"course_id",
"assignment_id"
],
"type": "object"
}
Implementation Reference
- src/client.ts:340-350 (handler)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"] } },
- src/index.ts:1196-1210 (handler)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) }] }; }
- src/types.ts:144-160 (schema)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; }