Canvas MCP Server

by DMontgomery40
Verified
  • build
/** * Branded types for better type safety with IDs */ export type CourseId = number & { readonly brand: unique symbol; }; export type AssignmentId = number & { readonly brand: unique symbol; }; export type UserId = number & { readonly brand: unique symbol; }; export type EnrollmentId = number & { readonly brand: unique symbol; }; /** * Error types */ export declare class CanvasAPIError extends Error { readonly statusCode?: number | undefined; readonly response?: unknown | undefined; constructor(message: string, statusCode?: number | undefined, response?: unknown | undefined); } export declare class CanvasValidationError extends Error { constructor(message: string); } /** * API Response types */ export interface PaginatedResponse<T> { readonly data: ReadonlyArray<T>; readonly hasMore: boolean; readonly nextPage?: string; } export interface CanvasUser { readonly id: UserId; readonly name: string; readonly sortable_name: string; readonly short_name: string; readonly sis_user_id: string | null; readonly email: string; readonly avatar_url: string; } export interface CanvasUserProfile { id: number; name: string; sortable_name: string; short_name: string; sis_user_id: string | null; login_id: string; avatar_url: string; primary_email: string; locale: string; bio: string | null; } export interface CanvasCourse { readonly id: CourseId; readonly name: string; readonly course_code: string; readonly workflow_state: CanvasCourseState; readonly account_id: number; readonly start_at: string | null; readonly end_at: string | null; readonly enrollments?: ReadonlyArray<CanvasEnrollment>; readonly total_students?: number; } export type CanvasCourseState = 'unpublished' | 'available' | 'completed' | 'deleted'; export interface CanvasAssignment { readonly id: AssignmentId; readonly course_id: CourseId; readonly name: string; readonly description: string; readonly due_at: string | null; readonly points_possible: number; readonly position: number; readonly submission_types: ReadonlyArray<CanvasSubmissionType>; } export type CanvasSubmissionType = 'none' | 'online_text_entry' | 'online_url' | 'online_upload' | 'media_recording' | 'student_annotation'; 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; } export type CanvasSubmissionState = 'submitted' | 'unsubmitted' | 'graded' | 'pending_review'; export interface CanvasEnrollment { readonly id: EnrollmentId; readonly user_id: UserId; readonly course_id: CourseId; readonly type: CanvasEnrollmentType; readonly role: string; readonly enrollment_state: CanvasEnrollmentState; readonly grades?: CanvasGrades; } export type CanvasEnrollmentType = 'StudentEnrollment' | 'TeacherEnrollment' | 'TaEnrollment' | 'DesignerEnrollment' | 'ObserverEnrollment'; export type CanvasEnrollmentState = 'active' | 'invited' | 'inactive' | 'completed' | 'rejected'; export interface CanvasGrades { readonly current_score: number | null; readonly final_score: number | null; readonly current_grade: string | null; readonly final_grade: string | null; } export interface CanvasDiscussionTopic { id: number; title: string; message: string; html_url: string; posted_at: string; assignment_id: number | null; discussion_type: string; } export interface CanvasModule { id: number; name: string; position: number; unlock_at: string | null; require_sequential_progress: boolean; state: string; } export interface CanvasModuleItem { id: number; title: string; type: string; html_url: string; content_id?: number; } export interface CanvasQuiz { id: number; title: string; html_url: string; quiz_type: string; time_limit: number | null; published: boolean; description: string | null; due_at: string | null; } export interface CanvasAnnouncement { id: number; title: string; message: string; posted_at: string; html_url: string; } export interface CanvasScope { resource: string; resource_name: string; controller: string; action: string; verb: string; scope: string; } export interface CanvasAssignmentSubmission { id: number; submission_type: string; body?: string; submitted_at: string | null; } /** * Tool input types with strict validation */ export interface CreateCourseArgs { name: string; course_code?: string; start_at?: string; end_at?: string; license?: string; is_public?: boolean; } export interface UpdateCourseArgs { course_id: number; name?: string; course_code?: string; start_at?: string; end_at?: string; license?: string; is_public?: boolean; } export interface CreateAssignmentArgs { course_id: number; name: string; description?: string; due_at?: string; points_possible?: number; submission_types?: string[]; allowed_extensions?: string[]; } export interface UpdateAssignmentArgs { course_id: number; assignment_id: number; name?: string; description?: string; due_at?: string; points_possible?: number; } export interface SubmitGradeArgs { course_id: number; assignment_id: number; user_id: number; grade: number | string; comment?: string; } export interface EnrollUserArgs { course_id: number; user_id: number; role?: string; enrollment_state?: string; }