Skip to main content
Glama

Search Programs and Learning Units

search_programs_and_learning_units
Read-only

Which programs or courses match, and where? Words, a subject (CIP family, or unknown), a course subject prefix, a credential class, an award as published, and a school's state, city, type or UNITID answer with product cards (name, award, length and college when held, school and city, subject, checklist size, and what the program leads to through the CIP-SOC crosswalk) and the counts to refine by. Courses across every school need words of 3 or more characters; words held by very many courses need a state, city or school.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cipNoOptional: programs with this six-digit CIP code (e.g. 48.0508), a comma-separated list, or an array of codes
cityNoOptional city, one of a state answer's cities
codeNoOptional, courses only: a course code as printed, e.g. ZOO 2015; lists that code at every school, or within the state, city or school given
typeNoprogram (the default) or learning_unit
awardNoOptional award exactly as published, one of the answer's awards
limitNoOptional page size (default 10, at most 50)
placeNoOptional: a place the question names, read as a state (name or code), a city, or a school, e.g. Wyoming or Casper
queryNoWords: a program's name or award, or a course's title
stateNoOptional two-letter state
offsetNoOptional: the next_offset from a previous answer
sectorNoOptional school type as IPEDS labels it, e.g. public 2-year
unitidNoOptional: one school's IPEDS UNITID
subjectNoOptional CIP family (two digits, e.g. 51) or unknown
credentialNoOptional, programs only: a credential class, one of the answer's credential values (e.g. ceterms:AssociateDegree), or none
subject_codeNoOptional: a course subject prefix, e.g. NURS, one of the answer's subject codes. A course's own prefix as printed, or a prefix a program's checklist requires

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
facetsNoThe refinements: each facet's values with their counts of held rows
publishNoThe data road's publish number
resultsNoThe product cards
contractYes
statementYes
portal_urlNoThe same view on the portal
understoodNoWhat was read: words, place (with candidates when several schools fit), the filters in force, question (frame, department, not_held words), lead (the product a page shows first), and match (step, words_used, stems, statement)
next_offsetNo
next_actionsNo
build_versionYesDeprecated: the same value as publish
census_clearedYes
total_matchingNo
schools_matchingNoHow many schools hold the matching set

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / code
      Added value: +{
      +  "description": "Optional, courses only: a course code as printed, e.g. ZOO 2015; lists that code at every school, or within the state, city or school given",
      +  "type": "string"
      +}
    • addedOutput schema / properties / schools_matching
      Added value: +{
      +  "description": "How many schools hold the matching set",
      +  "type": "integer"
      +}
    • changedOutput schema / properties / understood / description
      Previous value: -"What was read: words, place, the filters in force, and match (step, matched_terms, statement)"New value: +"What was read: words, place (with candidates when several schools fit), the filters in force, question (frame, department, not_held words), lead (the product a page shows first), and match (step, words_used, stems, statement)"
  2. Changed2 schema fields changed
    • changedOutput schema / properties / results / items / properties / leads_to / description
      Previous value: -"occupations through the CIP-SOC crosswalk, or status 'not yet known'"New value: +"occupations through the CIP-SOC crosswalk; absent when none is held"
    • changedOutput schema / properties / results / items / properties / subject / description
      Previous value: -"cip_code, family, family_title, cip_source; or status 'subject not yet known'"New value: +"cip_code, family, family_title, cip_source; absent when the program holds no CIP"
  3. Changed6 schema fields changed
    • addedInput schema / properties / credential
      Added value: +{
      +  "description": "Optional, programs only: a credential class, one of the answer's credential values (e.g. ceterms:AssociateDegree), or none",
      +  "type": "string"
      +}
    • changedInput schema / properties / subject_code / description
      Previous value: -"Optional, courses only: the school's own subject prefix as printed, e.g. NURS, one of the answer's subject codes"New value: +"Optional: a course subject prefix, e.g. NURS, one of the answer's subject codes. A course's own prefix as printed, or a prefix a program's checklist requires"
    • addedOutput schema / properties / results / items / properties / college
      Added value: +{
      +  "description": "The college within the school that offers the program, when held",
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / credits_published
      Added value: +{
      +  "description": "A course's credits as printed, when held",
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / description_excerpt
      Added value: +{
      +  "description": "A course description's first 200 characters, with an ellipsis when longer; the full text is on get_learning_unit",
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / normal_length
      Added value: +{
      +  "description": "A program's normal length as published, when held",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / cip
      Added value: +{
      +  "description": "Optional: programs with this six-digit CIP code (e.g. 48.0508), a comma-separated list, or an array of codes"
      +}
  5. Changed2 schema fields changed
    • addedOutput schema / properties / build_version / description
      Added value: +"Deprecated: the same value as publish"
    • addedOutput schema / properties / publish
      Added value: +{
      +  "description": "The data road's publish number",
      +  "type": "integer"
      +}
  6. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "build_version": {
      +      "type": "integer"
      +    },
      +    "census_cleared": {
      +      "type": "boolean"
      +    },
      +    "contract": {
      +      "type": "string"
      +    },
      +    "facets": {
      +      "description": "The refinements: each facet's values with their counts of held rows",
      +      "type": "object"
      +    },
      +    "next_actions": {
      +      "items": {
      +        "properties": {
      +          "arguments": {
      +            "type": "object"
      +          },
      +          "label": {
      +            "type": "string"
      +          },
      +          "tool": {
      +            "description": "A GoldSeam service",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "label",
      +          "tool",
      +          "arguments"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "next_offset": {
      +      "type": "integer"
      +    },
      +    "portal_url": {
      +      "description": "The same view on the portal",
      +      "type": "string"
      +    },
      +    "results": {
      +      "description": "The product cards",
      +      "items": {
      +        "properties": {
      +          "award": {
      +            "description": "The award as published, or null"
      +          },
      +          "checklist": {
      +            "description": "checklist_id, requirements, credits_computed; or null"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "leads_to": {
      +            "description": "occupations through the CIP-SOC crosswalk, or status 'not yet known'",
      +            "type": "object"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "next_actions": {
      +            "items": {
      +              "properties": {
      +                "arguments": {
      +                  "type": "object"
      +                },
      +                "label": {
      +                  "type": "string"
      +                },
      +                "tool": {
      +                  "description": "A GoldSeam service",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "label",
      +                "tool",
      +                "arguments"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "school": {
      +            "description": "name, city, state, sector, ipeds_unit_id",
      +            "type": "object"
      +          },
      +          "subject": {
      +            "description": "cip_code, family, family_title, cip_source; or status 'subject not yet known'",
      +            "type": "object"
      +          },
      +          "type": {
      +            "description": "program or learning_unit",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "statement": {
      +      "type": "string"
      +    },
      +    "total_matching": {
      +      "type": "integer"
      +    },
      +    "understood": {
      +      "description": "What was read: words, place, the filters in force, and match (step, matched_terms, statement)",
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "contract",
      +    "build_version",
      +    "census_cleared",
      +    "statement"
      +  ],
      +  "type": "object"
      +}
  7. Changed2 schema fields changed
    • addedInput schema / properties / place
      Added value: +{
      +  "description": "Optional: a place the question names, read as a state (name or code), a city, or a school, e.g. Wyoming or Casper",
      +  "type": "string"
      +}
    • addedInput schema / properties / subject_code
      Added value: +{
      +  "description": "Optional, courses only: the school's own subject prefix as printed, e.g. NURS, one of the answer's subject codes",
      +  "type": "string"
      +}
  8. Added

TDQS

A3.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so the safety profile is covered; the description goes further with semantic constraints (3-character minimum for course words, mandatory location scoping for very common words) that materially affect how the tool is called. It spends some words restating the return card contents, which the output schema already covers, so it is not a 5.

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

Conciseness2/5

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

The core content is delivered as one sprawling, comma-chained sentence that is hard to parse, followed by a constraint sentence. The opening question is a soft lead-in rather than a crisp front-loaded statement of purpose.

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 15-parameter optional-filter tool with an output schema and read-only annotation, the description covers the main filter families and the two operating constraints, which is close to adequate. It omits mention of pagination-related params (limit/offset) and the code param, but the schema carries those.

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 all 15 parameters and the baseline is 3. The description echoes several filters (subject/CIP family, subject prefix, credential class, award, state/city/type/UNITID) but adds no syntax or format meaning beyond what the schema provides.

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 opens by framing the search domain ("Which programs or courses match, and where?") and enumerates the filter dimensions (words, CIP subject, subject prefix, credential, award, school location/type/UNITID), so the verb+resource is discernible. It does not, however, distinguish itself from close siblings like find_programs or learning_units, leaving the agent to infer the boundary.

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?

There is real conditional guidance: courses need words of 3+ characters, and words held by very many courses require a state, city or school to narrow. But there is no when-to-use-this-vs-alternatives guidance despite several overlapping siblings, so usage is implied rather than routed.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.