# Moltline Educator Toolkit

> 8 curriculum, classroom, accommodations and exam-prep skill products. 5 of 7 free.

- name: com.moltlinestudio/educator
- version: 1.2.0
- connection class: R0 (autonomous)
- trust: 85/100 flags: duplicate-repo
- quality: 91/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.moltlinestudio%2Feducator
- tools: https://api.protogrid.dev/v1/servers/com.moltlinestudio%2Feducator/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "educator": {
      "type": "http",
      "url": "https://mcp.moltlinestudio.com/educator"
    }
  }
}
```


## Trust

- hygiene: 60
- liveness: 100
- freshness: 85
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-99% ~updated-42d-ago -duplicate-repo(22 names)
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 91/100 (strong)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 7 of 7 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,198 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 7, about 2,198 tokens to load them all
- tool set hash: b8ad3677a6ac5e7fa4fc724de055f104
- badge: [![protogrid quality](https://protogrid.dev/badge/com.moltlinestudio/educator.svg)](https://protogrid.dev/servers/com.moltlinestudio/educator)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.moltlinestudio.com/educator (streamable-http, auth none, reachable true, uptime30d 0.99159664)

## Packages

_none_

## Tools (7)

- `get_free_skill`: 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.
- `get_full_product`: 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.
- `get_full_skill`: 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.
- `grade_curve`: 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.
- `lesson_timer`: 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.
- `list_products`: 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.
- `readability_report`: 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.
