Skip to main content
Glama

find_curriculum

Read-onlyDestructive

Use this when a user wants to find or get recommendations for homeschool curriculum, educational programs, or learning materials for their children. Searches a curated database of 350+ expert-reviewed homeschool offerings and returns personalized matches based on the child's grade level, learning style, family values, budget, and special needs. subjects is a hard filter results always satisfy. worldview is too, but it widens: a specific worldview request also returns worldview-neutral offerings, which suit any household. grade_level is a hard filter except that an offering with no grade range recorded appears at every grade. budget_max filters on an offering's annual cost where known, otherwise its lowest listed price, so a result may cost more at higher levels, and one whose price is unknown may appear at any budget. offering_types, when given, is a hard filter; each match reports its offering_type. learning_style, special_needs, parent_time, and format_preference influence ranking. Do not use for lesson planning, scheduling, legal compliance questions, or tutoring.

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": {
      "grade_level": "<grade_level>"
    },
    "name": "find_curriculum"
  }
}

Input Schema

NameRequiredDescriptionDefault
subjectsNoAlways pass as an array, e.g. ["math","science"]. Use ["all"] for comprehensive curriculum.
worldviewNoFamily's religious/philosophical preference. 'any' means no preference.
budget_maxNoMaximum annual budget in USD, compared against an offering's annual cost where known (a monthly price times twelve, for example), otherwise its lowest listed price. Results carry price (the publisher's figure, its period and its currency; USD unless stated, a few offerings are priced only in GBP and are compared at face value) and annual_cost when known. 0 selects offerings with a free tier; many of those also sell paid levels, and an offering whose price is unknown carries no price range at all — so do not tell a family something is free without checking what the result actually shows.
grade_levelYesThe child's current or target grade level.
parent_timeNoDaily parent teaching time. 'minimal' = under 1hr, 'moderate' = 1-3hrs, 'intensive' = 3+hrs.
special_needsNoAlways pass as an array, e.g. ["adhd","dyslexia"]. Any learning differences or special needs. Use ["none"] if none.
learning_styleNoAlways pass as an array, e.g. ["visual","hands_on"]. How the child learns best.
offering_typesNoOptional hard filter on the kind of offering, e.g. ["online_school"]. Leave it out to search every type. online_school enrolls a student in a school that issues grades or a transcript; curriculum is materials a family teaches from. See dataset://vocabulary.
format_preferenceNoAlways pass as an array, e.g. ["online","hybrid"]. Preferred curriculum delivery format.

Output Schema

NameRequiredDescriptionDefault
matchesYes
match_countYes
no_match_noteNo
filters_appliedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / offering_types
      Added value: +{
      +  "description": "Optional hard filter on the kind of offering, e.g. [\"online_school\"]. Leave it out to search every type. online_school enrolls a student in a school that issues grades or a transcript; curriculum is materials a family teaches from. See dataset://vocabulary.",
      +  "items": {
      +    "enum": [
      +      "curriculum",
      +      "microschool",
      +      "hybrid_program",
      +      "online_school"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 4,
      +  "minItems": 1,
      +  "type": "array",
      +  "uniqueItems": true
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / budget_max / description
      Previous value: -"Maximum annual budget in USD, compared against an offering's annual cost where known (a monthly price times twelve, for example), otherwise its lowest listed price. Results carry price (the publisher's figure and its period) and annual_cost when known. 0 selects offerings with a free tier; many of those also sell paid levels, and an offering whose price is unknown carries no price range at all — so do not tell a family something is free without checking what the result actually shows."New value: +"Maximum annual budget in USD, compared against an offering's annual cost where known (a monthly price times twelve, for example), otherwise its lowest listed price. Results carry price (the publisher's figure, its period and its currency; USD unless stated, a few offerings are priced only in GBP and are compared at face value) and annual_cost when known. 0 selects offerings with a free tier; many of those also sell paid levels, and an offering whose price is unknown carries no price range at all — so do not tell a family something is free without checking what the result actually shows."
  3. Changed1 schema field changed
    • changedInput schema / properties / budget_max / description
      Previous value: -"Maximum annual budget in USD, compared against an offering's lowest price. 0 selects offerings with a free tier; many of those also sell paid levels, and an offering whose price is unknown carries no price range at all — so do not tell a family something is free without checking what the result actually shows."New value: +"Maximum annual budget in USD, compared against an offering's annual cost where known (a monthly price times twelve, for example), otherwise its lowest listed price. Results carry price (the publisher's figure and its period) and annual_cost when known. 0 selects offerings with a free tier; many of those also sell paid levels, and an offering whose price is unknown carries no price range at all — so do not tell a family something is free without checking what the result actually shows."
  4. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the semantics an agent cannot see anywhere else: subjects and offering_types are hard filters, worldview widens to neutral offerings, grade_level silently includes offerings with no recorded range, and budget_max falls back to lowest listed price so unknown-priced items appear at any budget. It also warns not to tell a family something is free without checking the returned price, which is exactly the kind of caution annotations don't carry. It does not address the odd destructiveHint=true flag, but nothing in the text contradicts it outright.

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 the trigger and the hard/soft filter split, and every sentence carries information. Slightly overstuffed — the budget_max sentence chains three separate caveats into one long clause — but no sentence is pure filler.

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?

For a 9-parameter filtered search with an output schema, this covers what an agent needs: trigger, exclusions, filter semantics, and even which fields each result reports (offering_type, price, annual_cost). Return-value structure is correctly left to the output schema rather than duplicated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, yet the description still adds decision-critical meaning per parameter: which four (subjects, worldview, grade_level, offering_types) are hard filters versus which four (learning_style, special_needs, parent_time, format_preference) only influence ranking. The worldview widening and grade-level exception rules exist nowhere in the schema and materially change what results an agent should expect.

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 concrete trigger ("when a user wants to find or get recommendations for homeschool curriculum") and a specific resource ("curated database of 350+ expert-reviewed homeschool offerings"). It states the personalization dimensions returned, which distinguishes it from the generic siblings search_offerings and compare_offerings even without naming them.

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

Usage Guidelines4/5

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

Gives an explicit when-to-use condition plus a clear exclusion list ("Do not use for lesson planning, scheduling, legal compliance questions, or tutoring"). It falls short of 5 because it never names the sibling tools it should be chosen over — an agent deciding between find_curriculum and search_offerings gets no direct routing rule.

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.

Resources