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. Each row names its current FORM's wording source: source_url, capture_file, catalog_year and source_catalog_name are that one source's, never the record's whole span. A row whose record holds more than one form or more than one source also carries version_count, source_count, first_edition_seen and last_edition_seen, and one sentence saying so in words; a record with one form and one source carries none of them and reads exactly as it always has. The forms themselves, each with its own content and its own sources, come from the one-record get, never from a list. A record last seen in an older edition says so, because the Union keeps a record no current catalog prints.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "search_programs_and_learning_units"
  }
}

Input Schema

NameRequiredDescriptionDefault
cipNoOptional: programs or learning units 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
viewNoFor type=learning_unit: count returns filtered entity counts without fetching cards; details returns bounded pageable cards for all schools or selected state/school, combined with subject_code, CIP, title query and printed code. Omit for automatic shop behavior. Explicit view is not supported for type=program.
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
localeNoOptional, where the publish holds the College Scorecard's characteristics: only schools in this setting (NCES locale)
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
exam_creditNoOptional: only schools with a published rule granting credit for this exam program
online_onlyNoOptional, where the publish holds the College Scorecard's characteristics: only schools whose programs are all offered online
residentialNoOptional, where the publish holds the College Scorecard's characteristics: only primarily or highly residential four-year schools (Carnegie size and setting)
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
school_offsetNoOptional: the next_school_offset from a previous answer, for the school facet's next page of schools
with_pathwaysNoOptional: only schools taking part in at least one pathway held
tuition_in_maxNoOptional: only schools whose in-state tuition and fees (College Scorecard) is at or under this many dollars a year
with_agreementsNoOptional: only schools with at least one transfer agreement held
on_campus_housingNoOptional: only schools that publish an on-campus room and board cost (College Scorecard)
with_prior_learningNoOptional: only schools with a published prior learning policy or a published rule for credit for prior learning they receive
with_transfer_policyNoOptional: only schools with a published transfer credit policy
with_veteran_servicesNoOptional: only schools with veterans and military services held

Output Schema

