8 curriculum, classroom, accommodations and exam-prep skill products. 5 of 7 free.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Load a product's free gateway skill with its complete instructions. FREE. Typical input {"slug": "curriculum-architect-hs"} returns {"slug": ..., "skill": "<skill name>", "instructions": "<full skill text>"}. Returns exactly one skill - the product's free gateway skill - chosen automatically from the slug, with no plan required. Use when the caller wants usable instructions immediately. Not for the product's other skills: those are named and need get_full_skill with a skill_name, which requires a paid plan. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "unknown slug '<value>'. Use list_products."}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Product slug exactly as returned by list_products, e.g. "curriculum-architect-hs"; must be non-empty.
Load a product's free gateway skill with its complete instructions. FREE. Typical input {"slug": "curriculum-architect-hs"} returns {"slug": ..., "skill": "<skill name>", "instructions": "<full skill text>"}. Returns exactly one skill - the product's free gateway skill - chosen automatically from the slug, with no plan required. Use when the caller wants usable instructions immediately. Not for the product's other skills: those are named and need get_full_skill with a skill_name, which requires a paid plan. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "unknown slug '<value>'. Use list_products."}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Product slug exactly as returned by list_products, e.g. "curriculum-architect-hs"; must be non-empty. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"description": "Product slug exactly as returned by list_products, e.g. \"curriculum-architect-hs\"; must be non-empty."
}
},
"additionalProperties": false
}Load one product in full: its persona plus every paid skill. PREMIUM (license). Typical input {"slug": "curriculum-architect-hs"} returns {"slug": ..., "name": ..., "persona": "<persona text>", "skills": [{"name": ..., "instructions": ...}, ...], "free_skill": {...}}. Returns persona plus every skill for one product. Use when the caller wants the whole product. Not for a single skill (get_full_skill) and not for a free look, which list_products and get_free_skill provide with no plan. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "unknown slug '<value>'"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Product slug exactly as returned by list_products, e.g. "curriculum-architect-hs"; must be non-empty. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"description": "Product slug exactly as returned by list_products, e.g. \"curriculum-architect-hs\"; must be non-empty."
}
},
"additionalProperties": false
}Load one paid skill's complete instructions from a product. PREMIUM (license). Typical input {"slug": "curriculum-architect-hs", "skill_name": "unit-planner"} returns {"slug": ..., "skill": ..., "instructions": "<full skill text>"}. Returns one named skill, selected by skill_name. Use when the caller wants one specific paid skill. Not for the free gateway skill, which get_free_skill returns with no plan, and not for every skill at once (get_full_product). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "unknown slug '<value>'"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Product slug exactly as returned by list_products, e.g. "curriculum-architect-hs"; must be non-empty. |
| skill_name* | string | Exact skill name as listed in that product's "skills" array from list_products, e.g. "unit-planner"; must be non-empty. |
{
"type": "object",
"required": [
"slug",
"skill_name"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"description": "Product slug exactly as returned by list_products, e.g. \"curriculum-architect-hs\"; must be non-empty."
},
"skill_name": {
"type": "string",
"minLength": 1,
"description": "Exact skill name as listed in that product's \"skills\" array from list_products, e.g. \"unit-planner\"; must be non-empty."
}
},
"additionalProperties": false
}Summarize how an assessment landed: stats, bands, and outliers. FREE. Reports mean, median, std dev, quartiles, distribution by percentage band, and flagged low outliers. Typical input {"scores": [88, 92, 75, 61, 84], "max_score": 100} returns {"n": 5, "mean": 80.0, "median": 84.0, "std_dev": ..., "q1": ..., "q3": ..., "distribution": {"90-100%": 1, ...}, "outliers_low": [...], "reading": "..."}. Use on a list of scores already earned. Not for the readability of the assessment itself (readability_report). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "no scores"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| scores* | array | Raw scores, one per student; at least 1 value, e.g. [88, 92, 75]. |
| max_score | number | Maximum possible score; must be greater than 0. Default 100. |
{
"type": "object",
"required": [
"scores"
],
"properties": {
"scores": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 1,
"description": "Raw scores, one per student; at least 1 value, e.g. [88, 92, 75]."
},
"max_score": {
"type": "number",
"default": 100,
"description": "Maximum possible score; must be greater than 0. Default 100.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Split a class period into timed segments with sensible weighting. FREE. The opener and closer get less time; core activities get more. Typical input {"minutes": 50, "segments": ["Warm-up", "Direct instruction", "Practice", "Exit ticket"]} returns {"period_minutes": 50, "plan": [{"segment": "Warm-up", "start_min": 0, "duration_min": 8}, ...], "note": "..."}. Use when one fixed class period must be divided into segments. Not for multi-day planning and not for spaced review, which the personal server's spaced_repetition_plan builds. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "need segments and at least 5 minutes"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| minutes* | integer | Length of the class period in minutes; at least 5, e.g. 50. |
| segments* | array | Ordered segment names, e.g. ["Warm-up", "Practice", "Exit ticket"]; at least 1 entry. |
{
"type": "object",
"required": [
"minutes",
"segments"
],
"properties": {
"minutes": {
"type": "integer",
"minimum": 5,
"description": "Length of the class period in minutes; at least 5, e.g. 50."
},
"segments": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Ordered segment names, e.g. [\"Warm-up\", \"Practice\", \"Exit ticket\"]; at least 1 entry."
}
},
"additionalProperties": false
}List the 8 educator products with their included skills. FREE. Takes no arguments. Typical input {} returns a list of 8 product objects, each {"slug": "curriculum-architect-hs", "name": ..., "tagline": ..., "skills": ["Skill A", ...], "free_skill": "Gateway Skill Name"}. Use the returned slug values with get_free_skill, get_full_product, or get_full_skill. Returns metadata only - no persona text and no skill instructions. Use when the caller wants to see what this server covers. Not for keyword search across the whole 138-product catalog, which the catalog server's search_catalog does, and not for instructions the caller can act on (get_free_skill). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Analyze teaching text with Flesch-Kincaid readability and leveling advice. FREE. Typical input {"text": "<passage>", "target_grade": 6} returns {"flesch_kincaid_grade": 8.2, "reading_ease": 62.1, "sentences": N, "words": N, "avg_words_per_sentence": N, "long_sentences_over_25w": N, "polysyllabic_words_sample": [...], "target_grade": 6, "gap": 2.2, "suggestions": ["..."]}. Use on teaching text where the reading level matters. Not for scores students earned (grade_curve) and not for general prose style, which the creator server's analyze_writing covers. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "empty text"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| text* | string | The passage to analyze — at least one full sentence of plain text; must be non-empty. |
| target_grade | integer | Target grade level 1-12; when set, the report adds a gap assessment against it. 0 (default) skips it. |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"minLength": 1,
"description": "The passage to analyze — at least one full sentence of plain text; must be non-empty."
},
"target_grade": {
"type": "integer",
"default": 0,
"description": "Target grade level 1-12; when set, the report adds a gap assessment against it. 0 (default) skips it."
}
},
"additionalProperties": false
}