Server definition
- Hash
- sha256:80bd9daaae5c95a3076c9154e1eacd18c2041ae6e283ebb360356abbf5f3e774
- What it is
- What a remote MCP server returned when asked what it offers: 7 tools
The blob, as servednamed by its sha256
{
"instructions": "Moltline's Educator Toolkit: 8 teaching persona/skill products (curriculum design, classroom management, virtual teaching, accommodations implementation, exam prep, study groups, language learning, parent coaching). Free: list_products, get_free_skill, readability_report. Premium: get_full_product, get_full_skill.",
"tools": [
{
"description": "Load a product's free gateway skill with its complete instructions. FREE.\n\nTypical input {\"slug\": \"curriculum-architect-hs\"} returns {\"slug\": ...,\n\"skill\": \"<skill name>\", \"instructions\": \"<full skill text>\"}.\n\nReturns exactly one skill - the product's free gateway skill - chosen\nautomatically from the slug, with no plan required. Use when the caller\nwants usable instructions immediately. Not for the product's other skills:\nthose are named and need get_full_skill with a skill_name, which requires\na 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"slug": {
"description": "Product slug exactly as returned by list_products, e.g. \"curriculum-architect-hs\"; must be non-empty.",
"minLength": 1,
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_free_skill",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Load one product in full: its persona plus every paid skill. PREMIUM (license).\n\nTypical input {\"slug\": \"curriculum-architect-hs\"} returns {\"slug\": ...,\n\"name\": ..., \"persona\": \"<persona text>\", \"skills\": [{\"name\": ...,\n\"instructions\": ...}, ...], \"free_skill\": {...}}.\n\nReturns persona plus every skill for one product. Use when the caller\nwants the whole product. Not for a single skill (get_full_skill) and not\nfor a free look, which list_products and get_free_skill provide with no\nplan. 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"slug": {
"description": "Product slug exactly as returned by list_products, e.g. \"curriculum-architect-hs\"; must be non-empty.",
"minLength": 1,
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_full_product",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Load one paid skill's complete instructions from a product. PREMIUM (license).\n\nTypical input {\"slug\": \"curriculum-architect-hs\", \"skill_name\":\n\"unit-planner\"} returns {\"slug\": ..., \"skill\": ..., \"instructions\":\n\"<full skill text>\"}.\n\nReturns one named skill, selected by skill_name. Use when the caller wants\none specific paid skill. Not for the free gateway skill, which\nget_free_skill returns with no plan, and not for every skill at once\n(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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"skill_name": {
"description": "Exact skill name as listed in that product's \"skills\" array from list_products, e.g. \"unit-planner\"; must be non-empty.",
"minLength": 1,
"type": "string"
},
"slug": {
"description": "Product slug exactly as returned by list_products, e.g. \"curriculum-architect-hs\"; must be non-empty.",
"minLength": 1,
"type": "string"
}
},
"required": [
"slug",
"skill_name"
],
"type": "object"
},
"name": "get_full_skill",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Summarize how an assessment landed: stats, bands, and outliers. FREE.\n\nReports mean, median, std dev, quartiles, distribution by percentage\nband, and flagged low outliers. Typical input {\"scores\": [88, 92, 75,\n61, 84], \"max_score\": 100} returns {\"n\": 5, \"mean\": 80.0, \"median\":\n84.0, \"std_dev\": ..., \"q1\": ..., \"q3\": ..., \"distribution\":\n{\"90-100%\": 1, ...}, \"outliers_low\": [...], \"reading\": \"...\"}.\n\nUse on a list of scores already earned. Not for the readability of the\nassessment 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"max_score": {
"default": 100,
"description": "Maximum possible score; must be greater than 0. Default 100.",
"exclusiveMinimum": 0,
"type": "number"
},
"scores": {
"description": "Raw scores, one per student; at least 1 value, e.g. [88, 92, 75].",
"items": {
"type": "number"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"scores"
],
"type": "object"
},
"name": "grade_curve",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Split a class period into timed segments with sensible weighting. FREE.\n\nThe opener and closer get less time; core activities get more.\nTypical input {\"minutes\": 50, \"segments\": [\"Warm-up\", \"Direct instruction\",\n\"Practice\", \"Exit ticket\"]} returns {\"period_minutes\": 50, \"plan\":\n[{\"segment\": \"Warm-up\", \"start_min\": 0, \"duration_min\": 8}, ...],\n\"note\": \"...\"}.\n\nUse when one fixed class period must be divided into segments. Not for\nmulti-day planning and not for spaced review, which the personal server's\nspaced_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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"minutes": {
"description": "Length of the class period in minutes; at least 5, e.g. 50.",
"minimum": 5,
"type": "integer"
},
"segments": {
"description": "Ordered segment names, e.g. [\"Warm-up\", \"Practice\", \"Exit ticket\"]; at least 1 entry.",
"items": {
"type": "string"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"minutes",
"segments"
],
"type": "object"
},
"name": "lesson_timer",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "List the 8 educator products with their included skills. FREE.\n\nTakes no arguments. Typical input {} returns a list of 8 product objects, each {\"slug\":\n\"curriculum-architect-hs\", \"name\": ..., \"tagline\": ..., \"skills\": [\"Skill A\",\n...], \"free_skill\": \"Gateway Skill Name\"}. Use the returned slug values\nwith get_free_skill, get_full_product, or get_full_skill.\n\nReturns metadata only - no persona text and no skill instructions. Use\nwhen the caller wants to see what this server covers. Not for keyword\nsearch across the whole 138-product catalog, which the catalog server's\nsearch_catalog does, and not for instructions the caller can act on\n(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.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "list_products",
"outputSchema": {
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Analyze teaching text with Flesch-Kincaid readability and leveling advice. FREE.\n\nTypical input {\"text\": \"<passage>\", \"target_grade\": 6} returns\n{\"flesch_kincaid_grade\": 8.2, \"reading_ease\": 62.1, \"sentences\": N,\n\"words\": N, \"avg_words_per_sentence\": N, \"long_sentences_over_25w\": N,\n\"polysyllabic_words_sample\": [...], \"target_grade\": 6, \"gap\": 2.2,\n\"suggestions\": [\"...\"]}.\n\nUse on teaching text where the reading level matters. Not for scores\nstudents earned (grade_curve) and not for general prose style, which the\ncreator 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"target_grade": {
"default": 0,
"description": "Target grade level 1-12; when set, the report adds a gap assessment against it. 0 (default) skips it.",
"type": "integer"
},
"text": {
"description": "The passage to analyze — at least one full sentence of plain text; must be non-empty.",
"minLength": 1,
"type": "string"
}
},
"required": [
"text"
],
"type": "object"
},
"name": "readability_report",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:80bd9daaae5c95a3076c9154e1eacd18c2041ae6e283ebb360356abbf5f3e774 | sha256sum