Skip to main content
Glama

Audit Course Links

audit_course_links
Read-only

Scan a course's content (pages, assignments, syllabus, announcements, and optionally quizzes) for broken or outdated links and images.

Instructions

Scan a course's content (pages, assignments, syllabus, announcements, and optionally quizzes) for broken or outdated links and images. Returns structured findings: cross-course references (links that still point at a previous copy of the course — the canonical stale-copy failure after a course import) and empty/malformed URLs. Pass "quizzes" in include to also scan Classic quiz descriptions/questions and New Quiz item stems — these break silently for students while still rendering in the instructor’s own preview. quizzes is opt-in (off by default). Structural checks only — no outbound HTTP requests. Requires instructor permissions in the course.

Input Schema

NameRequiredDescriptionDefault
includeNoContent sources to scan. Omit to scan the default four: pages, assignments, syllabus, announcements. `quizzes` is opt-in — pass it explicitly to also scan Classic quiz descriptions/questions and New Quiz item stems; it issues one extra Canvas API call per quiz/New Quiz in the course.
course_idYesCanvas course ID

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv1.18.15
    • addedInput schema / properties / course_id / anyOf
      Added value: +[
      +  {
      +    "exclusiveMinimum": 0,
      +    "maximum": 9007199254740991,
      +    "type": "integer"
      +  },
      +  {
      +    "pattern": "^[1-9][0-9]{0,18}$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / course_id / exclusiveMinimum
      Removed value: -0
    • removedInput schema / properties / course_id / maximum
      Removed value: -9007199254740991
    • removedInput schema / properties / course_id / type
      Removed value: -"integer"
  2. Changed1 schema field changedv1.18.11
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  3. Addedv1.18.3

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, but the description adds real behavioral context beyond them: no outbound HTTP requests (structural checks only), the instructor-permission requirement, and the cost model (one extra Canvas API call per quiz). The 'no outbound HTTP requests' statement sits alongside openWorldHint=true, which is a nuance rather than a contradiction since the tool still calls the Canvas API.

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 what it scans and what it returns, then layers the quizzes nuance and the structural-check constraint. Every sentence carries information an agent needs; nothing is filler.

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

Completeness5/5

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

No output schema exists, yet the description sketches the return shape (cross-course references plus empty/malformed URLs), states the permission prerequisite, and clarifies scope limits. For a 2-parameter read-only audit tool, that is sufficient for correct invocation.

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%, and both parameters are fully documented in the schema itself, including the default four sources and the quizzes opt-in. The description restates the same semantics (defaults, opt-in quizzes, extra API cost) without adding format or syntax detail, so the baseline of 3 applies.

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+resource (scan a course's content for broken/outdated links and images), enumerates the scanned sources, and names the concrete failure class it detects (cross-course references after a course import). An agent can distinguish it from siblings like audit_course_accessibility, check_course_setup, or search_course_content without opening the schema.

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 clear context for when this applies: post-import stale-copy auditing and quizzes that break silently for students. The opt-in nature of `quizzes` is called out explicitly. It stops short of naming an alternative tool or stating when not to use this, so it falls short of a 5.

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

Deploy Server

Other Tools