NameRequiredDescriptionDefault
facetsNoThe refinements: each facet's values with their counts of held rows. The school facet is one page of schools_matching, each school with its title (name), sector and checklists held
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
union_statementNoSaid once when any card carries forms or sources: the full source list is in the structured data
schools_matchingNoHow many schools hold the matching set
next_school_offsetNoWhile schools of schools_matching remain past this page of the school facet: the school_offset of the next page

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changed
    • addedInput schema / properties / exam_credit
      Added value: +{
      +  "description": "Optional: only schools with a published rule granting credit for this exam program",
      +  "enum": [
      +    "AP",
      +    "IB",
      +    "CLEP",
      +    "DSST"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / locale
      Added value: +{
      +  "description": "Optional, where the publish holds the College Scorecard's characteristics: only schools in this setting (NCES locale)",
      +  "enum": [
      +    "city",
      +    "suburb",
      +    "town",
      +    "rural"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / on_campus_housing
      Added value: +{
      +  "description": "Optional: only schools that publish an on-campus room and board cost (College Scorecard)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / online_only
      Added value: +{
      +  "description": "Optional, where the publish holds the College Scorecard's characteristics: only schools whose programs are all offered online",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / residential
      Added value: +{
      +  "description": "Optional, where the publish holds the College Scorecard's characteristics: only primarily or highly residential four-year schools (Carnegie size and setting)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / school_offset
      Added value: +{
      +  "description": "Optional: the next_school_offset from a previous answer, for the school facet's next page of schools",
      +  "type": "integer"
      +}
    • addedInput schema / properties / tuition_in_max
      Added value: +{
      +  "description": "Optional: only schools whose in-state tuition and fees (College Scorecard) is at or under this many dollars a year",
      +  "type": "number"
      +}
    • addedInput schema / properties / with_agreements
      Added value: +{
      +  "description": "Optional: only schools with at least one transfer agreement held",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / with_pathways
      Added value: +{
      +  "description": "Optional: only schools taking part in at least one pathway held",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / with_prior_learning
      Added value: +{
      +  "description": "Optional: only schools with a published prior learning policy or a published rule for credit for prior learning they receive",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / with_transfer_policy
      Added value: +{
      +  "description": "Optional: only schools with a published transfer credit policy",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / with_veteran_services
      Added value: +{
      +  "description": "Optional: only schools with veterans and military services held",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / facets / description
      Previous value: -"The refinements: each facet's values with their counts of held rows"New value: +"The refinements: each facet's values with their counts of held rows. The school facet is one page of schools_matching, each school with its title (name), sector and checklists held"
    • addedOutput schema / properties / next_school_offset
      Added value: +{
      +  "description": "While schools of schools_matching remain past this page of the school facet: the school_offset of the next page",
      +  "type": "integer"
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / cip / description
      Previous value: -"Optional: programs with this six-digit CIP code (e.g. 48.0508), a comma-separated list, or an array of codes"New value: +"Optional: programs or learning units with this six-digit CIP code (e.g. 48.0508), a comma-separated list, or an array of codes"
    • addedInput schema / properties / view
      Added value: +{
      +  "description": "For type=learning_unit: count returns filtered entity counts without fetching cards; details returns bounded pageable cards for all schools or selected state/school, combined with subject_code, CIP, title query and printed code. Omit for automatic shop behavior. Explicit view is not supported for type=program.",
      +  "enum": [
      +    "count",
      +    "details"
      +  ],
      +  "type": "string"
      +}
  3. Changed6 schema fields changed
    • addedOutput schema / properties / results / items / properties / first_edition_seen
      Added value: +{
      +  "description": "The earliest academic year a source prints it in; absent for a record with one form and one source",
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / form_statement
      Added value: +{
      +  "description": "One sentence about the record's forms and sources, and whether it was last seen in an older edition",
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / last_edition_seen
      Added value: +{
      +  "description": "The latest academic year a source prints it in; absent for a record with one form and one source",
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / source_count
      Added value: +{
      +  "description": "How many sources print the record; absent for a record with one form and one source",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / results / items / properties / version_count
      Added value: +{
      +  "description": "How many FORMS the record holds; absent for a record with one form and one source",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / union_statement
      Added value: +{
      +  "description": "Said once when any card carries forms or sources: the full source list is in the structured data",
      +  "type": "string"
      +}
  4. 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)"
  5. 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"
  6. 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"
      +}
  7. 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"
      +}
  8. 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"
      +}
  9. 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"
      +}
  10. 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"
      +}
  11. Added

TDQS

A3.6/5.0
Behavior4/5

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

The readOnlyHint=true annotation is consistent with a search operation. Beyond annotations, the description discloses returned card fields, counts, per-row source attribution, conditional version_count/source_count/edition fields, and how older-edition records are represented, which is substantial behavioral context.

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 description is long and densely packed; the purpose is front-loaded, but the opening sentence carries many output and provenance clauses at once. Phrases such as 'the Union keeps a record' and 'reads exactly as it always has' add length and ambiguity rather than helping an agent select or invoke the tool.

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 28-parameter search tool with an output schema and full schema descriptions, the definition covers the key selection model and the unusual provenance/version behavior. Some invocation details are left to the schema and output schema, but nothing critical for correct use appears 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 description coverage is 100%, so the baseline is 3. The description adds meaning for query length and location requirements in broad course searches, and ties several filters to the result set (subject CIP family or unknown, subject_code prefix, credential class, award as published, place). It does not explain every parameter such as limit, offset, or view, but the schema carries those details.

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 with 'Which programs or courses match, and where?' and enumerates filters and product-card outputs, making the search scope clear. It also distinguishes list search from 'the one-record get' for forms, though it does not explicitly differentiate from sibling search tools such as find_programs.

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?

It gives concrete usage rules: course words must be 3 or more characters, and very common words require a state, city or school; it also says forms come from the one-record get rather than a list. However, it stops short of explicit when-to-use guidance versus alternatives like find_programs, learning_units, or programs_for_institution.

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.