Skip to main content
Glama

canvas-student-mcp

API 토큰이 비활성화된 학교에서도 작동하는 Canvas LMS MCP 서버입니다.

CI License: MIT Node >= 18 TypeScript

Claude(또는 모든 MCP 클라이언트)에게 Canvas 계정에 대한 실시간 읽기 전용 액세스를 제공합니다: 강좌, 강의 계획서, 제출 상태가 포함된 과제, 성적, 공지사항, 모듈, 페이지, 파일, 토론, 퀴즈, 할 일, 캘린더. Notion 커넥터와 함께 사용하면 하나의 프롬프트로 전체 강좌를 보관할 수 있습니다.

또 다른 Canvas MCP인 이유는?

이미 몇 가지 훌륭한 Canvas MCP 서버가 존재합니다 — vishalsachdev/canvas-mcp, DMontgomery40/mcp-canvas-lms, mtgibbs/canvas-lms-mcp 등. 이 모든 서버는 개인 API 토큰이 필요합니다.

여기에 문제가 있습니다: 많은 대학에서 학생의 셀프 서비스 토큰 생성을 비활성화합니다. 계정 → 설정을 열어도 + 새 액세스 토큰 버튼이 전혀 없습니다. 그런 학교에서는 모든 토큰 기반 서버가 막다른 길입니다.

이 서버는 세션 쿠키 인증으로 이 문제를 해결합니다: 브라우저에서 Canvas에 로그인하고, 세션 쿠키를 한 번 복사하면 연결됩니다. Canvas 웹 UI는 동일한 /api/v1 REST API와 해당 쿠키로 통신하므로, Canvas 자체를 망가뜨리지 않고는 어떤 관리자 정책도 이를 차단할 수 없습니다.

내부적으로 필요한 것(토큰 기반 서버가 하지 않는 것):

  • XSSI 가드 제거 — 쿠키로 인증된 Canvas 응답 앞에는 while(1);이 붙어 있어, 단순한 JSON 파싱을 깨뜨립니다.

  • 로그인 리디렉션 감지 — 만료된 세션은 401을 반환하는 대신 로그인 페이지로 리디렉션합니다. 서버는 리디렉션과 JSON이 아닌 본문을 감지하고, 알 수 없는 오류를 발생시키는 대신 새로고침 방법을 정확히 알려줍니다.

  • 자격 증명이 필요한 파일 다운로드 — 토큰 세션은 파일 URL을 자체 인증하도록 만드는 verifier= 매개변수를 얻습니다. 쿠키 세션은 그렇지 않으므로 다운로드 시 세션 쿠키를 전달해야 합니다(그렇지 않으면 Canvas가 500을 응답합니다). 리디렉션은 수동으로 처리되어 자격 증명이 CDN으로 전달되지 않습니다.

  • 만료 인식 오류 — 모든 실패 모드는 오류 메시지 자체에 해결 방법을 설명합니다.

인증 외에도 차별화되는 설계 원칙:

  • 설계상 읽기 전용. 모든 도구는 GET입니다. 서버는 물리적으로 과제를 제출하거나, 토론을 게시하거나, 어떤 것도 수정할 수 없습니다 — 자율 에이전트에 맡겨도 안전합니다.

  • 컨텍스트 효율적인 응답. Canvas API 페이로드는 방대합니다. 모든 도구는 LLM이 실제로 필요로 하는 필드로만 자르고, HTML을 깨끗한 텍스트로 변환하며(링크 URL 보존), 명시적인 잘림 알림과 함께 페이지네이션을 제한합니다.

  • 작고 감사 가능. 엄격한 TypeScript, 세 가지 런타임 종속성(MCP SDK, zod, PDF 텍스트용 unpdf). 학교 계정을 신뢰하기 전에 전체를 읽을 수 있습니다.

학교에서 허용하는 경우 토큰 인증도 여전히 지원됩니다 — 쿠키는 유일한 경로가 아니라 대체 수단입니다.

Related MCP server: canvas-parent-mcp

도구 (29개)

도구

기능

canvas_get_profile

자격 증명 확인 / 내 정보

canvas_list_courses

현재 성적이 포함된 강좌 (활성 / 완료 / 전체)

canvas_get_course

강좌 세부 정보 + 전체 강의 계획서를 텍스트로

canvas_list_assignments

마감일별 과제 + 제출 상태; 버킷 필터 (예정, 기한 초과, …)

canvas_get_assignment

전체 설명, 루브릭, 제출물 + 점수

canvas_get_grades

모든 강좌 성적 개요, 또는 한 강좌의 과제별 분석

canvas_list_announcements

활성 강좌 또는 특정 강좌/날짜 범위의 공지사항

canvas_list_modules

항목이 포함된 강좌 콘텐츠 개요

canvas_list_pages / canvas_get_page

강좌 위키 페이지, 전체 텍스트

canvas_list_files / canvas_get_file_link

강좌 파일 + 임시 다운로드 URL

canvas_list_discussions / canvas_get_discussion

토론 주제 및 전체 스레드

canvas_list_quizzes

마감일, 시간 제한, 시도 횟수가 포함된 퀴즈

canvas_list_todo / canvas_list_upcoming

할 일 목록 및 예정된 마감일

canvas_list_calendar_events

날짜 범위 내 이벤트 또는 과제 마감일

canvas_list_inbox / canvas_get_conversation

Canvas 받은 편지함 스레드 읽기 — 읽음으로 표시하지 않음

canvas_get_feedback

제출물에 대한 채점자 의견 및 루브릭 평가

canvas_grade_breakdown

과제 그룹별 성적 + 가상 계산기: "A를 받으려면 기말고사에서 몇 점이 필요한가요?"

canvas_list_planner

새 활동 플래그 및 제출 상태가 포함된 플래너 피드

canvas_read_file

강좌 파일에서 텍스트 추출 — PDF, Word, PowerPoint, Excel, HTML, 일반 텍스트

canvas_read_syllabus

강의 계획서를 텍스트로, Canvas에 입력되었거나 첨부된 PDF/Word 파일인 경우 모두 처리

canvas_list_groups

그룹 멤버십

canvas_get_module_progress

모듈 완료 상태 및 각 항목에 필요한 사항

canvas_list_peer_reviews

나에게 할당된 동료 검토

canvas_export_course

전체 강좌의 원샷 마크다운 내보내기 — Notion 보관용으로 제작

canvas_auth_status

연결 진단: 어떤 자격 증명, 어디에 저장, 아직 유효한가?

이 중 세 가지는 언급할 가치가 있습니다.

**canvas_read_file**은 강좌 자료를 읽을 수 있는 텍스트로 변환하여, "이번 주 슬라이드로 나를 시험해 봐" 또는 "지각 제출 정책이 뭐야"와 같은 요청이 실제로 작동하도록 만듭니다. PDF는 unpdf를 통해 처리됩니다. Office 형식은 저장소 내에서 처리됩니다 — .docx, .pptx, .xlsx는 XML의 ZIP 컨테이너이므로, Node 내장 zlib 위의 작은 ZIP 리더가 종속성 없이 세 가지를 모두 처리합니다. canvas_read_syllabus는 이를 기반으로 합니다: 강의 계획서가 파일 링크일 때 첨부 파일을 대신 읽는데, 이는 일반적인 경우입니다(테스트된 3개 강좌 중 2개). **canvas_grade_breakdown**은 Canvas의 두 가지 성적 모델(그룹별 가중치 및 총점)을 모두 구현하고, Canvas 자체가 보고하는 점수와 산술을 교차 검증하며, 드롭 규칙이나 게시되지 않은 과제 그룹이 예측을 신뢰할 수 없게 만드는 경우를 알려줍니다 — 조용히 잘못된 숫자를 반환하는 대신. **canvas_get_conversation**은 auto_mark_as_read=false를 전달하므로, 받은 편지함을 읽는 에이전트가 조용히 메시지를 읽음으로 표시하지 않습니다. 이 동작은 가정에 의존하지 않고 실제 읽지 않은 스레드에 대해 검증되었습니다.

