Skip to main content
Glama

ntulearn_read_file_content

Read-onlyIdempotent

Read files attached to Blackboard course items inline to review or ask questions about lecture materials without downloading them. Handles PDFs, Office, and text files, with vision mode for diagrams.

Instructions

Read the content of files attached to a Blackboard content item, returned inline (no local-filesystem hop). Use this to ask questions about lecture material — ntulearn_download_file is for users who actually want the bytes on disk. PDFs default to text mode (via pypdf — cheap and almost always what you want for written content). Pass mode='vision' for diagram-, equation-, or screenshot-heavy pages; pair with pages='5' or pages='1-3' to keep the payload under MCP's 1 MB cap (~3K vision tokens per page). For multi-page diagram-heavy decks, prefer ntulearn_download_file plus drag-and-drop into claude.ai. Also supports Microsoft Office formats (.docx, .pptx with speaker notes, .xlsx with all sheets) and text-like files (txt, md, csv, json, xml, html with tags stripped, code files). Other binaries (images, video, audio, archives, legacy .doc/.ppt/.xls) are listed under skipped — fall back to ntulearn_download_file for those. Per-file cap 25 MB, batch cap 40 MB, vision cap 50 rendered pages; oversized files are skipped.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeNoPDF handling. 'text' (default) extracts text via pypdf — cheap, fits MCP's payload budget. 'vision' additionally renders each page as an image with PyMuPDF (~3K vision tokens per page); use for diagram/equation/handwritten content, ideally with a narrow `pages` range to stay under the 1 MB cap. Ignored for non-PDF files.text
pagesNoOptional page range for PDFs (1-indexed, inclusive). Examples: '1-10', '3', '1,3,5', '1-5,8,10-12'. Omit to read all pages (vision mode capped at 50 rendered pages). Especially useful with mode='vision' to keep the response under MCP's 1 MB cap.
course_idYesBlackboard course ID (e.g. _12345_1)
content_idYesContent item ID (e.g. _67890_1)
response_formatNo'json' returns a structured payload (default, recommended for agents). 'markdown' returns a human-readable summary.json

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNo
filesYes
titleNo
skippedYes
contentIdNo
contentHandlerIdNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.2.0

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive), but the description adds substantial behavior the annotations can't convey: the 1 MB MCP payload cap, ~3K vision tokens per page, per-file 25 MB / batch 40 MB / 50-rendered-page caps, and the fact that oversized or unsupported files land under `skipped` rather than failing. That is exactly the operational context an agent needs before invoking.

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

Conciseness4/5

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

Front-loaded with purpose and the sibling distinction before any parameter detail, then it moves to mode guidance, fallbacks, and caps. It is dense and nearly every sentence carries a distinct constraint, but at roughly 200 words it is long for a read tool and includes some redundancy with the schema's own mode/pages descriptions.

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?

An output schema exists, so return-value shape need not be explained, and annotations already carry the safety semantics. The description fills the remaining gaps a caller would hit — supported formats (Office variants with speaker notes/sheets, text-like files with HTML tag stripping), caps, the skipped-file behavior, and where to go when unsupported. Nothing material is missing.

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, but the description adds decision rationale beyond the schema: it explains *why* text is the default ('cheap and almost always what you want for written content') and when vision is justified, and reinforces the mode+pages pairing. It is largely additive rather than duplicative, though a few points restate the schema.

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?

Opens with a specific verb+resource ('Read the content of files attached to a Blackboard content item') and immediately scopes the behavior ('returned inline (no local-filesystem hop)'). It also names the sibling it is not — 'ntulearn_download_file is for users who actually want the bytes on disk' — so an agent can distinguish the two without opening either schema.

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

Usage Guidelines5/5

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

Explicitly states when to use this ('ask questions about lecture material') vs the alternative ('users who actually want the bytes on disk'), then gives mode selection guidance (text default, vision for diagram/equation/screenshot-heavy), page-range pairing to stay under the 1 MB cap, and a fallback path for multi-page diagram decks. Even the unsupported-binary case is routed ('fall back to ntulearn_download_file for those').

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