Skip to main content
Glama

canvas_upload_file

Upload a local file into a Canvas course Files area, creating missing folders and resolving duplicate names. Use it to add course materials from the machine running the MCP server.

Instructions

Upload a local file into the course's Files area. MUTATES the course.

Three-step Canvas dance, handled here: register the upload, POST the bytes to the storage host, then confirm. The Canvas token is never sent to the storage host.

Args: local_path: absolute path to the file on the machine running this server. parent_folder_path: Canvas folder, e.g. "course files/week03". Created if it does not exist. name: name to store it under; defaults to the local filename. on_duplicate: "rename" (default, keeps both) or "overwrite". course_id: numeric course id; defaults to CANVAS_DEFAULT_COURSE_ID.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNo
course_idNo
local_pathYes
on_duplicateNorename
parent_folder_pathNocourse files

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it declares the mutation, discloses the three-step upload flow (register, POST bytes, confirm), and adds a real security detail that the Canvas token is never sent to the storage host. It stops short of stating auth requirements, reversibility of overwrite, or error/rate-limit behavior, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and the mutation warning before the process note and Args list. The 'Three-step Canvas dance' phrasing is slightly informal but informative, and the Args block earns its space given the 0% schema coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. The description covers mutation semantics, the internal upload flow, security, and all parameters; only auth prerequisites and overwrite consequences are left implicit, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate and it does — every parameter is documented with meaning beyond the bare schema: local_path is server-side absolute, parent_folder_path is a Canvas path auto-created if absent, name defaults to the local filename, on_duplicate distinguishes rename vs overwrite, and course_id falls back to CANVAS_DEFAULT_COURSE_ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Upload a local file into the course's Files area') and flags the operation type with 'MUTATES the course.' This clearly separates it from read-only siblings like canvas_list_files and canvas_download_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the usage context (pushing a local file into course Files) but never states when to choose this over alternatives such as canvas_download_file, nor any prerequisites or exclusions. Usage is inferable from purpose but not explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.