다음 계획 및 쓰기가 의도적으로 범위에서 제외된 이유는 ROADMAP.md를 참조하세요.

빠른 시작

설치 불필요 — npx가 요청 시 가져옵니다:

npx canvas-student-mcp

또는 소스에서:

git clone https://github.com/xmike04/canvas-student-mcp.git
cd canvas-student-mcp
npm install && npm run build

자격 증명 얻기

옵션 A — API 토큰 (학교에서 허용하는 경우): Canvas → 계정 → 설정 → 승인된 통합 → + 새 액세스 토큰.

옵션 B — 세션 쿠키 (잠긴 학교용):

  1. 브라우저에서 학교 Canvas에 로그인합니다.

  2. DevTools (Cmd/Ctrl+Shift+I) → 네트워크 탭 → 새로고침

  3. Canvas 도메인에 대한 아무 요청이나 클릭 → 요청 헤더 → 전체 cookie: 값을 복사합니다. (또는 canvas_session=... 쌍만 — 해당 쿠키 하나면 충분합니다)

두 자격 증명 모두 Canvas 계정에 대한 읽기 액세스 권한을 부여합니다. 비밀번호처럼 취급하세요.

자격 증명 저장 (macOS: 키체인 사용)

MCP 클라이언트 구성은 일반 텍스트 JSON입니다. macOS에서는 자격 증명을 완전히 밖에 보관할 수 있습니다:

security add-generic-password -s canvas-student-mcp -a cookie -w 'canvas_session=PASTE_VALUE_HERE' -U

API 토큰의 경우 -a cookie 대신 -a token을 사용하세요. 서버는 먼저 환경 변수를 확인한 다음 키체인을 확인하므로, 이는 옵트인이며 건너뛰어도 아무 문제가 없습니다. CANVAS_NO_KEYCHAIN=1은 조회를 비활성화합니다.

Claude에 등록

Claude Code — 키체인에 자격 증명이 있으면 구성에 비밀이 전혀 없습니다:

claude mcp add canvas --scope user \
  --env CANVAS_BASE_URL=https://yourschool.instructure.com \
  -- npx -y canvas-student-mcp

키체인 대신 자격 증명을 인라인으로 전달:

claude mcp add canvas --scope user \
  --env 'CANVAS_COOKIE=canvas_session=PASTE_VALUE_HERE' \
  --env CANVAS_BASE_URL=https://yourschool.instructure.com \
  -- npx -y canvas-student-mcp

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "canvas": {
      "command": "node",
      "args": ["/absolute/path/to/canvas-student-mcp/dist/index.js"],
      "env": {
        "CANVAS_COOKIE": "canvas_session=PASTE_VALUE_HERE",
        "CANVAS_BASE_URL": "https://yourschool.instructure.com"
      }
    }
  }
}

토큰 인증의 경우 CANVAS_COOKIE 대신 CANVAS_API_TOKEN을 사용하세요(둘 다 설정된 경우 토큰이 우선). 다음으로 확인: "내 Canvas 프로필을 확인해 줘."

쿠키가 만료되면(브라우저 세션이 종료되면), 모든 도구가 명확하게 알려줍니다 — 다시 복사하여 구성을 업데이트하세요. "로그인 유지"를 선택하면 세션은 일반적으로 몇 주 동안 지속됩니다.

에이전트 스킬

세 가지 패키징된 워크플로우가 skills/에 제공됩니다. 이 중 하나를 ~/.claude/skills/(또는 프로젝트의 .claude/skills/)에 복사하면, 요청이 적합할 때 Claude가 자동으로 사용합니다:

스킬

기능

canvas-morning-check

일일 브리핑: 마감 임박 과제, 새 공지사항, 읽지 않은 메시지, 새 성적

canvas-week-plan

실제 과제를 읽고 주간 일일 계획 수립

canvas-grade-check

성적 현황 및 가상 시나리오 답변, 주의사항 포함

cp -R skills/canvas-morning-check ~/.claude/skills/

연결 후 물어볼 것들

  • "앞으로 2주 동안 모든 수업에서 마감되는 것이 뭐야?"

  • "각 강좌의 현재 성적은 어떻게 되고, 어떤 과제를 놓치고 있어?"

  • "모든 강좌의 이번 주 공지사항을 요약해 줘."

  • "내 BIOL 1710 강좌를 내보내서 Notion 학교 폴더에 보관해 줘." (Notion 커넥터 사용)

  • "내 역사 강좌의 3주차 페이지를 읽고 나를 시험해 봐."

아키텍처 참고 사항

  • stdio 전송, 상태 비저장 — 클라이언트 세션당 하나의 프로세스, 포트 없음, 원격 측정 없음, 저장소 없음. 데이터 흐름은 Canvas → 이 프로세스 → MCP 클라이언트, 그 외에는 없습니다.

  • 자동 페이지네이션은 Canvas Link: rel="next" 헤더를 따르며, 명시적인 잘림 알림과 함께 최대 5페이지 × 100개 항목으로 제한되어 에이전트 컨텍스트가 제한된 상태를 유지합니다.

  • 강의 계획서, 설명, 공지사항 및 페이지에 대한 HTML → 텍스트 변환 — 구조적 태그는 줄 바꿈/글머리 기호가 되고, 링크는 텍스트 (url)이 됩니다.

  • 모든 도구에 Zod 입력 스키마; MCP 주석(readOnlyHint)이 전체에 선언됩니다.

개발

npm run build   # strict TypeScript compile
npm test        # smoke test: MCP handshake, all 30 tools register, error paths

스모크 테스트는 완전히 오프라인으로 실행됩니다. CI는 Canvas 계정이 필요하지 않으며, 실제 저장된 자격 증명이 테스트 실행에 유출되지 않도록 CANVAS_NO_KEYCHAIN=1을 설정합니다.

릴리스

퍼블리싱은 CI(.github/workflows/release.yml)에서 실행되므로 누구도 노트북에서 퍼블리싱하지 않습니다:

npm version minor && git push --follow-tags

태그를 푸시하면 빌드, 전체 테스트 스위트, 패키지 콘텐츠 검사, 태그가 package.json과 일치하는지 확인하는 가드가 트리거된 후 provenance와 함께 퍼블리싱됩니다. 이는 퍼블리시된 tarball을 이를 빌드한 커밋 및 워크플로우와 암호화 연결합니다. Actions 탭에서 워크플로우를 수동으로 실행하면 퍼블리싱 외에 모든 작업을 드라이 런으로 수행합니다.

보안 모델

  • 읽기 전용: 모든 Canvas 호출은 GET이며, 어떤 도구도 Canvas에 쓸 수 없습니다. 받은 편지함을 읽어도 메시지는 읽지 않은 상태로 남습니다.

  • 자격 증명은 MCP 클라이언트의 환경 설정 또는 macOS 키체인에만 저장되며, 이 리포지토리의 디스크에 저장되거나 학교의 Canvas 도메인 외부로 전송되지 않습니다. 파일 다운로드는 자격 증명이 CDN에 전달되지 않도록 수동으로 리디렉션을 따릅니다.

  • 언제든지 교체 가능: Canvas에서 로그아웃(또는 토큰 해지)하면 모든 곳에서 자격 증명이 무효화됩니다.

  • canvas_auth_status는 어떤 자격 증명이 사용 중인지, 어디에 저장되어 있는지, 여전히 작동하는지 알려줍니다.

라이선스

MIT

Available Tools

30 tools
canvas_auth_statusCheck credential statusA
Read-only

