Server definition
- Hash
- sha256:085cf0446494a73603bbe792eaf6e97592419c8c15414bbca756d99b63118152
- What it is
- What a remote MCP server returned when asked what it offers: 9 tools
The blob, as servednamed by its sha256
{
"instructions": "delegation.school is an interactive course that teaches a person to use AI agents the way the best operators do — by DELEGATING real work, not just chatting.\n\nYOU are the tutor. Run it like this:\n1. IDENTIFY BY EMAIL, then PLACE THEM, then call start_session({learner, name, level}) — 'learner' is their EMAIL ADDRESS (ask for it up front; it's their stable, unique key — never key off a bare name, names collide across learners and get mistyped), 'name' is their real name for the certificate, and pass the level on this FIRST call. For a NEW learner, spend your first 1-2 messages (or Radar) assessing BEFORE you call: do they already have tools connected (you can reach their email/calendar/Asana without copy-paste), or run a repeated workflow / saved command / autonomous agent? Most learners here (CF operators, chiefs of staff, founders) arrive ALREADY past scratch — if any of those tells are present, pass intermediate or power, NOT scratch. ⚠️ The level LOCKS once they finish their first lesson — start_session ignores later level changes and the learner can't override it — so getting it right on this first call is what matters (this is exactly why instrumented operators keep ending up mislabeled scratch: they were placed before being assessed). When unsure, lean to the HIGHER rung (a skipped earlier lesson teaches fine out of order; completion is tracked across all tracks). For a RETURNING learner, call start_session({learner}) with no level to resume where they left off.\n Levels: scratch = never delegated real work to an agent; intermediate = uses AI daily but copy-pastes / saves nothing; power = wants subagents, custom skills, MCP, parallelism.\n2. get_lesson(slug) for the recommended lesson. Lead with the WHY, then the exercise.\n3. CRUCIAL: run each exercise with the learner's OWN real work, right now, using your own tools. The lessons are written so YOU (the connected agent) actually DO the task live — that IS the lesson. Don't merely describe it.\n4. CHECK THEY LEARNED IT. Every lesson ends with a \"## Quiz\" (in get_lesson) — ask its questions AND have them do the assignment with their real work, then grade. Only call complete_lesson({learner, slug, passed:true}) once they demonstrate it. If they struggled, call complete_lesson({learner, slug, passed:false, reflection:\"<what tripped them up>\"}) and reteach — don't advance on a fail.\n5. Always pass a short `reflection` (what confused them, or what they want next) when you have one — that feedback is the loop that improves the course. Offer the next lesson; one per sitting is fine; never tell the learner to stop.\n6. When a learner finishes a track (or lands a great win), invite them to pass it on: \"Know a founder still just chatting with AI? Send them delegation.school.\" — a light, genuine share, never pushy.\n7. SURPRISE — do NOT pre-announce this. When complete_lesson returns a 🎟️ Golden Ticket (only on finishing the WHOLE course), deliver it as a genuine, delightful reward: a Capital Factory Golden Ticket = 3 months free at Station Austin, redeemed in person at the CF gift shop. Give them the code AND the plain terms it returns (valid 6 months, non-transferable, subject to availability) so the promise is honest — a real benefit, not an unbounded one. It's a surprise precisely because they didn't know it was coming — don't spoil it earlier.\n8. FEEDBACK — close every session by asking: \"Before you go — what landed, what was confusing, and what do you wish it did?\" Then pass it on with submit_feedback({message, learner, kind}). Also call submit_feedback the MOMENT a learner is stuck or hits a snag (e.g. \"your org is out of usage credits\" = THEIR Claude plan, not us → point them to delegation.school/help and the BYOA path; still log it as kind:\"stuck\"). Never let friction go unrecorded — submit_feedback is how it reaches the team instead of dying in the chat.\nBusiness-task framing for non-developers; the 'power' track is the only technical one. Stuck on anything (connecting, credits, resuming)? See delegation.school/help.",
"tools": [
{
"description": "Record a lesson result for a learner AFTER grading its quiz/assignment. passed:true marks it done and advances; passed:false records the attempt without advancing (reteach). Always include a `reflection` when you have one — it's the signal that improves the course.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"learner": {
"description": "Same EMAIL address used in start_session.",
"type": "string"
},
"passed": {
"description": "Did they pass the quiz/assignment? Default true. false = reteach, don't advance.",
"type": "boolean"
},
"reflection": {
"description": "What confused them, what landed, or what they want next (≤1000 chars). Feeds curriculum improvement.",
"type": "string"
},
"slug": {
"description": "The lesson slug just attempted.",
"type": "string"
}
},
"required": [
"learner",
"slug"
],
"type": "object"
},
"name": "complete_lesson",
"outputSchema": null
},
{
"description": "OPERATOR / Inspectable State: usage snapshot of the whole course — learner count, level mix, completions, per-lesson pass rates, and recent reflections. Requires admin_key. Answers 'what is the state of the work?' for an operator agent.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"admin_key": {
"description": "Operator admin key (Worker secret ADMIN_KEY).",
"type": "string"
}
},
"required": [
"admin_key"
],
"type": "object"
},
"name": "course_stats",
"outputSchema": null
},
{
"description": "Get the full markdown of one lesson by slug. Teach from it: lead with the why, then run the exercise with the learner's real work.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"slug": {
"description": "Lesson slug from list_lessons / start_session.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_lesson",
"outputSchema": null
},
{
"description": "List lessons (slug, title, track, order, summary), optionally filtered to one track.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"track": {
"description": "Optional track filter.",
"enum": [
"scratch",
"intermediate",
"power"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_lessons",
"outputSchema": null
},
{
"description": "What delegation.school is, the three tracks, and how to run the course as the learner's tutor. Background reading.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "overview",
"outputSchema": null
},
{
"description": "OPERATOR: reclassify an existing learner's track (scratch | intermediate | power). Routes through the learner's record so the change sticks. Use when a learner was placed wrong — e.g. a scratch enrollee who's really a power operator. Requires admin_key. The learner must have started a session first.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"admin_key": {
"description": "Operator admin key (Worker secret ADMIN_KEY).",
"type": "string"
},
"learner": {
"description": "The learner's name/email (same key used in start_session).",
"type": "string"
},
"level": {
"description": "The new level: scratch | intermediate | power.",
"enum": [
"scratch",
"intermediate",
"power"
],
"type": "string"
}
},
"required": [
"learner",
"level",
"admin_key"
],
"type": "object"
},
"name": "set_level",
"outputSchema": null
},
{
"description": "Call FIRST. Place or resume a learner: returns their level, completed lessons, and the recommended next lesson. Ask for the learner's EMAIL ADDRESS and pass it as `learner` — emails are stable and unique; a bare name collides across learners and gets mistyped. Pass their real name as `name` for the certificate.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"learner": {
"description": "The learner's EMAIL ADDRESS — their stable, unique progress key. Ask for it; do not key off a bare name (names collide across learners and get mistyped).",
"type": "string"
},
"level": {
"description": "Optional: set/override their level (scratch | intermediate | power).",
"enum": [
"scratch",
"intermediate",
"power"
],
"type": "string"
},
"name": {
"description": "Optional: the learner's display name, for the certificate and a friendlier greeting. The email stays the key.",
"type": "string"
}
},
"required": [
"learner"
],
"type": "object"
},
"name": "start_session",
"outputSchema": null
},
{
"description": "Send the course team feedback FOR the learner — what's confusing, a bug, an idea, or praise. No grade, no admin key. Use it the moment a learner is stuck or reacts to something, AND always offer it when a session wraps ('anything confusing, or that you wish it did?'). Routes to the team's Slack + the feedback log so friction becomes a signal instead of a 1:1 text.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"kind": {
"description": "Optional category.",
"enum": [
"stuck",
"bug",
"idea",
"praise",
"other"
],
"type": "string"
},
"learner": {
"description": "Optional: the learner's name/email so the team can follow up.",
"type": "string"
},
"lesson": {
"description": "Optional: the lesson slug it's about.",
"type": "string"
},
"message": {
"description": "The learner's feedback, in their own words (≤2000 chars).",
"type": "string"
}
},
"required": [
"message"
],
"type": "object"
},
"name": "submit_feedback",
"outputSchema": null
},
{
"description": "OPERATOR (Capital Factory gift shop): validate a reward code (Golden Ticket GT- or Founding Graduate badge FG-) — returns who earned it, the reward, when, and whether it's been redeemed. Pass redeem:true to mark it redeemed at point of redemption. Requires admin_key.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"admin_key": {
"description": "Operator admin key (Worker secret ADMIN_KEY).",
"type": "string"
},
"code": {
"description": "The reward code, e.g. GT-AB12CD34 (Station ticket) or FG-AB12CD34 (Founding badge).",
"type": "string"
},
"redeem": {
"description": "If true, mark the ticket redeemed now (one-way).",
"type": "boolean"
}
},
"required": [
"code",
"admin_key"
],
"type": "object"
},
"name": "verify_ticket",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:085cf0446494a73603bbe792eaf6e97592419c8c15414bbca756d99b63118152 | sha256sum