Use this when the user wants a printable daily school page from a Canvas snapshot they already have, for example "make today's page from this Canvas JSON".
Returns: one section per child with grades, due today, the next 7 days, missing and late, recent scores, announcements, attendance, changes, attention flags, page_text and html.
Input tips: send date (YYYY-MM-DD), run_at (ISO time) and canvas, the Canvas API JSON with observees [{id, name}], courses [{id, name, teachers, enrollments}], assignments as an object keyed by course id, and announcements. Optional: timezone (IANA name), infinite_campus {students: [...]}, parentsquare_emails for ParentSquare mail, notice_emails for any other school notice, previous (yesterday's full request, same shape) for the changes block, and summaries as up to 3 lines per child name.
Not for: fetching live Canvas data, logging in, storing grades, or answering without a snapshot (ask the user to export one). Never send a token or a password.
View input schema
{
"type": "object",
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "The report day in the school time zone, as YYYY-MM-DD, such as \"2026-10-08\"."
},
"run_at": {
"type": "string",
"format": "date-time",
"minLength": 10,
"maxLength": 40,
"description": "When the snapshots were taken, as an ISO time, such as \"2026-10-08T12:00:00Z\"."
},
"timezone": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "A valid IANA time zone name for the school, such as \"America/Chicago\" (the default)."
},
"canvas": {
"type": "object",
"description": "Canvas API JSON from a parent observer account, such as {\"observees\": [{\"id\": 1, \"name\": \"River Sample\"}], \"courses\": [...], \"assignments\": {\"11\": [...]}, \"announcements\": []}. No token.",
"properties": {
"observees": {
"type": "array",
"maxItems": 8,
"description": "One entry per child: id (integer) and name.",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"required": [
"id",
"name"
]
}
},
"courses": {
"type": "array",
"maxItems": 40,
"description": "Courses with id (integer), name, teachers [{display_name}] and enrollments [{type: \"student\", user_id, computed_current_score, computed_current_grade}].",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"course_code": {
"type": "string"
},
"teachers": {
"type": "array",
"items": {
"type": "object"
}
},
"enrollments": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [
"id",
"enrollments"
]
}
},
"assignments": {
"type": "object",
"description": "Object keyed by course id, each a list of up to 80 assignments with id, name, due_at, points_possible and submission {user_id, workflow_state, score, graded_at, missing, late}.",
"additionalProperties": {
"type": "array",
"maxItems": 80,
"items": {
"type": "object"
}
}
},
"announcements": {
"type": "array",
"maxItems": 80,
"description": "Announcements with id, title, message, posted_at, context_code such as \"course_11\", and author {display_name}.",
"items": {
"type": "object"
}
}
}
},
"infinite_campus": {
"type": "object",
"description": "Optional Infinite Campus grade snapshot. Each student is matched to a Canvas observee by firstName and lastName.",
"properties": {
"students": {
"type": "array",
"maxItems": 8,
"items": {
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"schoolName": {
"type": "string"
},
"grade": {
"type": "string"
},
"courses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"courseName": {
"type": "string"
},
"sectionNumber": {
"type": "string"
},
"progressScore": {
"type": "string"
},
"progressPercent": {
"type": "number"
}
}
}
},
"attendance": {
"type": "object",
"properties": {
"events": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"period": {
"type": "string"
},
"code": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
}
}
}
}
}
}
}
},
"parentsquare_emails": {
"type": "array",
"maxItems": 30,
"items": {
"type": "string",
"maxLength": 12000
},
"description": "ParentSquare notice emails. Plain text with From, Subject and Date headers, a blank line, then the body. Up to 30 emails of 12000 characters each. Optional."
},
"notice_emails": {
"type": "array",
"maxItems": 30,
"items": {
"type": "string",
"maxLength": 12000
},
"description": "Any other school notice emails, same format and limits. Plain text with From, Subject and Date headers, a blank line, then the body. Up to 30 emails of 12000 characters each. Optional."
},
"previous": {
"type": "object",
"description": "Optional: yesterday's full request with its own date, run_at, timezone and canvas (and infinite_campus, if any), for the changes block.",
"properties": {
"date": {
"type": "string"
},
"run_at": {
"type": "string"
},
"timezone": {
"type": "string"
},
"canvas": {
"type": "object"
},
"infinite_campus": {
"type": "object"
}
}
},
"summaries": {
"type": "object",
"description": "Optional lines you wrote, keyed by child name as in observees, 1 to 3 lines of up to 180 characters each. The tool does not call a model.",
"additionalProperties": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"type": "string",
"maxLength": 180
}
}
}
},
"required": [
"date",
"run_at",
"canvas"
],
"additionalProperties": false
}