Skip to main content
Glama

canvas_file_content

Read-onlyIdempotent

Read text from Canvas course files such as PDF, DOCX, PPTX, XLSX, plain text, code, and ZIP archives, with pagination and optional ZIP entry selection.

Instructions

Read text from a Canvas file: PDF text, DOCX, PPTX, XLSX, plain text or code, and ZIP archives (unpacked on the server: listing plus the text of every code/text/document file inside; pass entry to read one file from the listing). Max download 15 MiB; paginated text via offset. For scanned or handwritten PDFs use canvas_file_original. No external URL input.

Input Schema

NameRequiredDescriptionDefault
pageNoPage to fetch: a number, or the next_page value returned by the previous call.
entryNoZIP only: path of one file inside the archive, exactly as shown in the listing.
offsetNoCharacter to start reading from; pass next_offset from the previous call to continue.
file_idYesCanvas file id, from canvas_files, canvas_find_files or a module item.
max_charsNoMost characters of text to return in this call (default 20000).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish this is a safe, idempotent, non-destructive read, so the description's job is to add operational facts — and it does: a 15 MiB download ceiling, server-side ZIP unpacking producing a listing plus per-file text, `entry` to drill into one archive member, and offset-based pagination. It doesn't describe error behavior for oversized/unparseable files, but the additions are substantive.

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

Conciseness5/5

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

Front-loads the core action and format list, then layers in limits, pagination and the sibling alternative in compact clauses. There is no filler sentence; the parenthetical about ZIP unpacking earns its space by explaining an otherwise surprising behavior.

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?

For a multi-format, paginated read tool with no output schema, it covers supported types, size cap, ZIP structure, paging, and the scanned-PDF escape hatch. Only minor operational detail (behavior on unsupported/corrupt files, response shape of the listing) is absent.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents page, entry, offset, file_id and max_chars. The description reinforces the ZIP `entry` semantics and offset pagination, but adds little syntax or format detail beyond the schema text; baseline 3 applies when the schema does the heavy lifting.

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 ('Read text from a Canvas file') and enumerates the supported formats (PDF, DOCX, PPTX, XLSX, text/code, ZIP) with the ZIP unpacking behavior. It also explicitly distinguishes itself from the sibling canvas_file_original for scanned/handwritten PDFs, so an agent can separate the two without inspecting schemas.

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

Usage Guidelines4/5

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

Gives a concrete routing rule: use canvas_file_original for scanned or handwritten PDFs, and states the negative constraint 'No external URL input'. It also points at sibling sources for file_id (canvas_files, canvas_find_files, module item). It stops short of contrasting with canvas_file, canvas_file_download_link, or canvas_module_file_content, which is the remaining gap.

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