Reference

Program

All MCP tools for programs (curricula, ladders, project-based work).

Coming soon. See Program.

program.createSafe to retry

Author a program template or family-scoped program. Recursive unit tree.

Scope: program:write

Parameters

NameTypeRequiredDescription
namestringyesProgram name.
type"template" | "family"yesTemplates are reused across assignments; family-scoped exists for one family.
unitsUnit[]yesRecursive tree. Each unit has name, optional children, optional task spec at the leaf.
inputVariablesobject[]noSlots filled at assign time. Same {{input.*}} shape as skills.
visibility"private" | "family_scoped"noV1 supports family_scoped; cross-family visibility planned.

Request example

JSON
{
  "method": "tools/call",
  "params": {
    "name": "program.create",
    "arguments": {
      "name": "Bedtime routine ladder",
      "type": "template",
      "units": [
        { "name": "Brush teeth" },
        { "name": "Read for 10 minutes" }
      ],
      "inputVariables": [{ "name": "kid_name" }]
    }
  }
}

Returns. { programId }

Response example

JSON
{
  "result": { "programId": "pg_9a..." }
}

program.update

Partial patch with recursive archive-cascade on unit removal.

Scope: program:write

Parameters

NameTypeRequiredDescription
programIdstringyesThe program.
name / units / inputVariables / visibilityvariousnoSame shapes as create.

Request example

JSON
{
  "method": "tools/call",
  "params": {
    "name": "program.update",
    "arguments": {
      "programId": "pg_9a...",
      "name": "Bedtime routine ladder (v2)"
    }
  }
}

Returns. { programId, changedFields }

Response example

JSON
{
  "result": { "programId": "pg_9a...", "changedFields": ["name"] }
}

program.delete

Permanently delete a program. Recursive cascade on assigned-tree references.

Scope: program:write

Parameters

NameTypeRequiredDescription
programIdstringyesThe program.

Request example

JSON
{
  "method": "tools/call",
  "params": {
    "name": "program.delete",
    "arguments": { "programId": "pg_9a..." }
  }
}

Returns. { deleted: true }

Response example

JSON
{
  "result": { "deleted": true }
}

program.assign

Atomic template-to-assigned tree copy with slot substitution.

Scope: program:write

Parameters

NameTypeRequiredDescription
templateIdstringyesThe template (or family program) to assign.
childIdstringyesWho gets the assigned tree.
slotsobjectnoKey-value map filling inputVariables.

Request example

JSON
{
  "method": "tools/call",
  "params": {
    "name": "program.assign",
    "arguments": {
      "templateId": "pg_9a...",
      "childId": "a4b9-...",
      "slots": { "kid_name": "Maya" }
    }
  }
}

Returns. { assignedProgramId, taskIds: string[] }

Response example

JSON
{
  "result": {
    "assignedProgramId": "ap_3b...",
    "taskIds": ["01c0-...", "01c1-..."]
  }
}

program.list

Paginated list of programs visible to this family.

Scope: program:read

Parameters

NameTypeRequiredDescription
type"template" | "family" | "assigned"noFilter by type.
cursor / limitvariousnoStandard pagination.

Request example

JSON
{
  "method": "tools/call",
  "params": {
    "name": "program.list",
    "arguments": { "type": "template", "limit": 50 }
  }
}

Returns. { items: ProgramSummary[], nextCursor }

Response example

JSON
{
  "result": {
    "items": [
      { "programId": "pg_9a...", "name": "Bedtime routine ladder", "type": "template" }
    ],
    "nextCursor": null
  }
}

program.get

Full program with recursive unit tree.

Scope: program:read

Parameters

NameTypeRequiredDescription
programIdstringyesThe program.

Request example

JSON
{
  "method": "tools/call",
  "params": {
    "name": "program.get",
    "arguments": { "programId": "pg_9a..." }
  }
}

Returns. Program (with units tree)

Response example

JSON
{
  "result": {
    "programId": "pg_9a...",
    "name": "Bedtime routine ladder",
    "type": "template",
    "units": [
      { "name": "Brush teeth" },
      { "name": "Read for 10 minutes" }
    ],
    "inputVariables": [{ "name": "kid_name" }]
  }
}

See also