Diagnose the Canvas connection: which credential is in use, where it's stored, and whether it still works. Run this first when something fails, or before a scheduled job, to distinguish an expired session from a real error.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description aligns (it is a diagnostic check). The description adds context about the credential's storage and validity, but doesn't mention output format or any potential side effects (e.g., network calls). Still, with strong annotations, this is adequate. No contradiction.

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?

Two sentences, front-loaded with the core function ('Diagnose the Canvas connection') and followed by clear usage instructions. Zero waste, every word adds value.

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?

Despite no output schema and no parameters, the description sufficiently covers what the tool does and when to use it. It doesn't describe the return format (e.g., JSON), but for a diagnostic tool, the guidance on usage is more critical. With strong annotations, this is complete enough.

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?

There are no parameters, so schema coverage is 100%. The description adds value by explaining what the tool examines (credential, storage, validity) without needing to explain parameters. Baseline for 0 params is 4, and the description enriches understanding of what 'status' means.

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?

The description clearly states the tool's purpose: 'Diagnose the Canvas connection' and specifies exactly what it checks (which credential, where stored, whether it works). It distinguishes itself from sibling tools by focusing on connection/auth status, which no other sibling suggests.

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?

Explicitly instructs when to use: 'Run this first when something fails, or before a scheduled job, to distinguish an expired session from a real error.' This provides clear guidance on timing and purpose, and implicitly differentiates from operations on Canvas content (courses, modules, etc.).

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

canvas_export_courseExport course to markdownA
Read-only

One-shot export of a course as a single markdown document: details, syllabus, grade, all assignments with submission status, module outline, and recent announcements. Designed for archiving to Notion or notes apps.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context: that the export is a single markdown document containing specific elements. It does not contradict annotations and adds context about output format and scope beyond the structured fields.

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?

The description is two sentences long, front-loading the purpose and content list, followed by a use-case sentence. No unnecessary words or repetition.

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?

Given the simple single-parameter tool and no output schema, the description adequately explains what the return value contains (markdown document with listed sections) and its intended use (archiving). It does not cover error cases or size limits, but these are minor given the overall clarity.

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?

With 100% schema description coverage (the only parameter 'course_id' is described as 'Canvas course ID'), the description does not add further parameter semantics. Baseline of 3 is appropriate since schema already handles documentation.

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?

The description clearly states the verb 'export' and resource 'course', specifies the output format ('single markdown document'), and lists the included components (details, syllabus, grade, assignments, modules, announcements). This distinguishes it from sibling tools that focus on single components.

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?

The description provides clear context: it's a 'one-shot export' designed for archiving to Notion or notes apps. It implies use when a comprehensive snapshot is needed, but does not explicitly state when not to use it or name alternative tools for partial exports.

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

canvas_get_assignmentGet assignment detailsA
Read-only

