educator-toolkit-mcp

educator-toolkit-mcp

An MCP toolkit exposing six AI-powered educator-craft tools for reviewing, critiquing, and improving learning artifacts like lessons, curricula, AI tools, learner experiences, assessments, and content accuracy. Deployable via hosted HTTPS, local stdio MCP, or an importable Python kernel.

Category
Visit Server

README

educator-toolkit-mcp

A portable MCP toolkit exposing six educator-craft AI tools for reviewing, critiquing, and improving learning artifacts. Wraps structured AI-powered review tools and exposes them three ways:

  1. Hosted on GCP — call directly over HTTPS (REST) or connect Claude Desktop / Cursor via MCP Streamable HTTP. No install needed.
  2. Local MCP server — clone and run as a subprocess of Claude Desktop over stdio.
  3. Importable Python kernel — embed run_tool directly in your own application.

Option 1: Use the hosted service (no install)

Base URL: https://educator-toolkit-server-h4ldfaoucq-uw.a.run.app

Prototype, no auth. The URL is unauthenticated for prototyping. Don't paste it into public places — anyone with it can call Anthropic on the shared API budget. Real auth arrives with the e-commerce milestone.

REST — POST /v1/{tool_name}

curl -X POST https://educator-toolkit-server-h4ldfaoucq-uw.a.run.app/v1/ai_tool_critique \
  -H "Content-Type: application/json" \
  -d '{
    "question": "Is the input schema asking too much upfront?",
    "artifact": "A form with 8 required fields for a first-time user, no examples.",
    "artifact_kind": "ai_tool_prompt"
  }'

Response shape:

{
  "status": "complete" | "needs_input" | "out_of_lane" | "refused" | "error",
  "assessment": "...",
  "key_points": ["..."],
  "follow_ups": ["..."] | null,
  "suggested_tool": "..." | null,
  "caveats": ["..."] | null,
  "error": null
}

Replace ai_tool_critique with any of the six tool IDs listed in The six tools section below.

Claude Desktop (remote MCP)

In claude_desktop_config.json:

{
  "mcpServers": {
    "educator-toolkit-remote": {
      "url": "https://educator-toolkit-server-h4ldfaoucq-uw.a.run.app/mcp/",
      "transport": "streamable-http"
    }
  }
}

Note: trailing slash on /mcp/ is required (Starlette mount convention).

Restart Claude Desktop. All six tools will be available in the tool picker.

Cursor / Cline / other MCP clients

Same shape — point them at https://educator-toolkit-server-h4ldfaoucq-uw.a.run.app/mcp/ over the Streamable HTTP transport. No headers, no auth.

Health check

curl https://educator-toolkit-server-h4ldfaoucq-uw.a.run.app/health
# {"status":"ok"}

OpenAPI / docs

Auto-generated by FastAPI:

  • Swagger UI: https://educator-toolkit-server-h4ldfaoucq-uw.a.run.app/docs
  • OpenAPI JSON: https://educator-toolkit-server-h4ldfaoucq-uw.a.run.app/openapi.json

Option 2: Run locally as a Claude Desktop subprocess

For when you want to use your own Anthropic API key or run without Cloud Run.

git clone https://github.com/TyRobbins/educator-toolkit-mcp.git
cd educator-toolkit-mcp
uv sync --all-packages --all-groups

export ANTHROPIC_API_KEY=sk-ant-...

In claude_desktop_config.json (Windows path; macOS path differs):

{
  "mcpServers": {
    "educator-toolkit-local": {
      "command": "uv",
      "args": [
        "run",
        "--directory", "C:\\Users\\YOU\\path\\to\\educator-toolkit-mcp",
        "educator-toolkit-mcp"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "sk-ant-..."
      }
    }
  }
}

The local server uses MCP over stdio (Claude Desktop launches it as a child process). The hosted version uses MCP over HTTP.


Option 3: Import the kernel directly

import asyncio
from educator_toolkit_kernel import AnthropicClient, run_tool
from educator_toolkit_kernel.schema import ToolInput

client = AnthropicClient()  # reads ANTHROPIC_API_KEY from env

response = asyncio.run(run_tool(
    tool_id="ai_tool_critique",
    input=ToolInput(
        question="Is the input schema asking too much upfront?",
        artifact="A form with 8 required fields for a first-time user, no examples.",
        artifact_kind="ai_tool_prompt",
    ),
    client=client,
))
print(response.status)
print(response.assessment)
print(response.key_points)

The six tools

