canvas-agent
npm
v2.0.3
Published by hughsibbele — no publish provenance, so origin is unverified, but the source is public: the repository link below is self-declared yet readable, so you can inspect the code before adopting it.
MCP server for Instructure Canvas LMS — connect Claude AI to your courses
The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.
1. Threat score — 100 − 0 = 100. What the published surface and source actually contain:
The deterministic scan raised no scored threat in the surface it inspected — the threat score stayed at 100. Capability observations and advisory notes are recorded but never lower it.
2. Client adoption risk — 100 − 7 = 93. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:
| Points | Adoption-risk factor |
|---|---|
| −6 | capability blast radius (high) — client exposure if the model is manipulated |
| −1 | publisher verification (public source) — no provenance, but the source is public and inspectable |
Capability observations and info notes are shown under Findings but never scored.
Open any row's finding below for the file, line and evidence behind a deduction.
This server (without client built-ins) exposes a complete data-exfiltration chain: download_discussion_entries → list_course_files → send_message. Untrusted input is ingested, private data is read, and it can be sent to an external sink via the agent composing the tools (→). Static analysis proves the primitive exists, not that a specific run will occur.
Fix: Remove one leg of the trifecta: isolate untrusted-input tools from secret-reading tools and from egress tools, or require human approval between them.
Location: flow download_discussion_entries → list_course_files → send_message
Tool "delete_file" can write, overwrite or delete files (keyword "delete_file" in tool name). Verify it is scoped to a safe directory.
Fix: Constrain file operations to an explicit, non-sensitive root; reject path traversal.
Location: tool delete_file
Tool "delete_file" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool delete_file
In a packaging/dev/install script (shipped, but not the server runtime) (`dist/setup.js:8`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: c, execFileSync } from "child_process"; import { stdin, stdout, platform } from "process"; import { readFileSync, writeF
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server dist/setup.js
Each tool and what it can reach — statically extracted from the published source.
delete_filewrites filesdownload_discussion_entriesingests untrusted inputdownload_submissionsingests untrusted inputgenerate_quiz_reportingests untrusted inputget_fileingests untrusted inputget_pageingests untrusted inputlist_course_filesreads sensitive datalist_pagesingests untrusted inputsend_messagenetwork egressadd_module_itemno sensitive capabilityadd_user_to_groupno sensitive capabilityassociate_rubricno sensitive capabilityauto_distribute_unassignedno sensitive capabilitybatch_update_assignmentsno sensitive capabilitybatch_update_datesno sensitive capabilitybatch_update_discussionsno sensitive capabilitybulk_gradeno sensitive capabilityconclude_courseno sensitive capabilitycopy_course_contentno sensitive capabilitycopy_rubricno sensitive capabilitycreate_announcementno sensitive capabilitycreate_assignmentno sensitive capabilitycreate_assignment_overrideno sensitive capabilitycreate_calendar_eventno sensitive capabilitycreate_courseno sensitive capabilitycreate_discussionno sensitive capabilitycreate_folderno sensitive capabilitycreate_groupno sensitive capabilitycreate_group_setno sensitive capabilitycreate_moduleno sensitive capabilitycreate_new_quizno sensitive capabilitycreate_pageno sensitive capabilitycreate_quiz_itemno sensitive capabilitycreate_rubricno sensitive capabilitycreate_sectionno sensitive capabilitycrosslist_sectionno sensitive capabilitydecrosslist_sectionno sensitive capabilitydelete_assignmentno sensitive capabilitydelete_calendar_eventno sensitive capabilitydelete_courseno sensitive capabilitydelete_enrollmentno sensitive capabilitydelete_moduleno sensitive capabilitydelete_module_itemno sensitive capabilitydelete_pageno sensitive capabilitydelete_quiz_itemno sensitive capabilitydelete_rubricno sensitive capabilitydelete_rubric_assessmentno sensitive capabilitydelete_sectionno sensitive capabilitydescribe_canvas_mcpsno sensitive capabilityenroll_userno sensitive capabilityget_assignmentno sensitive capabilityget_course_activityno sensitive capabilityget_course_assignment_analyticsno sensitive capabilityget_course_schedule_overviewno sensitive capabilityget_discussionno sensitive capabilityget_file_quotano sensitive capabilityget_front_pageno sensitive capabilityget_grading_standardsno sensitive capabilityget_late_policyno sensitive capabilityget_new_quizno sensitive capabilityget_outcomeno sensitive capabilityget_outcome_rollupsno sensitive capabilityget_quizno sensitive capabilityget_quiz_itemno sensitive capabilityget_rubricno sensitive capabilityget_rubric_assessmentsno sensitive capabilityget_student_activityno sensitive capabilityget_student_assignment_datano sensitive capabilityget_student_enrollmentsno sensitive capabilityget_student_messaging_datano sensitive capabilityget_student_summariesno sensitive capabilityget_user_profileno sensitive capabilitygrade_submissionno sensitive capabilitygrade_with_rubricno sensitive capabilityhide_gradesno sensitive capabilitylist_assignment_groupsno sensitive capabilitylist_assignment_overridesno sensitive capabilitylist_assignmentsno sensitive capabilitylist_calendar_eventsno sensitive capabilitylist_course_tabsno sensitive capabilitylist_coursesno sensitive capabilitylist_discussionsno sensitive capabilitylist_foldersno sensitive capabilitylist_gradeable_studentsno sensitive capabilitylist_grading_periodsno sensitive capabilitylist_group_categoriesno sensitive capabilitylist_groupsno sensitive capabilitylist_missing_submissionsno sensitive capabilitylist_module_itemsno sensitive capabilitylist_modulesno sensitive capabilitylist_new_quizzesno sensitive capabilitylist_outcome_groupsno sensitive capabilitylist_outcome_resultsno sensitive capabilitylist_outcomesno sensitive capabilitylist_page_revisionsno sensitive capabilitylist_quiz_itemsno sensitive capabilitylist_quizzesno sensitive capabilitylist_rubricsno sensitive capabilitylist_sectionsno sensitive capabilitylist_studentsno sensitive capabilitylist_submissionsno sensitive capabilitylist_term_coursesno sensitive capabilitylist_termsno sensitive capabilitylist_users_in_courseno sensitive capabilitymove_student_to_sectionno sensitive capabilitypost_gradesno sensitive capabilitypost_submission_commentno sensitive capabilitypublish_moduleno sensitive capabilityremove_rubric_from_assignmentno sensitive capabilityremove_user_from_groupno sensitive capabilityreset_course_contentno sensitive capabilityset_late_policyno sensitive capabilityset_quiz_accommodationsno sensitive capabilitysubmission_summaryno sensitive capabilityupdate_assignmentno sensitive capabilityupdate_assignment_datesno sensitive capabilityupdate_assignment_overrideno sensitive capabilityupdate_calendar_eventno sensitive capabilityupdate_course_navigationno sensitive capabilityupdate_course_settingsno sensitive capabilityupdate_discussionno sensitive capabilityupdate_enrollment_stateno sensitive capabilityupdate_fileno sensitive capabilityupdate_moduleno sensitive capabilityupdate_module_itemno sensitive capabilityupdate_new_quizno sensitive capabilityupdate_pageno sensitive capabilityupdate_quizno sensitive capabilityupdate_quiz_datesno sensitive capabilityupdate_quiz_itemno sensitive capabilityupdate_rubricno sensitive capabilityupdate_rubric_assessmentno sensitive capabilityupdate_rubric_associationno sensitive capabilityupdate_sectionno sensitive capabilityCross-tool combinations that form a data-exfiltration primitive (untrusted input → sensitive source → external sink).
Scan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.
| Version | Score | Findings | Engine | Scanned |
|---|---|---|---|---|
v2.0.3 latest |
A 93/100 | 4 | 1.13.0 | 2026-09-07 |
v2.0.2 |
A 93/100 | 4 | 1.12.1 | 2026-08-10 |
Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.
The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.
npx mcptrustchecker scan canvas-agent --online
MCP AgentChat - 让 AI Agent 通过 Telegram 与用户实时交互:发送消息、图片,等待用户回复
A Model Context Protocol (MCP) server for Airthings Air Quality Monitor devices.
MCP server for Anki
TypeScript package for reading and searching Apple Notes on macOS via direct SQLite access. Includes markdown conversion, attachment support, and offers a local MCP server!
Verified biotech catalyst calendar (PDUFA/AdComm/trial readouts) anchored to official sources.
Appointment booking platform letting agents check provider availability and create bookings.