Skip to main content
Glama

canvas_link_content

Read-onlyIdempotent

Reads the text of a file linked from Canvas syllabus, page, assignment, or discussion—including Google Docs, Drive, Dropbox, GitHub, PDF, Office, ZIP, or code files—using the link’s exact URL.

Instructions

Read the TEXT of a file that a course links to on another site, from a link written in the syllabus, the front page, a page, an assignment or an announcement/discussion: Google Docs, Slides and Sheets, Google Drive files, Dropbox files and folders, GitHub files and repositories, or a direct link to a PDF/Office/ZIP/code file. Give where the link is (source, and source_id: the page_url for a page, the assignment_id or the discussion/announcement topic_id) and the link exactly as it appears there; only a link that really is in that Canvas content is read. canvas_find_files lists such links with these arguments (read_with). Google and Dropbox files must be shared publicly ("Anyone with the link"). For module items use canvas_module_file_content. Same text options as canvas_file_content (offset, max_chars, entry for ZIPs).

Input Schema

NameRequiredDescriptionDefault
urlYesThe link exactly as it appears in that Canvas content.
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.
sourceYesWhere the link is written: syllabus, front_page, page, assignment or discussion.
course_idYesCanvas course id, from canvas_courses.
max_charsNoMost characters of text to return in this call (default 20000).
source_idNopage: its page_url; assignment: the assignment_id; discussion: the topic_id. Not used for syllabus and front_page.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, openWorld, non-destructive), and the description still adds real behavioral context: only links genuinely present in the referenced Canvas content are read, and Google/Dropbox targets must be publicly shared ('Anyone with the link'). It does not spell out how large-file truncation or error responses surface, but the sharing precondition is exactly the kind of extra context that matters.

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

Conciseness3/5

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

Purpose is front-loaded, but the body is a sprawling run-on that packs provider lists, routing, sharing rules and parameter parity into two very long sentences. The information is largely valuable, but restructuring into short clauses would make it far easier to scan without losing content.

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 seven-parameter, open-world read tool with no output schema, the description covers source routing, the sharing precondition, ZIP entry handling and pagination continuity via canvas_file_content parity. It stops short of describing the returned shape or how truncated reads signal continuation, but an agent has enough to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline would be 3, but the description adds cross-tool meaning: source/source_id pairing is tied to where the link lives (page_url, assignment_id, topic_id), and the text options (offset, max_chars, entry for ZIPs) are declared to behave identically to canvas_file_content, letting an agent transfer prior knowledge.

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 the TEXT of a file that a course links to on another site') and enumerates the supported providers (Google Docs/Slides/Sheets, Drive, Dropbox, GitHub, direct PDF/Office/ZIP/code links). It also explicitly distinguishes itself from canvas_module_file_content and canvas_find_files, so an agent can route correctly without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use (link written in syllabus, front page, page, assignment, discussion) and when-not-to (module items → canvas_module_file_content). It also names canvas_find_files with the read_with argument as the discovery path, so the agent knows the correct prerequisite step.

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