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
| Name | Type | Required | Description |
|---|---|---|---|
name | string | yes | Program name. |
type | "template" | "family" | yes | Templates are reused across assignments; family-scoped exists for one family. |
units | Unit[] | yes | Recursive tree. Each unit has name, optional children, optional task spec at the leaf. |
inputVariables | object[] | no | Slots filled at assign time. Same {{input.*}} shape as skills. |
visibility | "private" | "family_scoped" | no | V1 supports family_scoped; cross-family visibility planned. |
Request example
{
"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
{
"result": { "programId": "pg_9a..." }
}program.update
Partial patch with recursive archive-cascade on unit removal.
Scope: program:write
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
programId | string | yes | The program. |
name / units / inputVariables / visibility | various | no | Same shapes as create. |
Request example
{
"method": "tools/call",
"params": {
"name": "program.update",
"arguments": {
"programId": "pg_9a...",
"name": "Bedtime routine ladder (v2)"
}
}
}Returns. { programId, changedFields }
Response example
{
"result": { "programId": "pg_9a...", "changedFields": ["name"] }
}program.delete
Permanently delete a program. Recursive cascade on assigned-tree references.
Scope: program:write
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
programId | string | yes | The program. |
Request example
{
"method": "tools/call",
"params": {
"name": "program.delete",
"arguments": { "programId": "pg_9a..." }
}
}Returns. { deleted: true }
Response example
{
"result": { "deleted": true }
}program.assign
Atomic template-to-assigned tree copy with slot substitution.
Scope: program:write
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
templateId | string | yes | The template (or family program) to assign. |
childId | string | yes | Who gets the assigned tree. |
slots | object | no | Key-value map filling inputVariables. |
Request example
{
"method": "tools/call",
"params": {
"name": "program.assign",
"arguments": {
"templateId": "pg_9a...",
"childId": "a4b9-...",
"slots": { "kid_name": "Maya" }
}
}
}Returns. { assignedProgramId, taskIds: string[] }
Response example
{
"result": {
"assignedProgramId": "ap_3b...",
"taskIds": ["01c0-...", "01c1-..."]
}
}program.list
Paginated list of programs visible to this family.
Scope: program:read
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
type | "template" | "family" | "assigned" | no | Filter by type. |
cursor / limit | various | no | Standard pagination. |
Request example
{
"method": "tools/call",
"params": {
"name": "program.list",
"arguments": { "type": "template", "limit": 50 }
}
}Returns. { items: ProgramSummary[], nextCursor }
Response example
{
"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
| Name | Type | Required | Description |
|---|---|---|---|
programId | string | yes | The program. |
Request example
{
"method": "tools/call",
"params": {
"name": "program.get",
"arguments": { "programId": "pg_9a..." }
}
}Returns. Program (with units tree)
Response example
{
"result": {
"programId": "pg_9a...",
"name": "Bedtime routine ladder",
"type": "template",
"units": [
{ "name": "Brush teeth" },
{ "name": "Read for 10 minutes" }
],
"inputVariables": [{ "name": "kid_name" }]
}
}