Get one assignment's full details: description (as text), due/lock dates, rubric, and the user's submission with score and grade.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
assignment_idYesCanvas assignment ID

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false, so the description adds value by disclosing exactly what fields are returned (description as text, dates, rubric, user's submission with score/grade). This is critical since no output schema exists, and it explains the scope and granularity of the response.

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?

The description is a single, well-structured sentence that immediately states the purpose and lists key return components. Every word adds value, making it efficient and easy to parse.

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 read-only tool with two simple parameters, the description sufficiently explains what the response contains, compensating for the lack of an output schema. It could mention that it returns only the current user's submission or potential error conditions, but it is adequate for typical use.

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% with both parameters having descriptions in the input schema. The description does not add any additional parameter semantics beyond what the schema already provides, so the baseline score 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?

The description uses a specific verb ('Get') and resource ('one assignment's full details'), listing exact fields returned. It clearly distinguishes from sibling tools like canvas_list_assignments which lists assignments rather than getting details.

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?

The description implies usage for retrieving full details of a single assignment, but does not explicitly state when to use this versus alternatives like canvas_list_assignments or how it differs from other get tools. Context is clear but lacks explicit guidance or exclusions.

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

canvas_get_conversationRead a conversation threadA
Read-only

Read the full message thread of one conversation, including every reply. Does NOT mark the conversation as read.

ParametersJSON Schema
NameRequiredDescriptionDefault
conversation_idYesConversation ID from canvas_list_inbox

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, confirming safe read-only behavior. The description adds valuable context beyond annotations by stating that the tool does not mark the conversation as read, a key behavioral nuance. This is sufficient disclosure for this type of tool.

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?

The description is just two sentences. The first sentence delivers the core action (read full thread), and the second adds a critical behavioral caveat. Every word is purposeful, and the information is front-loaded—no fluff or redundancy.

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?

The tool is straightforward with one parameter and no output schema. The description adequately explains what it does and a key side effect. While it could elaborate on return format or ordering, annotations cover safety, and the complexity is low, making this description sufficiently complete.

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 description coverage is 100%: the single parameter conversation_id has a clear description ('Conversation ID from canvas_list_inbox'). The tool description does not add additional meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

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?

The description uses a specific verb-resource pair ('Read the full message thread') and clearly distinguishes the tool from siblings like canvas_list_inbox by specifying it targets a single conversation thread. The additional statement about not marking as read further clarifies its scope.

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 tool is used after obtaining a conversation_id from canvas_list_inbox but does not explicitly state when to use it or when to prefer an alternative. No guidance on exclusions or alternative tools is provided, leaving the agent to infer context from sibling names.

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

canvas_get_courseGet course details + syllabusA
Read-only

Get one course's details including the full syllabus text, term, and current score. course_id comes from canvas_list_courses.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety is clear. The description adds value by revealing that the tool returns 'full syllabus text', 'term', and 'current score', which are behavioral traits not inferable from annotations alone. No contradiction exists between description and annotations.

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?

The description is a single 19-word sentence that immediately states the tool's purpose and key contents. Every word earns its place, with no filler. The critical guidance about course_id source is front-loaded in the same sentence.

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

Completeness3/5

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

Given the tool has 1 parameter, no output schema, and is a simple read operation, the description adequately covers the basics. However, it could be more complete by mentioning whether the tool returns only the current score or historical grades, and whether the syllabus text is complete or truncated. For a tool with this complexity, a 3 is reasonable but leaves some ambiguity.

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 description coverage is 100%, and the parameter course_id has a clear schema description. The description adds minimal extra meaning beyond the schema by noting the source of course_id, which is helpful context but not essential for parameter semantics. Baseline 3 is appropriate as the schema already documents the parameter well.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'one course's details', and specifies the included fields: full syllabus text, term, and current score. It distinguishes this tool from siblings like canvas_list_courses by indicating it retrieves a single course's detail versus listing courses, though it doesn't explicitly differentiate from canvas_get_grades which also deals with scores.

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 tells the agent that course_id comes from canvas_list_courses, providing a clear prerequisite. However, it does not specify when to use this tool versus alternatives like canvas_read_syllabus (which is a sibling that might overlap in reading syllabus content) or when not to use it. The guidance is minimal but functional.

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

canvas_get_discussionRead a discussion threadA
Read-only

Read a discussion topic's full thread, including replies.

ParametersJSON Schema
NameRequiredDescriptionDefault
topic_idYesDiscussion topic ID from canvas_list_discussions
course_idYesCanvas course ID

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds minimal behavioral context beyond stating it is a read operation. It does not mention permissions, pagination, or what happens to the state, failing to add value beyond the annotations.

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?

The description is a single, front-loaded sentence with no wasted words. It is appropriately concise for the tool's simplicity.

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

Completeness3/5

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

The tool is simple (2 required params, no output schema, annotations present). The description mentions 'including replies' but lacks detail on the return structure (e.g., nested replies, author info). It is minimally adequate but leaves gaps for an agent deciding whether the output covers its needs.

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 description coverage is 100%, with both parameters having clear descriptions. The tool description does not add any additional meaning or context to the parameters beyond what the schema already provides. Baseline 3 is appropriate.

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?

The description clearly states the action ('Read') and the resource ('discussion topic's full thread, including replies'). It effectively distinguishes from sibling tools like 'canvas_list_discussions' (which lists topics) and other read operations.

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 using this tool after listing discussions, but it does not explicitly state when to use it versus alternatives (e.g., 'canvas_list_discussions' for summaries). No when-not-to-use guidance or prerequisites are provided.

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

canvas_get_feedbackGet grader feedbackA
Read-only

Get grader comments and rubric assessments on your submissions — what the instructor or TA actually wrote. Omit course_id to check every active course. Only returns submissions that have feedback or a grade.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idNoLimit to one course; default all active courses
include_emptyNoInclude submissions with no feedback and no grade; default false

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already indicate readOnlyHint is true, so the description does not need to restate safety. The description adds value by clarifying the tool excludes submissions without feedback or grade (unless include_empty is used), which is behavioral nuance beyond the annotations. No contradiction with annotations.

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?

Description is two sentences that front-load the primary purpose, each sentence earning its place. First sentence states the core function, second adds key usage detail. No fluff.

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?

The tool is relatively simple with only 2 optional parameters and no output schema. The description covers the main behavior (returns feedback-holding submissions) and the default for course_id. It would be more complete if it mentioned that the tool only applies to graded submissions, but for a read-only list tool with good annotations and clear schema, it suffices.

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 description coverage is 100%, so the description does not need to redefine parameters. However, the description does not add any extra context beyond what the schema already provides for course_id and include_empty, producing a baseline score of 3.

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?

The description clearly states the tool retrieves grader comments and rubric assessments, which distinguishes it from other tools in the sibling list like `canvas_get_grades` or `canvas_list_todo`. The verb 'get' and the resource 'feedback on submissions' are specific and unambiguous.

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?

The description explicitly explains when to omit the course_id parameter to check every active course, and notes that only submissions with feedback or a grade are returned. However, it does not exclude when not to use it (e.g., when only grade totals are needed) nor mention alternatives like `canvas_get_grades` which could be a sibling for grade-related needs.

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

canvas_get_gradesGet gradesA
Read-only

Without course_id: current score/grade for every active course. With course_id: every graded submission in that course (assignment name, score, points possible, late/missing flags) — useful for 'what's my grade breakdown'.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idNoCanvas course ID; omit for all-course overview

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint:true and destructiveHint:false, so the description doesn't need to reiterate safety. It adds useful behavioral context about the two modes and the return fields. However, it does not mention pagination behavior, rate limits, or what happens if a course has no graded submissions — these are minor gaps that prevent a higher score.

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?

The description is only two sentences, front-loading the most important behavioral distinction. Every sentence adds value. It could be slightly more concise by removing the trailing em-dash phrase but overall is efficient.

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?

Given the tool has only one optional parameter, full schema coverage, and readOnlyHint/true, the description covers the core behavior well. No output schema exists, but the description explains what fields are returned (assignment name, score, points possible, flags). A small improvement would be noting if results are paginated or sorted.

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 is 3. The description adds meaning by explaining the behavioral difference between providing course_id (detailed breakdown) vs. omitting it (overview). This semantic distinction goes beyond the schema's description and justifies a 4.

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?

The description clearly states a specific verb ('get') and two distinct resources depending on whether course_id is provided: current score/grade for active courses, or graded submissions with assignment name, score, points possible, and flags. It distinguishes itself from siblings like canvas_grade_breakdown by explaining the different granularity.

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?

The description explicitly tells when to use each variant (without course_id vs. with course_id) and provides a concrete use case ('what's my grade breakdown'). However, it does not explicitly state when not to use it or name alternative tools for similar needs, 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.

canvas_get_module_progressModule completion progressA
Read-only

Show module-by-module progress: which modules are locked, started, or completed, and for each item what Canvas requires to mark it done (view it, submit it, contribute, or score a minimum) and whether you've done it.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
incomplete_onlyNoOnly show items you still need to complete

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral traits beyond annotations by detailing the specific output structure (module states, item requirements, completion status). No contradictions exist.

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?

A single, well-structured sentence that front-loads the core purpose ('Show module-by-module progress') and efficiently packs all key details about states and requirements without any waste.

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?

The description adequately explains the return value structure (module states, per-item requirements and completion) despite no output schema. It covers the main aspects an agent needs to understand the tool's output, though it does not specify the exact hierarchical format.

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?

Input schema has 100% description coverage, with clear descriptions for course_id and incomplete_only. The tool description adds no extra meaning for the parameters beyond what the schema provides; it describes the output instead. Baseline 3 is appropriate.

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?

The description clearly states it shows module-by-module progress including states (locked/started/completed) and per-item requirements (view/submit/contribute/score) with completion status. This distinguishes it from the sibling canvas_list_modules which only lists modules without progress details.

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?

The description implies when to use this tool—when module-level progress and per-item requirements are needed. It doesn't explicitly exclude alternatives or state when not to use it, but the context is clear given sibling tools.

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

canvas_get_pageRead a course pageA
Read-only

Read one course page's full content as text. page_url is the 'url' slug from canvas_list_pages or canvas_list_modules.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_urlYesPage URL slug (e.g. 'week-1-overview') or page ID
course_idYesCanvas course ID

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide readOnlyHint: true and destructiveHint: false, so the description adds value by specifying the output format ('full content as text'). It does not repeat annotation info and adds unique context. There is no contradiction with annotations.

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?

The description is extremely concise: two sentences with no excess words. Every sentence adds value—the first explains the core action and output, the second clarifies the parameter source. No redundancy or 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?

Given the tool has a simple read operation, 100% schema coverage, no output schema, and strong annotations, the description is complete. It tells the agent what it does, what the output is, and where to get the parameter. No additional context is needed 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 description coverage is 100%, so the schema already documents both parameters well. The description adds minimal semantic value beyond the schema: it clarifies that page_url is a 'slug' from other tools, which is useful context. Baseline 3 is appropriate as the description adds marginal but helpful detail.

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

Purpose4/5

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

The description clearly states the tool reads a course page's full content as text, using a specific verb ('Read') and resource ('course page'). It distinguishes itself from siblings like canvas_list_pages (which likely lists pages without content) and canvas_list_modules (which lists modules). However, it could be more explicit about the distinction from sibling tools.

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?

The description tells users to use the 'url' slug from canvas_list_pages or canvas_list_modules as the page_url, providing clear context on how to obtain the parameter value. It does not explicitly state when not to use this tool or mention alternatives, but the sibling list and the instruction to read rather than list implicitly guide usage.

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

canvas_get_profileGet my Canvas profileA
Read-only

Fetch the authenticated user's Canvas profile (name, primary email, id). Use this to verify the API token works.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's main behavioral contribution is specifying the returned fields. It adds no details about authentication scope, rate limits, or error behaviors, but for a simple read-only profile fetch, this is acceptable. No contradictions with annotations.

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?

The description consists of two short sentences with no wasted words. The action and output are front-loaded, making it immediately scannable. Every sentence serves a purpose: stating what it does and providing a usage hint.

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?

Given the tool has no parameters, no output schema, and low complexity, the description fully covers the purpose, usage context, and output format. It is complete for an agent to understand and invoke the tool 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?

There are zero parameters, and the schema description coverage is 100%. Per the guidelines, zero parameters warrant a baseline of 4. The description implicitly confirms no parameters are needed, which adds no new meaning but aligns with expected behavior.

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?

The description uses the specific verb 'Fetch' with the resource 'Canvas profile' and lists the returned fields (name, primary email, id). It clearly distinguishes this tool from siblings like canvas_auth_status or canvas_list_courses by focusing specifically on the authenticated user's own profile.

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?

The description explicitly states one primary use case: 'Use this to verify the API token works.' This gives clear guidance on when to apply the tool. It does not mention when not to use it or suggest alternatives, but given the tool's simplicity, the provided guidance is sufficient.

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

canvas_grade_breakdownGrade breakdown & what-if calculatorA
Read-only

Break a course grade down by assignment group (with weights), showing what's graded, what's left, and your current standing. Pass target_grade (e.g. 90) to compute the average you need on all remaining work to finish at that grade.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
target_gradeNoDesired final percentage, e.g. 90 for an A

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds value beyond annotations by disclosing the behavioral trait that it shows 'what's graded, what's left, and your current standing' and that passing target_grade triggers a computation. No contradictions with annotations.

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?

Two sentences, no wasted words. The first sentence front-loads the core purpose, and the second sentence precisely explains the optional parameter. Every sentence earns its place.

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?

Given the tool's moderate complexity (2 params, no output schema, no nested objects), the description is nearly complete. It explains the breakdown, the what-if feature, and the parameter semantics. However, it doesn't describe the return format (e.g., whether it returns per-group details or just a summary), which could be useful for the agent. Still, without an output schema, the description covers the main expectations well.

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 description coverage is 100%, so the schema already documents both parameters. The description adds meaning by explaining that `target_grade` is optional and used for the what-if calculation ('compute the average you need on all remaining work'), which is not in the schema. The `course_id` parameter is standard and needs no elaboration.

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?

The description uses a specific verb ('break down') and clearly identifies the resource ('course grade by assignment group') and the tool's dual functionality: showing current standing and computing what-if scenarios. This distinguishes it from siblings like canvas_get_grades, which likely just returns a number, and canvas_list_assignments, which lists items without grade breakdown.

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?

The description explicitly states when to use the `target_grade` parameter ('Pass target_grade... to compute the average you need'), providing clear guidance for the what-if use case. However, it does not explicitly state when NOT to use this tool (e.g., if you only need a single numerical grade, use canvas_get_grades instead), leaving some ambiguity for the agent.

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

canvas_list_announcementsList announcementsA
Read-only

List announcements. Defaults to all active courses over the last 30 days; pass course_id and/or start_date (ISO) to narrow or widen.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoISO date (YYYY-MM-DD); default today
course_idNoLimit to one course
start_dateNoISO date (YYYY-MM-DD); default 30 days ago

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is clearly read-only and non-destructive. The description adds behavioral context that the default time window is 30 days and that it applies to active courses, which is useful beyond the annotations.

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?

The description is a single, concise sentence that front-loads the purpose and immediately adds crucial default and customization details. Every word is necessary and there is no fluff.

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?

Given that there is no output schema and no required parameters, the description adequately explains inputs and defaults. It could optionally mention that the result is a list of announcement objects, but for a low-complexity read-only tool, it is sufficiently complete to inform an agent.

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 description coverage is 100%, so the baseline is 3. The description adds value by explaining the default behavior for start_date (30 days ago) and end_date (today), and connecting course_id to limiting by course. This goes beyond the schema's brief parameter descriptions.

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?

The description clearly states 'List announcements' and specifies the scope: 'Defaults to all active courses over the last 30 days', with options to narrow or widen via course_id and start_date. This differentiates it from sibling tools like canvas_list_modules or canvas_list_discussions.

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?

The description provides context for when to use this tool: when listing announcements with default scope or custom filtering by course or date range. However, it does not explicitly mention when not to use it or how it compares to other list tools like canvas_list_inbox or canvas_get_feedback.

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

canvas_list_assignmentsList assignmentsA
Read-only

List a course's assignments ordered by due date, each with the user's submission status (submitted/score/late/missing). Optional bucket filters: upcoming, past, overdue, undated, ungraded, unsubmitted, future.

ParametersJSON Schema
NameRequiredDescriptionDefault
bucketNoFilter assignments by due-date/submission bucket
course_idYesCanvas course ID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the tool is safe and non-destructive. The description adds value by specifying ordering ('by due date') and the inclusion of submission status, which goes beyond what annotations provide.

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?

The description is two sentences, front-loads the core purpose, and adds bucket filters concisely. Every sentence earns its place with no redundancy.

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?

Given the tool's simplicity (2 parameters, no output schema, read-only), the description is complete enough. It covers what is listed, ordering, and filtering options. A minor gap is the lack of mention of pagination or return format, but for a list tool this is acceptable.

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 description coverage is 100%, so the schema already fully documents both parameters. The description adds no additional meaning beyond the schema, but it does list the enum values explicitly in the description text, reinforcing the options. Baseline 3 is appropriate.

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?

The description uses specific verbs ('list') and resources ('assignments' with 'submission status'), and distinguishes from siblings like 'canvas_get_assignment' (single) and 'canvas_list_todo' (different scope). It clearly states ordering by due date and includes submission details.

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?

The description lists optional bucket filters for common use cases, which helps an agent decide when to apply them. However, it does not explicitly state when to use this tool versus alternatives like 'canvas_list_todo' or 'canvas_get_assignment'.

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

canvas_list_calendar_eventsCalendar eventsA
Read-only

Calendar events (lectures, office hours, deadlines) between two dates. type='assignment' shows assignment due dates instead of plain events.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoDefault 'event'
end_dateYesISO date YYYY-MM-DD
course_idNoLimit to one course; default all active courses
start_dateYesISO date YYYY-MM-DD

TDQS

A4/5.0
Behavior4/5

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

Annotations clearly mark readOnlyHint and destructiveHint false, so the description doesn't need to reiterate safety. The description adds value by revealing that the tool can produce two different data shapes (events vs. assignments) and that it aggregates all courses. This contextualizes the 'openWorldHint' annotation by showing the scope filtering per course.

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?

The description is two sentences long, front-loads the core purpose (list events between dates), and adds one valuable nuance about the type parameter. Every word contributes meaning; there is no repetition of schema or annotation data.

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?

The tool has 4 parameters (all described in schema), no output schema, and moderate complexity (two event types, optional course filter). The description explains the key variant (assignment type) and default behavior (all courses). However, it does not mention the response format or pagination, which might be needed for completeness given no output schema, but this is a minor gap for a read-only list operation.

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 all parameters with types and descriptions. The description adds only minor semantics: clarifying that 'type=assignment' yields assignment due dates (while the schema enum just lists 'assignment') and that course_id limits to one course (vs. default all). This enriches the schema but is not extensive.

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?

The description clearly states the tool lists calendar events between dates, specifying types like lectures, office hours, deadlines. It distinguishes itself from siblings by noting that 'type=assignment' shows assignment due dates, which is unique among the sibling tools (e.g., canvas_list_assignments likely lists assignments differently, not as calendar events).

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 implicitly suggests using 'type=assignment' for due dates but does not explicitly state when to use this tool over alternatives like canvas_list_assignments or canvas_list_todo. It lacks guidance on prerequisites (e.g., course enrollment, tool auth) and does not mention when not to use it.

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

canvas_list_coursesList my coursesA
Read-only

List the user's Canvas courses with current score/grade per course. state='active' (default) for this semester, 'completed' for past courses, 'all' for everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoEnrollment state filter; default 'active'

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare `readOnlyHint=true` and `destructiveHint=false`, making the non-mutating behavior clear. The description adds crucial behavioral context by specifying the default `state` behavior ('active' by default) and the scope of included data (current score/grade). A small gap remains: it doesn't explicitly state that results are scoped to the authenticated user (implied by 'my courses' in the title), but the combination of title, description, and annotations is strong.

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?

The description is two sentences long with zero wasted words. The first sentence establishes purpose and key feature (score/grade), the second sentence clearly explains the parameter's behavioral effect. Every sentence earns its place.

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?

Given the tool's low complexity (1 optional param, no output schema) and the richness of annotations and schema coverage, the description is largely complete. It explains the filter behavior and default clearly. The only minor gap is lacking explicit mention of the return format (e.g., pagination or structure), but this is acceptable for a simple list tool with no output schema and a strong title.

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 schema already documents the parameter and its enum values. The description adds significant meaning by explaining the real-world mapping of each enum value ('this semester', 'past courses', 'everything'), which is not present in the schema's generic 'Enrollment state filter' description. This goes beyond the schema baseline of 3.

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?

The description provides a specific verb ('List'), a clear resource ('the user's Canvas courses'), and the unique value ('with current score/grade per course'). It distinguishes this tool from the sibling `canvas_list_modules`, `canvas_get_course`, and `canvas_get_grades` by bundling score display with the list, making its purpose immediately obvious and distinct.

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?

The description explicitly tells the agent when to use which filter: `state='active'` for the current semester, `state='completed'` for past courses, and `state='all'` for everything. This provides clear context and exclusions (e.g., not for a specific course detail, which belongs to `canvas_get_course`), and implicitly guides against misuse.

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

canvas_list_discussionsList discussionsA
Read-only

List a course's discussion topics with unread counts and due dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by disclosing that the response includes 'unread counts and due dates'. However, it omits other behavioral traits such as pagination, ordering, or filtering capabilities. The added context is moderate.

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?

The description is a single, front-loaded sentence that efficiently conveys the tool's purpose and key output details. No superfluous words or repetition. Every word earns its place.

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 simple list tool with one parameter, annotations, and no output schema, the description adequately covers the purpose and key output fields. It hints at the response structure (topics with unread counts and due dates). However, it could mention pagination or sorting if applicable, but given the tool's simplicity, it is mostly complete.

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% with the sole parameter 'course_id' described as 'Canvas course ID'. The description does not add any new meaning beyond the schema, such as format, constraints, or examples. With high coverage, baseline 3 is appropriate.

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?

The description clearly states the verb 'List' and the resource 'discussion topics' with specific additional information ('unread counts and due dates'). This distinguishes it from sibling tools like canvas_list_assignments or canvas_list_announcements, which list different resources. The scope is implied by the course_id parameter.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., canvas_get_discussion for a single discussion). It does not state when not to use it or mention any prerequisites. The agent must infer usage from context alone.

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

canvas_list_filesList course filesA
Read-only

List files in a course (slides, PDFs, handouts). Use search_term to filter by name. Returns file IDs for canvas_get_file_link.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
search_termNoFilter files by name

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the core safety profile is covered. The description adds that the tool returns file IDs for canvas_get_file_link, which is useful for chaining. However, it does not disclose pagination, sorting, or whether all files are returned at once.

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?

The description is two concise sentences with no wasted words. It front-loads the primary purpose and immediately adds a practical usage detail (filtering by name) and a note about return value usage.

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?

Given the tool's simplicity (two parameters, no output schema), the description is largely complete. It covers the action, scope, filtering, and intended downstream usage. A minor gap is the lack of information on pagination or result limits, but this is not critical for a list tool with open world hint.

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 description coverage is 100%, so the schema fully documents both parameters (course_id and search_term). The description adds no new semantic detail beyond what the schema provides, earning the baseline score.

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?

The description explicitly states the tool lists files in a course, specifies common file types (slides, PDFs, handouts), and distinguishes it from siblings like canvas_list_modules or canvas_read_file by focusing on file enumeration and retrieval of file IDs for use with canvas_get_file_link.

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?

The description explains when to use the tool (listing course files) and how to filter with search_term, but does not explicitly state when not to use it or mention alternatives among the many sibling tools.

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

canvas_list_groupsList my groupsA
Read-only

List the Canvas groups you belong to (project teams, study groups, sections) with member counts and their course.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the description's role is reduced. It adds the scope detail (user's groups, not all groups) but doesn't mention pagination, sorting, or any behavioral traits beyond the annotations.

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?

A single, concise sentence that front-loads the key information with zero waste.

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 simple, parameterless, read-only tool with complete annotations, the description is sufficient. No output schema exists but the return values are implied. Could mention if results are filtered by user (already implied by 'you belong to').

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% with zero parameters, so there is nothing to add. Baseline 3 plus 1 for complete clarity.

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?

The description uses a specific verb ('List') and resource ('Canvas groups'), and clarifies the scope ('you belong to') and content ('project teams, study groups, sections') with member counts and course. It clearly distinguishes from siblings which list different entities (courses, assignments, etc.).

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?

Implied usage is clear but no guidance on when not to use it or alternatives. With many siblings, explicit differentiation would help but the scope note partially addresses this.

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

canvas_list_inboxList Canvas inbox messagesA
Read-only

List conversations from the Canvas inbox (messages from instructors, TAs, and classmates) with sender, course, preview, and read state. Use scope='unread' for just unread messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax conversations to return; default 20
scopeNoWhich mailbox to list; default 'inbox'

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds that it returns sender, course, preview, and read state, which is useful but does not disclose pagination behavior or rate limits. Given good annotations, the bar is lower, and the description adds moderate value.

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?

Two sentences with no wasted words. The first sentence states the core function and output fields; the second provides actionable usage guidance. Every sentence earns its place.

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?

Given only 2 optional parameters, no output schema (so the description doesn't need to document return fields beyond what it states), and strong annotations, this description is complete enough. It covers purpose, output fields, and usage guidance for the key filter. Could mention pagination or limit defaults but not strictly necessary for this simple tool.

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 both parameters (limit, scope) with descriptions and enums. The description adds marginal meaning by suggesting a common scope value ('unread'), but this is a minor enhancement. Baseline 3 is appropriate.

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?

The description uses a specific verb ('List') and resource ('Canvas inbox messages'), and clarifies what the messages contain (sender, course, preview, read state). It distinguishes from siblings like canvas_list_announcements or canvas_list_discussions by explicitly naming the 'Canvas inbox' context.

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?

The description provides explicit usage guidance for the scope parameter ('Use scope='unread' for just unread messages'), which helps the agent decide when to filter. However, it doesn't mention when not to use this tool or compare it directly to siblings like canvas_get_conversation for reading individual messages.

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

canvas_list_modulesList modulesA
Read-only

List a course's modules with their items (pages, files, assignments, quizzes, links) in order — the course's content outline.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds value beyond these by specifying that the output includes items in order and represents the content outline. This provides useful behavioral context without contradicting the annotations.

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?

The description is a single, well-structured sentence that is front-loaded with the core action and resource. Every word adds value, with no redundancy or filler. It is concise yet informative.

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?

Given the absence of an output schema, the description reasonably explains the return value: a list of modules with items, in order, representing the course outline. This is sufficient for an open-world read tool, though it could briefly mention the structure of module objects. Overall, it is complete enough for the tool's complexity.

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?

The input schema has 100% description coverage for the single parameter 'course_id', which is adequately described as 'Canvas course ID'. The tool description does not add any additional semantics or usage notes for the parameter, so the baseline score of 3 is appropriate.

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?

The description clearly states the verb 'List', the resource 'a course's modules', and specifies what is included ('their items (pages, files, assignments, quizzes, links) in order'). It also provides a concise summary ('the course's content outline'), which distinguishes it from sibling tools like canvas_list_assignments or canvas_list_courses.

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 tool is for retrieving the course content outline, but it does not explicitly state when to use this tool versus alternatives (e.g., canvas_get_module_progress for progress, or canvas_list_assignments for assignments). No when-not or exclusion criteria are provided, leaving the agent to infer usage context.

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

canvas_list_pagesList course pagesB
Read-only

List a course's wiki pages. Use search_term to filter by title.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
search_termNoFilter pages by title

TDQS

B3.4/5.0
Behavior3/5

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

Annotations include readOnlyHint=true and destructiveHint=false, which already cover safety. The description adds no behavioral detail beyond that, such as pagination, rate limits, or that it lists all pages by default. Since annotations provide the core safety profile, a score of 3 is appropriate as the description adds minimal extra context.

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?

The description is concise with two sentences, front-loaded with the main action and then the filter detail. No wasted words. It earns a high score for brevity, but could be slightly more informative without harming conciseness.

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

Completeness3/5

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

Given the tool's simplicity (list operation with 2 params) and the strong annotations covering safety, the description is adequate. It doesn't explain the return format, but no output schema exists, so the agent might need to infer that. For a simple list tool, this is acceptable but leaves room for improvement.

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 description coverage is 100%, both parameters have descriptions. The description mentions that search_term filters by title, which adds some semantic value beyond the schema's 'Filter pages by title'. However, it doesn't add new meaning for course_id. Baseline 3 is justified since the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the function: list a course's wiki pages. It includes the resource ('wiki pages') and the course scope, which differentiates it from sibling tools like canvas_list_modules or canvas_get_page. However, it doesn't explicitly mention that it returns a list (as opposed to a single page), but the verb 'list' implies that.

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 usage for listing pages and mentions the optional search_term filter, but it does not explicitly state when to use this tool versus canvas_get_page or other list tools. There is no mention of when not to use it or alternatives, but given the clear purpose, the usage context is reasonably implied.

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

canvas_list_peer_reviewsList peer reviews assigned to meA
Read-only

Find peer reviews you've been asked to complete, and their status. Scans the course's peer-review assignments; pass assignment_id to check just one.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
assignment_idNoCheck a single assignment instead of scanning the course

TDQS

A4.2/5.0
Behavior3/5

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

The description explains that the tool scans the course's peer-review assignments and returns status, which aligns with the readOnlyHint=true annotation. It adds behavioral context beyond the schema (e.g., scanning behavior). However, it does not address the openWorldHint annotation, nor does it mention potential performance implications of scanning. The description is adequate but does not fully explore side effects or return structure.

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?

The description is extremely concise, consisting of two well-constructed sentences. The first sentence fronts the purpose and what the user gets (status), and the second sentence explains parameter usage. Every word is necessary; there is no redundancy or filler.

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?

Given a simple list tool with no output schema, the description covers the essential aspects: what it does (find peer reviews), scope (course-wide or single assignment), and status information. It could be slightly more complete by explicitly stating the output format (e.g., list of peer reviews with status fields) but remains nearly complete for the tool's complexity.

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?

The input schema has 100% coverage with descriptions for both course_id and assignment_id. The description adds value by contextualizing the parameters: it explains that scanning the course is the default behavior and that assignment_id allows focusing on a single assignment. This enhances the schema's bare parameter descriptions by clarifying the operational difference.

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?

The description clearly states the tool finds peer reviews assigned to the user and their status, using specific verbs and resources ('Find peer reviews you've been asked to complete, and their status'). It distinguishes between scanning an entire course and checking a single assignment via the assignment_id parameter, which differentiates it from siblings like canvas_list_assignments or canvas_get_assignment.

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?

The description provides clear context on when to use the tool: to find peer reviews you need to complete. It also specifies an alternative usage by passing assignment_id to check just one assignment instead of scanning the course. However, it does not explicitly mention when not to use the tool (e.g., against listing all assignments or checking grades), leaving the exclusion implicit.

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

canvas_list_plannerPlanner feedA
Read-only

Canvas planner feed across all courses — assignments, quizzes, discussions, announcements, and calendar events in date order, each flagged with whether it has new activity and your submission state. Richer than canvas_list_todo.

ParametersJSON Schema
NameRequiredDescriptionDefault
days_backNoHow far back to include; default 0
days_aheadNoHow far forward to look; default 14
new_activity_onlyNoOnly items Canvas flags as having new activity

TDQS

A3.9/5.0
Behavior3/5

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

The description adds context about the items being 'flagged with whether it has new activity and your submission state' and mentions date ordering, which goes beyond the annotations (which already confirm it is read-only, non-destructive, and open-world). No contradictions found.

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?

The description is a single sentence with essential details; it is front-loaded with the core function. The sibling reference adds a touch of extra context without being verbose. One could argue it is slightly dense but still efficient.

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?

Given there is no output schema, the description reasonably covers return contents (item types and flags). With 3 optional parameters and clear annotations, the description is sufficient for a read-only listing tool. No major gaps are evident.

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?

All 3 parameters have descriptions in the schema, so schema coverage is 100%. The description does not add further parameter info, so a baseline score of 3 is appropriate as the schema already 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?

The description states a specific verb ('list') and resource ('Planner feed across all courses') and lists included item types. It distinguishes itself from the sibling 'canvas_list_todo' by stating it is 'Richer', providing clear differentiation.

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?

The description implies when to use this tool (for a comprehensive planner view including new activity and submission states) and hints at an alternative (the simpler 'canvas_list_todo'), but could be more explicit about when not to use it.

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

canvas_list_quizzesList quizzesA
Read-only

List a course's quizzes with due dates, time limits, allowed attempts, and points.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's a safe read operation. The description adds value by specifying the exact fields returned (due dates, time limits, allowed attempts, points), which is not captured by annotations. No contradiction with annotations.

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?

The description is a single sentence that is front-loaded with the action (list) and resource (quizzes). Every word is purposeful, with no fluff. It is optimally concise.

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 simple list tool with one required parameter and no output schema, the description is reasonably complete. It specifies the returned fields. However, it omits details like pagination, ordering, or filtering, which might be expected for a list operation. Still, given the tool's simplicity, it covers the essential information.

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% with one parameter (course_id) already described as 'Canvas course ID'. The description does not add any additional meaning beyond what the schema provides. Baseline 3 is appropriate.

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?

The description clearly states the verb 'list' and the resource 'quizzes' scoped to a course. It also specifies the fields returned (due dates, time limits, allowed attempts, points), which distinguishes it from sibling tools like canvas_list_assignments or canvas_list_modules.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, filtering options, or when not to use it. The agent must infer usage from context alone.

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

canvas_list_todoMy to-do listA
Read-only

The user's Canvas to-do list: assignments and quizzes needing submission, across all courses.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds that the list includes only items needing submission, which is specific context. However, it does not disclose what happens when there are no items, how results are ordered, or any pagination behavior. Given the tool has zero parameters, the description adds modest value beyond annotations.

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?

One sentence that immediately identifies the resource ('user's Canvas to-do list') and its scope ('across all courses'). No wasted words.

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?

Given zero parameters, no output schema, and adequate annotations, the description is largely complete. It states what is returned (assignments and quizzes needing submission). It could be improved by clarifying ordering or the criteria for 'needing submission', but it is sufficient for a simple list endpoint.

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?

The tool has zero parameters, so baseline is 4. The description adds no parameter details, but none are needed since the schema already fully covers the lack of inputs.

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?

The description clearly states the tool returns the user's to-do list consisting of assignments and quizzes needing submission across all courses. It distinguishes from siblings like canvas_list_assignments (all assignments) and canvas_list_quizzes (all quizzes) by focusing on items requiring action.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like canvas_list_assignments or canvas_list_upcoming. It does not mention when not to use it or any prerequisites.

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

canvas_list_upcomingUpcoming eventsA
Read-only

The user's upcoming Canvas events and assignment due dates across all courses (next ~2 weeks).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description reinforces these by stating it's a non-destructive read ('upcoming events and assignment due dates'). It adds value beyond annotations by clarifying the temporal scope ('next ~2 weeks') and the fact it spans all courses, which openWorldHint alone does not specify.

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?

The description is a single sentence of 12 words, front-loaded with the key verb and resource. Every word earns its place ('upcoming', 'Canvas events and assignment due dates', 'across all courses', 'next ~2 weeks'). No redundancy or filler.

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?

Given zero parameters, no output schema, and rich annotations, the description is nearly complete. It explains what the tool returns, its scope ('across all courses'), and its time window ('next ~2 weeks'). One could argue for clarifying the return format (e.g., 'returns a list of events with dates'), but the lack of output schema makes this less critical. The essential context is well covered.

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 description coverage is 100% with zero parameters, so there are no parameters to document. The description adds no parameter info, but the baseline is 4 for zero-param tools. It could briefly hint at the output format or time window, but the high coverage already means the schema is fully handled.

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?

The description uses a specific verb ('upcoming') and resource ('Canvas events and assignment due dates') with clear scope ('across all courses, next ~2 weeks'). It distinguishes this tool from siblings like canvas_list_assignments (which lacks the global upcoming view), canvas_list_todo (which may have a different scope), and canvas_list_calendar_events (which is broader). The scope and resource are precisely defined.

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?

Although no explicit when-not-to-use or alternative is named, the description clearly states the scope ('across all courses' and 'next ~2 weeks'), which implicitly guides the agent: use this for a consolidated upcoming view over a limited horizon; for a single course's assignments or full calendar, use sibling tools. In context of zero-parameter tool, the explicit scope is sufficient without needing more detail.

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

canvas_read_fileRead a course file's textA
Read-only

Download a Canvas file and extract its text — PDF, Word (.docx), PowerPoint (.pptx), Excel (.xlsx), HTML, and plain-text formats. Use this to read syllabi, lecture slides, and handouts. file_id comes from canvas_list_files or a module item's content_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesCanvas file ID
max_charsNoCap on returned text; default 20000

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's main behavioral value is confirming it's non-destructive reading. The description adds key behavioral context: it can process multiple document formats (PDF, .docx, .pptx, .xlsx, HTML, plain text) and it extracts text from those files. It does not mention file size limits or supported character encodings, but for a file-read tool with good annotation coverage, this is sufficient. No contradiction with annotations.

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?

Three sentences, zero wasted words. The first sentence states what the tool does and its supported formats. The second sentence gives concrete use cases. The third sentence tells the agent where to find the required parameter value. Every sentence serves a distinct purpose, and the most actionable information is front-loaded.

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?

Given the tool's moderate complexity (2 params, no nested objects, no output schema), the description covers purpose, usage, and parameter source well. It does not explain expected return format (the extracted text and possibly metadata), but since no output schema exists, the agent would benefit from that. However, by listing file formats and extraction behavior, the agent can reasonably infer the output shape. A minor gap given the tool's simplicity.

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 description coverage is 100%, so both parameters (file_id, max_chars) are already documented in the schema. The description adds value by specifying that file_id comes from specific sources (canvas_list_files or module item's content_id), which clarifies the data dependency. The max_chars parameter is not mentioned in the description, but since the schema already provides a clear description, description coverage is acceptable.

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?

The description uses clear verb-resource pairing: 'Download a Canvas file and extract its text', immediately stating the core purpose. It lists supported formats (PDF, Word, etc.) and concrete use cases (syllabi, lecture slides, handouts), leaving no ambiguity. Among siblings like canvas_get_file_link (which just returns a URL) and canvas_read_syllabus (which reads a specific syllabus), this tool is distinctly positioned as the generic text-extraction tool for any file.

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?

The description explicitly tells the agent when to use this tool ('Use this to read syllabi, lecture slides, and handouts') and tells it where to get the file_id ('file_id comes from canvas_list_files or a module item's content_id'), which is critical since the agent might otherwise not know how to obtain a valid file_id. It does not provide when-not-to-use guidance, but for a read-only extraction tool with clear purpose, the positive guidance suffices.

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

canvas_read_syllabusRead a course syllabus (inline or attached file)A
Read-only

Get a course's syllabus as text. Handles both cases automatically: syllabus typed into Canvas, or posted as an attached PDF/Word file (common) — in which case the file is downloaded and its text extracted.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
max_charsNoCap on returned text; default 30000

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already mark the tool as read-only and non-destructive. The description adds value by revealing that when the syllabus is an attached file (PDF/Word), the tool performs download and text extraction. This behavioral detail is not inferable from annotations alone.

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?

The description is two sentences with zero wasted words. The first sentence states the primary purpose, and the second efficiently adds nuance about handling two syllabus formats and the extraction process. It is front-loaded and well-structured.

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

Completeness3/5

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

The description lacks details about the return format (e.g., plain text vs. Markdown) and does not mention error cases like missing syllabus. Given the tool's low complexity and the presence of annotations, it is minimally complete but leaves some gaps for an agent.

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 description coverage is 100%—the input schema already describes both parameters (course_id and max_chars) adequately. The description adds no extra semantic value about the parameters, so a baseline score of 3 is appropriate.

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?

The description clearly specifies the action 'Get' and the resource 'course's syllabus as text'. It distinguishes itself from siblings by explicitly stating that it handles both inline syllabus text and attached PDF/Word files, which is a unique capability among the listed tools.

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 usage by covering both common syllabus formats, but it does not explicitly state when to use this tool versus alternatives like canvas_read_file or other content retrieval tools. There are no exclusions or comparative guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 30 tool updatesv1.3.0
    • First observedcanvas_auth_status
    • First observedcanvas_export_course
    • First observedcanvas_get_assignment
    • First observedcanvas_get_conversation
    • First observedcanvas_get_course
    • First observedcanvas_get_discussion
    • First observedcanvas_get_feedback
    • First observedcanvas_get_file_link
    • First observedcanvas_get_grades
    • First observedcanvas_get_module_progress
    • First observedcanvas_get_page
    • First observedcanvas_get_profile
    • First observedcanvas_grade_breakdown
    • First observedcanvas_list_announcements
    • First observedcanvas_list_assignments
    • First observedcanvas_list_calendar_events
    • First observedcanvas_list_courses
    • First observedcanvas_list_discussions
    • First observedcanvas_list_files
    • First observedcanvas_list_groups
    • First observedcanvas_list_inbox
    • First observedcanvas_list_modules
    • First observedcanvas_list_pages
    • First observedcanvas_list_peer_reviews
    • First observedcanvas_list_planner
    • First observedcanvas_list_quizzes
    • First observedcanvas_list_todo
    • First observedcanvas_list_upcoming
    • First observedcanvas_read_file
    • First observedcanvas_read_syllabus

TDQS

A4/5.0

Scored across 30 tools

Disambiguation4/5

Tools are generally distinct in purpose, but there is some overlap between canvas_list_todo, canvas_list_upcoming, canvas_list_planner, and canvas_list_calendar_events. Although their descriptions help differentiate them, an agent might still select the wrong one for scheduling or task queries.

Naming Consistency5/5

All tool names consistently follow the 'canvas_verb_noun' pattern (e.g., canvas_list_courses, canvas_get_assignment, canvas_read_file). The naming is predictable and makes it easy for an agent to infer expected behavior.

Tool Count4/5

With 30 tools, the set covers a wide range of Canvas operations. While the count is on the higher side, each tool serves a specific need for a student, and the count is reasonable given the breadth of the Canvas LMS API surface.

Completeness5/5

The toolset provides comprehensive coverage for a student's typical needs: viewing courses, assignments, grades, modules, files, discussions, quizzes, calendar, inbox, and feedback. It includes both listing and detailed retrieval, and even covers file content reading and course export. There are no obvious gaps for a student-facing use case.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers