Skip to main content
Glama

ntulearn_search_course_content

Read-onlyIdempotent

Recursively search a course’s content tree by title or description to find matching items and return their full breadcrumb paths.

Instructions

Recursively search a course's entire content tree for items matching a query. Matches on title or description (case-insensitive substring). Returns matched items with their full breadcrumb path.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesSearch term (case-insensitive substring)
course_idYesBlackboard course ID (e.g. _12345_1)
max_depthNoMaximum recursion depth (default 5, capped at 10)
max_resultsNoMaximum number of matching items to return (default 50, capped at 200)
response_formatNo'json' returns a structured payload (default, recommended for agents). 'markdown' returns a human-readable summary.json

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
countYes
matchesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.2.0

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds the matching semantics (case-insensitive substring on title or description) and notes breadcrumb paths are returned, but that matching detail is essentially duplicated in the query parameter's schema description, leaving little net new behavior disclosed.

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 short sentences with zero filler: purpose first, matching rule second, return shape third. Nothing to trim and the most important 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?

With an output schema present the description needn't explain return values, and annotations carry the safety profile; the description still supplies the matching rule and the recursive scope. It is nearly complete, only missing a pointer to the sibling it replaces for plain content listing.

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 every parameter (query, course_id, max_depth, max_results, response_format) is already documented in the schema with defaults and caps. The description adds no parameter-level detail beyond what the schema provides, which is the baseline expectation.

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?

States a specific verb (search) and resource (course content tree) with the recursive scope made explicit, plus what it matches on. An agent can distinguish it from a plain listing tool, but the description never names the nearest sibling (ntulearn_get_course_contents) that an agent would otherwise confuse it with.

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?

Usage is implied: reach for this when you need to locate an item by name/text anywhere in a course rather than enumerate the tree. There is no explicit when-not guidance and no named alternative, so the agent must infer the boundary against ntulearn_get_course_contents on its own.

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