Skip to main content
Glama

search_courses

Read-onlyIdempotent

Search Bulletin course codes, titles, and descriptions by keyword; filter by subject and level to find courses for degree planning.

Instructions

Keyword search over Bulletin course codes, titles and descriptions.

subject: e.g. 'CSC'. level: 'lower' (100-299), 'upper' (300-699), 'graduate' (700+), or a hundred like '600'.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "query": "<query>"
    },
    "name": "search_courses"
  }
}

Input Schema

NameRequiredDescriptionDefault
levelNo
limitNo
queryYes
subjectNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description adds value by disclosing the searchable fields (codes, titles, descriptions), which is real behavioral context beyond annotations. It does not say how results are ranked, whether matching is AND/OR across keywords, or what happens when nothing matches.

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 definition is short, front-loads the core purpose, and follows with the two non-obvious parameters in a compact colon-delimited style. The parameter notes read as an addendum rather than an integrated usage statement, but nothing is wasted.

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

Completeness2/5

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

This is a search tool with no output schema, so the description should convey what a result looks like and how results behave; it says nothing about result shape, ordering, or what limit controls. For a four-parameter tool whose output drives downstream calls to get_course or get_sections, essential context is missing.

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 0%, so the description must carry the burden, and it partially does: it gives a concrete example for subject ('CSC') and a precise band mapping for level ('lower' 100-299, 'upper' 300-699, 'graduate' 700+, or a hundred like '600'), which is information the untyped anyOf schema cannot convey. It leaves the required query parameter and the limit parameter (default 10) entirely unexplained, so only half the parameters gain meaning.

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?

"Keyword search over Bulletin course codes, titles and descriptions" names a specific verb (keyword search) and a specific resource, and the mention of codes/titles/descriptions tells the agent what fields are matched. It is clearly a discovery tool, distinguishable from code-lookup siblings, but it never names an alternative explicitly.

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?

There is no statement of when to use this versus get_course, get_sections, or list_eligible_electives, and no guidance on when not to use it. The only hint is implicit in the word "keyword" — an agent must infer that this is the tool for when it lacks a course code.

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