Tool ID What it does Use when
educational_design_review Review a learning artifact for instructional-design quality — objectives, scaffolding, Bloom's taxonomy, cognitive load You want a learning-science review of a lesson, module, or activity
curriculum_coherence_review Review a curriculum or module sequence for coherence, redundancy, and gaps across phases You have 2+ modules and want sequencing feedback
ai_tool_critique Critique an AI tool's prompt, input schema, and output usefulness for its intended learner You have one specific AI tool (prompt + schema) and want a critique
student_experience_simulation Simulate what a realistic learner would do, feel, and produce when using an artifact You want a persona-grounded prediction of learner behavior
assessment_design_review Review or design assessments: cases, rubrics, formative checks, capstone scenarios You have an assessment artifact (rubric, case, exam) or want one designed
sme_review Review content for accuracy, terminology consistency, and fidelity to a supplied source You supply BOTH a content artifact AND source material for comparison

Worked example

An instructional designer has built an AI tool that helps learners write stakeholder communication plans. The tool has a long intake form. They want to know if the schema is too heavy.

ToolInput sent:

{
  "question": "Is the input schema asking too much upfront?",
  "artifact": "A form with 8 required fields for a first-time user, no examples.",
  "artifact_kind": "ai_tool_prompt"
}

ToolResponse returned:

{
  "status": "complete",
  "assessment": "Eight required fields with no examples is excessive for first-time users and will cause high abandonment. Core fixes: reduce required fields to 3-4, add placeholder examples to every field, use progressive disclosure for optional context, and sequence by cognitive load.",
  "key_points": [
    "8 required fields exceeds the friction threshold for first-time users — expect abandonment",
    "Zero examples or placeholder text creates blank-canvas paralysis across all fields",
    "All-required structure signals rigidity and prevents progressive onboarding",
    "Fix: cut to 3-4 required fields, make the rest optional with a clear rationale",
    "Fix: add one inline example per field showing what a good answer looks like",
    "Fix: consider a two-step form — generate output first, refine with more input second"
  ],
  "follow_ups": [
    "Can you share the actual field labels? Some fields may be combinable or eliminable once we see them.",
    "Does the underlying AI prompt use all 8 fields, or are some fields only used for logging/routing?"
  ],
  "caveats": [
    "Artifact was described, not shown — specific field label critique requires the actual schema",
    "Whether the 8 fields are pedagogically correct is out of lane for this review (see educational_design_review)"
  ],
  "error": null
}

How it works

Each tool makes one Sonnet call — no coordinator, no sub-tool loop. The caller (Claude Desktop, a REST client, or your own app) decides which tool to route to and composes results from multiple tools if needed.

  • Stateless: each call is independent. The caller maintains context across follow-up rounds.
  • Schema gate: every response is validated against ToolResponse before returning. If the model omits the JSON envelope, the prose is wrapped verbatim.
  • One model per tool: all six tools currently use claude-sonnet-4-6.

Quality

Validated against a 12-fixture golden eval set (2 per tool, LLM-judge rubric, 4 dimensions x 1-5 scale). Current average: 4.90/5.00. See evals/.

CI gate: score must stay >= 3.5.

Schema validity gate: uv run python -m evals.runners.schema_validity — all 12 fixtures must return parseable ToolResponse JSON.


Architecture

┌─────────────────────────────────────────┐
│  Hosts: Claude Desktop, Cursor, scripts │
└────────────┬──────────────┬─────────────┘
             │              │
       stdio MCP        HTTP / MCP
             │              │
┌────────────▼──┐   ┌───────▼───────────────┐
│  packages/mcp │   │ packages/server       │
│  (local sub-  │   │ (Cloud Run)           │
│   process)    │   │ /v1/{tool_name}       │
│               │   │ /mcp/                 │
└────────────┬──┘   └───────┬───────────────┘
             │              │
             └──────┬───────┘
                    │
            ┌───────▼────────────────────┐
            │ packages/kernel            │
            │ - schema (ToolInput,       │
            │   ToolResponse)            │
            │ - registry (TOOLS)         │
            │ - runner (run_tool)        │
            │ - prompts (6 tool prompts) │
            └────────────────────────────┘

Development

git clone https://github.com/TyRobbins/educator-toolkit-mcp.git
cd educator-toolkit-mcp
uv sync --all-packages --all-groups
uv run pytest packages/

# Lint + type-check
uv run ruff check .
uv run mypy packages/kernel/src packages/mcp/src packages/server/src

# Evals (require ANTHROPIC_API_KEY)
uv run python -m evals.runners.schema_validity
uv run python -m evals.runners.judge_rubric

# Run the HTTP server locally
ANTHROPIC_API_KEY=sk-ant-... uv run educator-toolkit-server
# -> http://localhost:8080/health

Deploy

gcloud builds submit --config cloudbuild.yaml --project ou-executive-persuasion

Builds the Dockerfile, pushes to GCR, deploys to Cloud Run (region us-west1, public, no auth). The ANTHROPIC_API_KEY is read from Secret Manager (entry anthropic-api-key).


License

TBD pending IP review.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured