addrbookFor publishers
← The evidence ledger

Evidence row 293037

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 580c897f-5f66-4fb5-bafc-722b43621e9f
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
f2fc56fd4d7c313c433dfe1ba8cd35abe8404cc952fb25e46efdb12fe0580cce
Leaf
0x9a33e684e70da8c268d8bc8d13a80adcd4e5ac57fa13963ab1f359b0b8562571

What was observed

{
  "count": 77,
  "tools": [
    {
      "description": "Adds students to a class roster from individual entries with names in First Last order and optional emails. Existing roster students are matched rather than duplicated. Emails support assignment notifications and are never returned. Roster additions can be removed.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "classId": {
            "description": "Class id from list_classes.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "students": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "email": {
                  "format": "email",
                  "maxLength": 254,
                  "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                  "type": "string"
                },
                "name": {
                  "description": "First Last.",
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object"
            },
            "maxItems": 200,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "classId",
          "students"
        ],
        "type": "object"
      },
      "name": "add_students"
    },
    {
      "description": "Marks scored essays approved (the teacher stands behind the score), or unapproves them with approve: false. Accepts essay handles, or all: true for every scored essay not yet approved. Only approved essays go to Google Classroom. The same handles with approve: false reverse approval.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "all": {
            "default": false,
            "type": "boolean"
          },
          "approve": {
            "default": true,
            "type": "boolean"
          },
          "essayHandles": {
            "items": {
              "description": "Essay handle from get_grading_results, e.g. E-3b91c0.",
              "pattern": "^E-[a-f0-9]{6}$",
              "type": "string"
            },
            "maxItems": 200,
            "type": "array"
          },
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId",
          "all",
          "approve"
        ],
        "type": "object"
      },
      "name": "approve_essays"
    },
    {
      "description": "Archives an unpublished draft (it leaves the coursework list; nothing is deleted) or restores an archived draft with archived: false. Published assignments are archived on the website.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "archived": {
            "default": true,
            "description": "false restores an archived draft.",
            "type": "boolean"
          },
          "assignmentId": {
            "description": "Assignment id from list_coursework.",
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "assignmentId",
          "archived"
        ],
        "type": "object"
      },
      "name": "archive_assignment"
    },
    {
      "description": "Archives a class the teacher created (it leaves the class list; nothing is deleted), or restores an archived one with archived: false. Co-taught classes can only be archived by their owner.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "archived": {
            "default": true,
            "description": "false restores an archived class.",
            "type": "boolean"
          },
          "classId": {
            "description": "Class id from list_classes.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "classId",
          "archived"
        ],
        "type": "object"
      },
      "name": "archive_class"
    },
    {
      "description": "Applies the owner-bound answer-key correction preview identified by previewId and rescores affected attempts in the background, subject to explicit teacher approval. Rejects scores changed since the preview.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "previewId": {
            "description": "The previewId from the matching prepare_ tool, after the teacher said yes to that preview.",
            "maxLength": 200,
            "minLength": 20,
            "type": "string"
          }
        },
        "required": [
          "previewId"
        ],
        "type": "object"
      },
      "name": "confirm_correct_answer_key"
    },
    {
      "description": "Publishes exactly the owner-bound preview identified by previewId, subject to explicit teacher approval of that specific preview. Returns each class's student link and a message to post.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "previewId": {
            "description": "The previewId from the matching prepare_ tool, after the teacher said yes to that preview.",
            "maxLength": 200,
            "minLength": 20,
            "type": "string"
          }
        },
        "required": [
          "previewId"
        ],
        "type": "object"
      },
      "name": "confirm_publish_assignment"
    },
    {
      "description": "Exports exactly the grades in the owner-bound previewId, subject to explicit teacher approval of that preview. Rejects session scores changed since the preview.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "previewId": {
            "description": "The previewId from the matching prepare_ tool, after the teacher said yes to that preview.",
            "maxLength": 200,
            "minLength": 20,
            "type": "string"
          }
        },
        "required": [
          "previewId"
        ],
        "type": "object"
      },
      "name": "confirm_push_grades_to_google_classroom"
    },
    {
      "description": "Releases results exactly as specified by the owner-bound previewId, subject to explicit teacher approval of that specific preview. Release cannot be reversed.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "previewId": {
            "description": "The previewId from the matching prepare_ tool, after the teacher said yes to that preview.",
            "maxLength": 200,
            "minLength": 20,
            "type": "string"
          }
        },
        "required": [
          "previewId"
        ],
        "type": "object"
      },
      "name": "confirm_release_results"
    },
    {
      "description": "Applies the owner-bound publication preview identified by previewId, subject to explicit teacher approval of that specific preview.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "previewId": {
            "description": "The previewId from the matching prepare_ tool, after the teacher said yes to that preview.",
            "maxLength": 200,
            "minLength": 20,
            "type": "string"
          }
        },
        "required": [
          "previewId"
        ],
        "type": "object"
      },
      "name": "confirm_update_publication"
    },
    {
      "description": "Builds an assignment draft from multiple-choice questions picked by question-bank mcq: id and/or drawn from units and topics (skipping already assigned questions), Fiveable FRQ or SAQ ids, readings with optional checks, or a diagnostic. Settings start from the first class's defaults. AP Calculus drafts require courseVariant or target classes sharing one course. Returns the draft id and review link. Drafts never use an included assignment slot.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "availableAt": {
            "description": "When it opens, ISO with offset.",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
            "type": "string"
          },
          "classes": {
            "description": "Classes to target, each with an optional due date.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "classId": {
                  "description": "Class id from list_classes.",
                  "pattern": "^[a-f\\d]{24}$",
                  "type": "string"
                },
                "dueAt": {
                  "description": "ISO date-time with timezone offset.",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                  "type": "string"
                }
              },
              "required": [
                "classId"
              ],
              "type": "object"
            },
            "maxItems": 12,
            "type": "array"
          },
          "courseVariant": {
            "description": "AP Calculus only: ap-calc-ab or ap-calc-bc. Omit to use the course the target classes share.",
            "enum": [
              "ap-calc-ab",
              "ap-calc-bc"
            ],
            "type": "string"
          },
          "dueAt": {
            "description": "Default due time for every class.",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
            "type": "string"
          },
          "instructions": {
            "maxLength": 5000,
            "type": "string"
          },
          "requestId": {
            "description": "A unique id you generate for this action. Reuse it only when retrying the same action.",
            "pattern": "^[\\w-]{8,128}$",
            "type": "string"
          },
          "resultRelease": {
            "description": "When students see results.",
            "enum": [
              "immediate",
              "manual",
              "scheduled"
            ],
            "type": "string"
          },
          "sections": {
            "items": {
              "oneOf": [
                {
                  "additionalProperties": false,
                  "properties": {
                    "avoidRepeats": {
                      "default": true,
                      "description": "When drawing from units, skip questions this teacher already published.",
                      "type": "boolean"
                    },
                    "questionCount": {
                      "description": "Questions to draw from units, on top of any questionIds. Omit when only using questionIds.",
                      "maximum": 100,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "questionIds": {
                      "description": "Specific questions to include, as mcq: ids from search_question_bank. They come first, exactly as picked; questions drawn from units never repeat them. Omit units to use only these.",
                      "items": {
                        "pattern": "^(mcq:)?[\\w-]+$",
                        "type": "string"
                      },
                      "maxItems": 100,
                      "minItems": 1,
                      "type": "array"
                    },
                    "skillId": {
                      "anyOf": [
                        {
                          "maxLength": 200,
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Optional CED skill id to narrow to."
                    },
                    "style": {
                      "default": "exam",
                      "description": "exam = AP-style (with stimulus sets where the exam has them); comprehension or vocabulary checks.",
                      "enum": [
                        "exam",
                        "comprehension",
                        "vocabulary"
                      ],
                      "type": "string"
                    },
                    "timeLimitMinutes": {
                      "anyOf": [
                        {
                          "maximum": 300,
                          "minimum": 1,
                          "type": "integer"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Omit for untimed."
                    },
                    "type": {
                      "const": "multiple_choice",
                      "type": "string"
                    },
                    "units": {
                      "description": "Units to draw questions from. Omit when only using questionIds.",
                      "items": {
                        "additionalProperties": false,
                        "properties": {
                          "questionCount": {
                            "description": "Omit to split the total evenly.",
                            "maximum": 100,
                            "minimum": 0,
                            "type": "integer"
                          },
                          "topicIds": {
                            "description": "Topic ids to narrow to.",
                            "items": {
                              "maxLength": 200,
                              "minLength": 1,
                              "type": "string"
                            },
                            "maxItems": 60,
                            "type": "array"
                          },
                          "unitId": {
                            "anyOf": [
                              {
                                "maxLength": 200,
                                "minLength": 1,
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Unit id from get_subject_outline; null = whole course."
                          }
                        },
                        "required": [
                          "unitId"
                        ],
                        "type": "object"
                      },
                      "maxItems": 20,
                      "type": "array"
                    }
                  },
                  "required": [
                    "type",
                    "style",
                    "avoidRepeats"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "focus": {
                      "const": "introduction",
                      "description": "AP World, APUSH or AP Euro DBQ or LEQ only: students write just the introduction (contextualization and a thesis), scored on the AP rubric's Thesis/Claim and Contextualization points (2 points). Omit for the whole essay. Can't be combined with parts.",
                      "type": "string"
                    },
                    "parts": {
                      "description": "Part letters students answer (e.g. [\"A\", \"B\"]), scored on those parts' AP rubric points. Omit for the whole question. Questions scored as a whole (essays, AP Stats, world languages) can't be split.",
                      "items": {
                        "pattern": "^[A-Za-z]$",
                        "type": "string"
                      },
                      "maxItems": 12,
                      "minItems": 1,
                      "type": "array"
                    },
                    "questionId": {
                      "description": "An frq: or saq: id from search_question_bank.",
                      "pattern": "^frq:[\\w-]+$|^saq:[\\w-]+(:[A-Za-z])?$",
                      "type": "string"
                    },
                    "type": {
                      "const": "free_response",
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "questionId"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "readingQuestions": {
                      "default": false,
                      "description": "Add reading-check questions (study guides and AMSCO guided notes).",
                      "type": "boolean"
                    },
                    "resourceId": {
                      "description": "A resource id from list_teaching_resources.",
                      "maxLength": 300,
                      "minLength": 1,
                      "type": "string"
                    },
                    "type": {
                      "const": "reading",
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "resourceId",
                    "readingQuestions"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "diagnostic",
                      "type": "string"
                    },
                    "unitIds": {
                      "description": "Unit ids from get_subject_outline.",
                      "items": {
                        "maxLength": 200,
                        "minLength": 1,
                        "type": "string"
                      },
                      "maxItems": 15,
                      "minItems": 1,
                      "type": "array"
                    },
                    "unitLabels": {
                      "items": {
                        "maxLength": 200,
                        "type": "string"
                      },
                      "maxItems": 15,
                      "type": "array"
                    }
                  },
                  "required": [
                    "type",
                    "unitIds"
                  ],
                  "type": "object"
                }
              ]
            },
            "maxItems": 20,
            "minItems": 1,
            "type": "array"
          },
          "settings": {
            "additionalProperties": false,
            "properties": {
              "durationMinutes": {
                "anyOf": [
                  {
                    "maximum": 300,
                    "minimum": 1,
                    "type": "integer"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "maxAttempts": {
                "maximum": 1000,
                "minimum": 1,
                "type": "integer"
              },
              "notifications": {
                "additionalProperties": false,
                "properties": {
                  "dueReminder": {
                    "type": "boolean"
                  },
                  "onPublish": {
                    "type": "boolean"
                  },
                  "onResultsRelease": {
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "resultRelease": {
                "description": "When students see results.",
                "enum": [
                  "immediate",
                  "manual",
                  "scheduled"
                ],
                "type": "string"
              },
              "scoringMode": {
                "description": "Who scores free responses.",
                "enum": [
                  "ai",
                  "self",
                  "teacher"
                ],
                "type": "string"
              },
              "timerMode": {
                "enum": [
                  "strict",
                  "flexible",
                  "none"
                ],
                "type": "string"
              }
            },
            "type": "object"
          },
          "subjectSlug": {
            "description": "Subject, e.g. apush or ap-bio.",
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          },
          "title": {
            "maxLength": 160,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "title",
          "subjectSlug",
          "sections",
          "requestId"
        ],
        "type": "object"
      },
      "name": "create_assignment_draft"
    },
    {
      "description": "Creates one or more classes in the teacher's workspace. Students join through an assignment's class link or a teacher-managed roster; there are no class codes. Created classes can be archived.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "classes": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "courseVariant": {
                  "description": "AP Calculus only: ap-calc-ab or ap-calc-bc.",
                  "enum": [
                    "ap-calc-ab",
                    "ap-calc-bc"
                  ],
                  "type": "string"
                },
                "name": {
                  "description": "e.g. \"Period 3 APUSH\".",
                  "maxLength": 100,
                  "minLength": 1,
                  "type": "string"
                },
                "subjectSlug": {
                  "description": "Subject, e.g. apush or ap-bio.",
                  "maxLength": 100,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "name",
                "subjectSlug"
              ],
              "type": "object"
            },
            "maxItems": 8,
            "minItems": 1,
            "type": "array"
          },
          "requestId": {
            "description": "A unique id you generate for this action. Reuse it only when retrying the same action.",
            "pattern": "^[\\w-]{8,128}$",
            "type": "string"
          }
        },
        "required": [
          "classes",
          "requestId"
        ],
        "type": "object"
      },
      "name": "create_classes"
    },
    {
      "description": "Creates a workspace grading session for finished student work, including paper, Google Docs or an AP Classroom export. Accepts a Fiveable FRQ or SAQ id, or the teacher's own question in prompt. A session uses an included assignment when grading starts unless the account has unlimited assignments. Returns the new session id.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "fiveableQuestionId": {
            "description": "frq:… or saq:… from search_question_bank, or frq: plus the FRQ id from get_frq.",
            "maxLength": 120,
            "type": "string"
          },
          "prompt": {
            "additionalProperties": false,
            "description": "The teacher's own question, when not a Fiveable one.",
            "properties": {
              "frqType": {
                "description": "Question type as Fiveable names it, e.g. \"Long Essay Question (LEQ)\". Omit to get the list.",
                "maxLength": 120,
                "type": "string"
              },
              "images": {
                "description": "Visuals the question depends on.",
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "data": {
                      "description": "Base64 image, no data: prefix.",
                      "maxLength": 6000000,
                      "minLength": 1,
                      "type": "string"
                    },
                    "mediaType": {
                      "enum": [
                        "image/jpeg",
                        "image/png",
                        "image/webp"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "mediaType"
                  ],
                  "type": "object"
                },
                "maxItems": 4,
                "type": "array"
              },
              "text": {
                "description": "The question exactly as the teacher assigned it.",
                "maxLength": 20000,
                "minLength": 20,
                "type": "string"
              }
            },
            "required": [
              "text"
            ],
            "type": "object"
          },
          "requestId": {
            "description": "A unique id you generate for this action. Reuse it only when retrying the same action.",
            "pattern": "^[\\w-]{8,128}$",
            "type": "string"
          },
          "subjectSlug": {
            "description": "e.g. apush or ap-bio.",
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          },
          "title": {
            "maxLength": 200,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug",
          "requestId"
        ],
        "type": "object"
      },
      "name": "create_grading_session"
    },
    {
      "description": "Copies a teacher-owned assignment, including archived or prior-year work, into a new draft with the same questions and settings. The resulting draft can be retargeted or archived.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework.",
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          },
          "requestId": {
            "description": "A unique id you generate for this action. Reuse it only when retrying the same action.",
            "pattern": "^[\\w-]{8,128}$",
            "type": "string"
          }
        },
        "required": [
          "assignmentId",
          "requestId"
        ],
        "type": "object"
      },
      "name": "duplicate_assignment"
    },
    {
      "description": "Creates a Google Sheet of the session's results in the teacher's own Drive (one row per student, scores by part, feedback links) and returns its link. The rows never pass through chat. Needs Google connected with Sheets access; otherwise returns the link to connect it.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId"
        ],
        "type": "object"
      },
      "name": "export_grading_results"
    },
    {
      "description": "Returns one assignment's sections, question counts, scoring and timing settings, published classes, due dates and student links. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework.",
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "assignmentId"
        ],
        "type": "object"
      },
      "name": "get_assignment"
    },
    {
      "description": "Per-question results for one assignment: percent correct and how many students picked each answer choice (identifying which distractors drew responses), plus FRQ part-by-part full-credit rates. Use it for 'which questions went worst?'. Moderate cost.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework.",
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "assignmentId"
        ],
        "type": "object"
      },
      "name": "get_assignment_question_breakdown"
    },
    {
      "description": "Where each student is on one assignment: in progress, submitted, scored, or waiting for review, with their score when results are available. Students appear by handle and short name. Use it for 'who hasn't finished?' or 'how did period 5 do?'. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework.",
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "assignmentId"
        ],
        "type": "object"
      },
      "name": "get_assignment_status"
    },
    {
      "description": "Reads bounded pages from a prepared official Fiveable PDF, returning page citations, extracted text and actual page images for formulas and diagrams. Image-only pages have no guessed transcription. Unavailable artifacts return the approved PDF link. This read never starts processing.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "cheatsheetId": {
            "pattern": "^cs_[a-f0-9]{24}$",
            "type": "string"
          },
          "limit": {
            "default": 1,
            "maximum": 3,
            "minimum": 1,
            "type": "integer"
          },
          "page": {
            "default": 1,
            "maximum": 32,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "cheatsheetId",
          "page",
          "limit"
        ],
        "type": "object"
      },
      "name": "get_cheatsheet"
    },
    {
      "description": "One class in the teacher's workspace: subject, roster (students by handle and short name), the class's assignment defaults, and the student links of assignments currently open to it. Students join a class by opening one of those links; there are no class codes. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "classId": {
            "description": "Class id from list_classes.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "classId"
        ],
        "type": "object"
      },
      "name": "get_class"
    },
    {
      "description": "How a class (or all the teacher's classes) is doing on Fiveable assignments: accuracy and FRQ points with change over time, each assignment's turn-in rate and average, and each student's average with flags (missing work, dropping, improving), weakest first. Scope by class, subject, assignment or time window. Moderate cost.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Limit to one assignment (id from list_coursework).",
            "maxLength": 100,
            "type": "string"
          },
          "classId": {
            "description": "Limit to one class (id from list_classes).",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "days": {
            "default": 0,
            "description": "Look back this many days. 0 means this school year.",
            "maximum": 3650,
            "minimum": 0,
            "type": "integer"
          },
          "subjectSlug": {
            "description": "Limit to one subject, e.g. apush or ap-bio.",
            "maxLength": 100,
            "type": "string"
          }
        },
        "required": [
          "days"
        ],
        "type": "object"
      },
      "name": "get_class_insights"
    },
    {
      "description": "Returns a small set of Fiveable study-guide passages relevant to one question. Suitable for narrow explanations, research questions and checking student notes. One call consumes one full-content preview for a caller without existing access.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "guideSlug": {
            "description": "Optional exact guide reference from get_subject_outline or search_content.",
            "type": "string"
          },
          "intent": {
            "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics.",
            "enum": [
              "explain",
              "quiz",
              "notes",
              "frq",
              "research"
            ],
            "type": "string"
          },
          "maximumSections": {
            "default": 3,
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "maximumTokens": {
            "default": 1800,
            "maximum": 4000,
            "minimum": 250,
            "type": "integer"
          },
          "query": {
            "description": "The concept or question the student needs help with.",
            "minLength": 2,
            "type": "string"
          },
          "subjectSlug": {
            "description": "Fiveable subject slug, e.g. \"ap-bio\". A course name such as \"AP Biology\" also resolves.",
            "minLength": 2,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug",
          "query",
          "maximumSections",
          "maximumTokens"
        ],
        "type": "object"
      },
      "name": "get_content_sections"
    },
    {
      "description": "One essay's score and feedback part by part, what the teacher changed, and whether it's approved. Set includeText only when the teacher wants to read the response itself.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "essayHandle": {
            "description": "Essay handle from get_grading_results, e.g. E-3b91c0.",
            "pattern": "^E-[a-f0-9]{6}$",
            "type": "string"
          },
          "includeText": {
            "default": false,
            "type": "boolean"
          },
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId",
          "essayHandle",
          "includeText"
        ],
        "type": "object"
      },
      "name": "get_essay_feedback"
    },
    {
      "description": "Find Fiveable exam formats, access requirements and website links without questions or answer keys. Choose a subject for version choices; add unitNumber to verify that unit's current bank and standard format.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "subjectSlug": {
            "maxLength": 100,
            "pattern": "^[a-z0-9-]+$",
            "type": "string"
          },
          "unitNumber": {
            "maximum": 99,
            "minimum": 1,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "get_exam_options"
    },
    {
      "description": "Returns one full, original Fiveable FRQ prompt: stimulus, background and every lettered part with its point value. The returned prompt is eligible for Fiveable's saved scoring workflow after the student writes a response. It consumes one full-content preview unless existing access covers this FRQ. Moderate cost — 1-4k tokens.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "frqId": {
            "description": "FRQ id from list_frqs.",
            "minLength": 1,
            "type": "string"
          },
          "intent": {
            "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics.",
            "enum": [
              "explain",
              "quiz",
              "notes",
              "frq",
              "research"
            ],
            "type": "string"
          }
        },
        "required": [
          "frqId"
        ],
        "type": "object"
      },
      "name": "get_frq"
    },
    {
      "description": "Returns grading counts (scored, remaining, failed and approved) and background-job status (running, done or stopped). Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId"
        ],
        "type": "object"
      },
      "name": "get_grading_progress"
    },
    {
      "description": "Class results for a grading session: average, score distribution, how the class did on each rubric part, common gaps, and a table of essays (handle, short name, score, status, what to check). Filter to the ones that need review, drafts, approved or failed. Scores marked AI draft aren't approved yet.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "filter": {
            "default": "all",
            "enum": [
              "all",
              "needs_review",
              "draft",
              "approved",
              "failed"
            ],
            "type": "string"
          },
          "limit": {
            "default": 50,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "maximum": 9007199254740991,
            "minimum": 0,
            "type": "integer"
          },
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId",
          "filter",
          "offset",
          "limit"
        ],
        "type": "object"
      },
      "name": "get_grading_results"
    },
    {
      "description": "Returns the session's Fiveable scoring guidelines point by point on the AP rubric for its question type. If absent, starts rubric generation and returns pending status; generation takes about a minute. Rubrics use the website's grading pipeline. Cheap once written.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId"
        ],
        "type": "object"
      },
      "name": "get_grading_rubric"
    },
    {
      "description": "Returns reading-check questions and keys for one Fiveable guide: the curated set when available, otherwise generated questions (slower). Accepts a guide id. Suitable for exit tickets, reading quizzes and guided reading handouts.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "guideId": {
            "description": "Study guide document id, or study-guide: resource id from list_teaching_resources.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "guideId"
        ],
        "type": "object"
      },
      "name": "get_guide_reading_questions"
    },
    {
      "description": "AMSCO textbook guided-notes prompts with answer keys for one chapter, for subjects that have AMSCO notes (for example AP US History). Without a chapter it lists the chapters. Use for guided notes handouts and reading checks. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "chapterSlug": {
            "description": "Chapter slug from the chapter list, e.g. chapter-1-1.",
            "maxLength": 100,
            "type": "string"
          },
          "subjectSlug": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug"
        ],
        "type": "object"
      },
      "name": "get_guided_notes"
    },
    {
      "description": "Returns the full definition, context and related terms for one AP key term. Use when a student asks \"what does X mean\" for AP vocabulary. Cheap — usually under 1k tokens.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "intent": {
            "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics.",
            "enum": [
              "explain",
              "quiz",
              "notes",
              "frq",
              "research"
            ],
            "type": "string"
          },
          "subjectSlug": {
            "description": "Fiveable subject slug, e.g. \"ap-bio\" or \"apush\". The course name or a close approximation such as \"ap-biology\" also resolves. Use list_subjects to find it.",
            "minLength": 2,
            "type": "string"
          },
          "termSlug": {
            "description": "Key term slug or the term itself, e.g. \"natural-selection\".",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug",
          "termSlug"
        ],
        "type": "object"
      },
      "name": "get_key_term"
    },
    {
      "description": "Orientation for the signed-in teacher's Fiveable workspace: classes, coursework awaiting review or due this week, included assignments remaining, and configured Google connections. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "get_my_teacher_workspace"
    },
    {
      "description": "Returns up to 40 bank questions with answer keys, explanations, complete stimuli and Fiveable attribution for classroom materials. Stimuli are required context for their questions; answer keys are teacher-only material. Counts against the content budget.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "purpose": {
            "description": "What the teacher is making. Used only to improve Fiveable; changes nothing in the result.",
            "enum": [
              "slides",
              "worksheet",
              "game",
              "notes",
              "quiz",
              "other"
            ],
            "type": "string"
          },
          "questionIds": {
            "items": {
              "description": "Question id from search_question_bank, e.g. mcq:64f… or stimulus-set:64f….",
              "pattern": "^(mcq|stimulus-set|frq):[\\w-]+$|^saq:[\\w-]+:[A-Za-z]$",
              "type": "string"
            },
            "maxItems": 40,
            "minItems": 1,
            "type": "array"
          },
          "subjectSlug": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug",
          "questionIds"
        ],
        "type": "object"
      },
      "name": "get_questions_for_materials"
    },
    {
      "description": "Ranks topics, units, CED skills and FRQ rubric rows where a class lost the most points on Fiveable assignments. Optional filters cover class, subject, assignment and time window. Moderate cost.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Limit to one assignment (id from list_coursework).",
            "maxLength": 100,
            "type": "string"
          },
          "classId": {
            "description": "Limit to one class (id from list_classes).",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "days": {
            "default": 0,
            "description": "Look back this many days. 0 means this school year.",
            "maximum": 3650,
            "minimum": 0,
            "type": "integer"
          },
          "subjectSlug": {
            "description": "Limit to one subject, e.g. apush or ap-bio.",
            "maxLength": 100,
            "type": "string"
          }
        },
        "required": [
          "days"
        ],
        "type": "object"
      },
      "name": "get_reteach_gaps"
    },
    {
      "description": "Class progress on AP course skills (for example causation or contextualization): each skill's verdict (solid, improving, stuck, developing, building), average, trend, the students who need support most, and the units to revisit. Says so when evidence is limited instead of guessing. Works best scoped to one subject. Moderate cost.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Limit to one assignment (id from list_coursework).",
            "maxLength": 100,
            "type": "string"
          },
          "classId": {
            "description": "Limit to one class (id from list_classes).",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "days": {
            "default": 0,
            "description": "Look back this many days. 0 means this school year.",
            "maximum": 3650,
            "minimum": 0,
            "type": "integer"
          },
          "subjectSlug": {
            "description": "Limit to one subject, e.g. apush or ap-bio.",
            "maxLength": 100,
            "type": "string"
          }
        },
        "required": [
          "days"
        ],
        "type": "object"
      },
      "name": "get_skill_insights"
    },
    {
      "description": "Returns one student's Fiveable work: average, missing work, assignment scores, weakest units and topics, and skill progress. Accepts an anonymous student handle (S-…). Suitable for conference preparation, parent notes and individual reteaching. Moderate cost.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Limit to one assignment (id from list_coursework).",
            "maxLength": 100,
            "type": "string"
          },
          "classId": {
            "description": "Limit to one class (id from list_classes).",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "days": {
            "default": 0,
            "description": "Look back this many days. 0 means this school year.",
            "maximum": 3650,
            "minimum": 0,
            "type": "integer"
          },
          "handle": {
            "description": "The student's handle, e.g. S-4f2a1c.",
            "pattern": "^S-[a-f0-9]{6}$",
            "type": "string"
          },
          "subjectSlug": {
            "description": "Limit to one subject, e.g. apush or ap-bio.",
            "maxLength": 100,
            "type": "string"
          }
        },
        "required": [
          "handle",
          "days"
        ],
        "type": "object"
      },
      "name": "get_student_insights"
    },
    {
      "description": "Returns the full text of one Fiveable AP study guide as Markdown. Accepts the exact canonical guide reference or a close approximation of its title. Suitable when a student asks to learn or review a topic. It consumes one full-content preview for a caller unless existing access covers this subject and feature. Expensive — a full guide can be 3-8k tokens.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "guideSlug": {
            "description": "Canonical guide reference from get_subject_outline, content slug, document id, or title, e.g. \"/ap-bio/unit-2/cell-structure/study-guide/abc123\" or \"cell-structure\".",
            "minLength": 2,
            "type": "string"
          },
          "intent": {
            "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics.",
            "enum": [
              "explain",
              "quiz",
              "notes",
              "frq",
              "research"
            ],
            "type": "string"
          },
          "subjectSlug": {
            "description": "Fiveable subject slug, e.g. \"ap-bio\" or \"apush\". The course name or a close approximation such as \"ap-biology\" also resolves. Use list_subjects to find it.",
            "minLength": 2,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug",
          "guideSlug"
        ],
        "type": "object"
      },
      "name": "get_study_guide"
    },
    {
      "description": "Returns the full unit and topic outline for one AP subject, including every study guide slug in each unit. Provides the course map for study planning and individual guide retrieval. Moderate cost — roughly 2-5k tokens depending on subject size.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "intent": {
            "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics.",
            "enum": [
              "explain",
              "quiz",
              "notes",
              "frq",
              "research"
            ],
            "type": "string"
          },
          "subjectSlug": {
            "description": "Fiveable subject slug, e.g. \"ap-bio\" or \"apush\". The course name or a close approximation such as \"ap-biology\" also resolves. Use list_subjects to find it.",
            "minLength": 2,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug"
        ],
        "type": "object"
      },
      "name": "get_subject_outline"
    },
    {
      "description": "One student's submission on a Fiveable assignment: each section's AI and teacher scores, the FRQ rubric breakdown, overrides and feedback, and whether the student can see results yet. includeText requires that the teacher wants to read the student's responses; it also returns student drawings and handwritten pages as images.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework or list_submissions_to_review.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "includeText": {
            "default": false,
            "type": "boolean"
          },
          "submissionId": {
            "description": "Submission id from list_submissions_to_review.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "assignmentId",
          "submissionId",
          "includeText"
        ],
        "type": "object"
      },
      "name": "get_submission"
    },
    {
      "description": "Returns the overview page for one unit of an AP course: what it covers, how it is weighted on the exam, its topics and study plan. Suitable when a student is reviewing a whole unit. Moderate cost — roughly 1-3k tokens.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "intent": {
            "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics.",
            "enum": [
              "explain",
              "quiz",
              "notes",
              "frq",
              "research"
            ],
            "type": "string"
          },
          "subjectSlug": {
            "description": "Fiveable subject slug, e.g. \"ap-bio\" or \"apush\". The course name or a close approximation such as \"ap-biology\" also resolves. Use list_subjects to find it.",
            "minLength": 2,
            "type": "string"
          },
          "unitSlug": {
            "description": "Unit slug from get_subject_outline, e.g. \"unit-1\".",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug",
          "unitSlug"
        ],
        "type": "object"
      },
      "name": "get_unit_overview"
    },
    {
      "description": "Splits teacher-supplied PDFs or Word stacks into one essay per student, including AP Classroom 'FRQ Response PDFs, By Student Page Break' exports. Photos support one essay per image and are read by Fiveable. Accepts up to three ChatGPT attached uploads of 25 MB each, or up to three base64 files totaling about 3 MB. Returns counts and warnings only. Long PDFs can take up to a minute.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "files": {
            "default": [],
            "items": {
              "additionalProperties": false,
              "properties": {
                "dataBase64": {
                  "maxLength": 4200000,
                  "minLength": 1,
                  "type": "string"
                },
                "fileName": {
                  "maxLength": 200,
                  "minLength": 1,
                  "type": "string"
                },
                "mediaType": {
                  "description": "e.g. application/pdf, image/jpeg.",
                  "maxLength": 120,
                  "type": "string"
                }
              },
              "required": [
                "fileName",
                "mediaType",
                "dataBase64"
              ],
              "type": "object"
            },
            "maxItems": 3,
            "type": "array"
          },
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "uploads": {
            "default": [],
            "description": "Files the teacher attached in ChatGPT, passed by reference.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "download_url": {
                  "maxLength": 4000,
                  "minLength": 1,
                  "type": "string"
                },
                "file_id": {
                  "maxLength": 200,
                  "minLength": 1,
                  "type": "string"
                },
                "file_name": {
                  "maxLength": 200,
                  "type": "string"
                },
                "mime_type": {
                  "maxLength": 120,
                  "type": "string"
                }
              },
              "required": [
                "download_url",
                "file_id"
              ],
              "type": "object"
            },
            "maxItems": 3,
            "type": "array"
          }
        },
        "required": [
          "sessionId",
          "files",
          "uploads"
        ],
        "type": "object"
      },
      "name": "import_essays_from_files"
    },
    {
      "description": "Adds selected Google Classroom turn-in handles to a grading session. Reads authorized Google Docs directly; optional teacher-provided text supports other files or missing Google access. Names come from the Classroom roster. Existing session submissions are skipped. Records the source Classroom assignment for subsequent approved-grade export. Returns counts only.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "courseId": {
            "description": "Id from list_google_classroom_work.",
            "pattern": "^[\\w-]{1,64}$",
            "type": "string"
          },
          "courseWorkId": {
            "description": "Id from list_google_classroom_work.",
            "pattern": "^[\\w-]{1,64}$",
            "type": "string"
          },
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "turnIns": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "handle": {
                  "description": "Turn-in handle from list_google_classroom_work.",
                  "pattern": "^T-[a-f\\d]{6}$",
                  "type": "string"
                },
                "text": {
                  "description": "Optional teacher-provided work. Omit to read the authorized Classroom file through Fiveable.",
                  "maxLength": 50000,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "handle"
              ],
              "type": "object"
            },
            "maxItems": 150,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "sessionId",
          "courseId",
          "courseWorkId",
          "turnIns"
        ],
        "type": "object"
      },
      "name": "import_essays_from_google_classroom"
    },
    {
      "description": "Adds individual student responses supplied as pasted, downloaded or transcribed text, with each student's name as written. Photo transcriptions require transcribedFromPhotos and explicit teacherConfirmedTranscription approval of the transcription. Returns counts only.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "essays": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "studentName": {
                  "description": "As written on the work. Omit if unknown.",
                  "maxLength": 120,
                  "type": "string"
                },
                "text": {
                  "maxLength": 60000,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "text"
              ],
              "type": "object"
            },
            "maxItems": 100,
            "minItems": 1,
            "type": "array"
          },
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "teacherConfirmedTranscription": {
            "default": false,
            "type": "boolean"
          },
          "transcribedFromPhotos": {
            "default": false,
            "type": "boolean"
          }
        },
        "required": [
          "sessionId",
          "essays",
          "transcribedFromPhotos",
          "teacherConfirmedTranscription"
        ],
        "type": "object"
      },
      "name": "import_essays_from_text"
    },
    {
      "description": "Links a grading session to a workspace class so results feed class insights. Exact roster-name matches link automatically; explicit essay-handle to student-handle matches resolve remaining essays. Returns unmatched essays. A null classId removes the class link.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "classId": {
            "anyOf": [
              {
                "pattern": "^[a-f\\d]{24}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Class id from list_classes, or null to unlink."
          },
          "matches": {
            "default": [],
            "items": {
              "additionalProperties": false,
              "properties": {
                "essayHandle": {
                  "description": "Essay handle from get_grading_results, e.g. E-3b91c0.",
                  "pattern": "^E-[a-f0-9]{6}$",
                  "type": "string"
                },
                "studentHandle": {
                  "pattern": "^S-[a-f0-9]{6}$",
                  "type": "string"
                }
              },
              "required": [
                "essayHandle",
                "studentHandle"
              ],
              "type": "object"
            },
            "maxItems": 200,
            "type": "array"
          },
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId",
          "classId",
          "matches"
        ],
        "type": "object"
      },
      "name": "link_grading_to_class"
    },
    {
      "description": "Find approved Fiveable course and unit PDFs, including course variants, academic year when known, source links and readable-artifact readiness. Does not include user galleries or generated personal visuals.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "courseVariant": {
            "maxLength": 100,
            "minLength": 2,
            "type": "string"
          },
          "cursor": {
            "pattern": "^cs_[a-f0-9]{24}$",
            "type": "string"
          },
          "limit": {
            "default": 10,
            "maximum": 25,
            "minimum": 1,
            "type": "integer"
          },
          "subjectSlug": {
            "maxLength": 100,
            "minLength": 2,
            "type": "string"
          },
          "unitNumber": {
            "maximum": 30,
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "limit"
        ],
        "type": "object"
      },
      "name": "list_cheatsheets"
    },
    {
      "description": "Lists the signed-in teacher's classes with subject, student count and class id. Class names such as 'period 3' can be resolved to their ids. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "includeArchived": {
            "default": false,
            "description": "List archived classes instead of active ones.",
            "type": "boolean"
          }
        },
        "required": [
          "includeArchived"
        ],
        "type": "object"
      },
      "name": "list_classes"
    },
    {
      "description": "Lists the teacher's assignments and grading sessions from their workspace ledger: status, class, due date, roster-based turn-in counts, review counts and class average. The active status filter selects work currently open to students. Optional filters cover class, subject and status. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "classId": {
            "description": "Class id from list_classes.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "cursor": {
            "description": "Cursor from a previous page.",
            "maxLength": 200,
            "type": "string"
          },
          "limit": {
            "default": 20,
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "status": {
            "default": "all",
            "description": "Ledger status filter. needs_review shows work waiting for the teacher.",
            "enum": [
              "all",
              "draft",
              "scheduled",
              "active",
              "needs_review",
              "closed",
              "handed_back",
              "archived"
            ],
            "type": "string"
          },
          "subjectSlug": {
            "description": "Limit to one subject, e.g. ap-bio or apush.",
            "maxLength": 100,
            "type": "string"
          }
        },
        "required": [
          "status",
          "limit"
        ],
        "type": "object"
      },
      "name": "list_coursework"
    },
    {
      "description": "Lists Fiveable's free-response (FRQ) practice prompts for an AP subject, optionally filtered by FRQ type, unit, and excluded IDs. Results use stable ID order; unchanged filters continue pagination. Returns prompt ids and summaries rather than full prompts. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "courseVariant": {
            "description": "AP Calculus only (subject ap-calc): 'ab' hides BC-only units, topics and FRQs; 'bc' includes them. Pass the course of the class or assignment draft you are building for ('ab' for ap-calc-ab, 'bc' for ap-calc-bc).",
            "enum": [
              "ab",
              "bc"
            ],
            "type": "string"
          },
          "cursor": {
            "pattern": "^[A-Za-z0-9_-]{1,512}$",
            "type": "string"
          },
          "excludeIds": {
            "items": {
              "maxLength": 100,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 100,
            "type": "array"
          },
          "frqType": {
            "description": "Optional FRQ type filter, e.g. \"DBQ\", \"LEQ\", \"SAQ\". Varies by subject.",
            "type": "string"
          },
          "intent": {
            "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics.",
            "enum": [
              "explain",
              "quiz",
              "notes",
              "frq",
              "research"
            ],
            "type": "string"
          },
          "limit": {
            "default": 10,
            "description": "Maximum prompts to list.",
            "maximum": 25,
            "minimum": 1,
            "type": "integer"
          },
          "subjectSlug": {
            "description": "Fiveable subject slug, e.g. \"ap-bio\". A course name such as \"AP Biology\" also resolves.",
            "minLength": 2,
            "type": "string"
          },
          "unitId": {
            "description": "Unit ID or public unit slug from get_subject_outline.",
            "maxLength": 100,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug",
          "limit"
        ],
        "type": "object"
      },
      "name": "list_frqs"
    },
    {
      "description": "Walks the teacher's Google Classroom: with no ids, their courses; with a course id, its assignments; with a course and assignment id, who turned it in, each with a handle (T-…) and a link to the turned-in file. Use it to grade typed work collected in Classroom. Needs the teacher's Google Classroom connection.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "courseId": {
            "description": "Id from list_google_classroom_work.",
            "pattern": "^[\\w-]{1,64}$",
            "type": "string"
          },
          "courseWorkId": {
            "description": "Id from list_google_classroom_work.",
            "pattern": "^[\\w-]{1,64}$",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_google_classroom_work"
    },
    {
      "description": "The teacher's grading sessions for work done outside Fiveable (stacks of essays graded in the workspace), newest first, with essay, scored and approved counts. Use to resume a stack. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 20,
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "limit"
        ],
        "type": "object"
      },
      "name": "list_grading_sessions"
    },
    {
      "description": "Lists the key vocabulary terms for an AP subject, paginated alphabetically. Suitable for building flashcards or checking what vocabulary a student should know; results include stable term slugs for full definitions. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "intent": {
            "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics.",
            "enum": [
              "explain",
              "quiz",
              "notes",
              "frq",
              "research"
            ],
            "type": "string"
          },
          "letter": {
            "default": "ALL",
            "description": "Filter to terms starting with one letter, or \"ALL\" for every term.",
            "type": "string"
          },
          "limit": {
            "default": 25,
            "description": "Terms per page.",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "page": {
            "default": 1,
            "description": "1-indexed page number.",
            "maximum": 9007199254740991,
            "minimum": 1,
            "type": "integer"
          },
          "subjectSlug": {
            "description": "Fiveable subject slug, e.g. \"ap-bio\" or \"apush\". The course name or a close approximation such as \"ap-biology\" also resolves. Use list_subjects to find it.",
            "minLength": 2,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug",
          "page",
          "limit",
          "letter"
        ],
        "type": "object"
      },
      "name": "list_key_terms"
    },
    {
      "description": "Lists every AP subject Fiveable covers, with its canonical subject slug and flags for which features exist for that subject (practice questions, key terms, score calculator). Suitable when a subject slug is not already known. Cheap — roughly 1-2k tokens.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "intent": {
            "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics.",
            "enum": [
              "explain",
              "quiz",
              "notes",
              "frq",
              "research"
            ],
            "type": "string"
          },
          "search": {
            "description": "Optional case-insensitive filter on subject name, e.g. \"bio\" or \"history\".",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_subjects"
    },
    {
      "description": "The teacher's review queue, as on the website inbox: submissions whose free responses need a teacher score or a look at the AI score, imported essays awaiting approval, and assignments ready to hand back. Each row includes the identifiers and review operation for its item. Filter by subject or assignment. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework or list_submissions_to_review.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "cursor": {
            "maxLength": 500,
            "type": "string"
          },
          "filter": {
            "default": "all",
            "enum": [
              "all",
              "review",
              "handback"
            ],
            "type": "string"
          },
          "limit": {
            "default": 25,
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "subjectSlug": {
            "maxLength": 100,
            "type": "string"
          }
        },
        "required": [
          "filter",
          "limit"
        ],
        "type": "object"
      },
      "name": "list_submissions_to_review"
    },
    {
      "description": "Lists assignment reading resources for one subject: study guides, unit reviews, AMSCO guided notes, key terms and cheatsheets, with resource ids suitable for reading sections. Optional filters cover kind, unit and words. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "kind": {
            "enum": [
              "study-guide",
              "unit-review",
              "guided-notes",
              "key-terms",
              "cheatsheet",
              "visual-cheatsheet"
            ],
            "type": "string"
          },
          "limit": {
            "default": 25,
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "maximum": 9007199254740991,
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "maxLength": 200,
            "type": "string"
          },
          "subjectSlug": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          },
          "unit": {
            "description": "Exact unit label from the result's unit list.",
            "maxLength": 200,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug",
          "offset",
          "limit"
        ],
        "type": "object"
      },
      "name": "list_teaching_resources"
    },
    {
      "description": "Changes the points on one rubric part of a scored essay, with the teacher's reason. The change is logged and the total recalculated, as on the website. Reversal restores the previous part points.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "essayHandle": {
            "description": "Essay handle from get_grading_results, e.g. E-3b91c0.",
            "pattern": "^E-[a-f0-9]{6}$",
            "type": "string"
          },
          "part": {
            "description": "Rubric part as shown in get_essay_feedback, e.g. \"A\" or \"Thesis\".",
            "maxLength": 20,
            "minLength": 1,
            "type": "string"
          },
          "points": {
            "maximum": 100,
            "minimum": 0,
            "type": "number"
          },
          "reason": {
            "default": "",
            "maxLength": 2000,
            "type": "string"
          },
          "reasonCategory": {
            "default": "teacher-judgment",
            "enum": [
              "evidence",
              "reasoning",
              "accuracy",
              "rubric",
              "teacher-judgment",
              "other"
            ],
            "type": "string"
          },
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId",
          "essayHandle",
          "part",
          "points",
          "reasonCategory",
          "reason"
        ],
        "type": "object"
      },
      "name": "override_essay_score"
    },
    {
      "description": "Changes the points on one rubric part of an AI-scored FRQ in a submission, with the teacher's reason, as on the website. The section's score is recalculated. Reversal restores the previous part points.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework or list_submissions_to_review.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "itemId": {
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          },
          "part": {
            "maxLength": 20,
            "minLength": 1,
            "type": "string"
          },
          "points": {
            "maximum": 100,
            "minimum": 0,
            "type": "number"
          },
          "reason": {
            "default": "",
            "maxLength": 2000,
            "type": "string"
          },
          "reasonCategory": {
            "default": "teacher-judgment",
            "enum": [
              "evidence",
              "reasoning",
              "accuracy",
              "rubric",
              "teacher-judgment",
              "other"
            ],
            "type": "string"
          },
          "submissionId": {
            "description": "Submission id from list_submissions_to_review.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "assignmentId",
          "submissionId",
          "itemId",
          "part",
          "points",
          "reasonCategory",
          "reason"
        ],
        "type": "object"
      },
      "name": "override_submission_part"
    },
    {
      "description": "Creates an owner-bound confirmation preview for correcting a published multiple-choice key, including how many students gain or lose points. Accepts assignment section and question numbers. Keys and scores remain unchanged until approved preview execution.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "correctAnswers": {
            "description": "The right answer letters, e.g. [\"C\"].",
            "items": {
              "pattern": "^[A-Ha-h]$",
              "type": "string"
            },
            "maxItems": 8,
            "minItems": 1,
            "type": "array"
          },
          "explanation": {
            "description": "Why this answer is right, in the teacher's words; defaults to the current explanation.",
            "maxLength": 5000,
            "type": "string"
          },
          "note": {
            "description": "A note for Fiveable with the shared fix.",
            "maxLength": 2000,
            "type": "string"
          },
          "questionNumber": {
            "description": "Question number within that section.",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "sectionNumber": {
            "description": "1 for the assignment's first section.",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "shareCorrection": {
            "default": false,
            "description": "Also send the fix to Fiveable so the question is corrected for everyone.",
            "type": "boolean"
          }
        },
        "required": [
          "assignmentId",
          "sectionNumber",
          "questionNumber",
          "correctAnswers",
          "shareCorrection"
        ],
        "type": "object"
      },
      "name": "prepare_correct_answer_key"
    },
    {
      "description": "Creates an owner-bound confirmation preview for publishing a draft or republishing with new dates: classes, openings, due dates in the teacher's time zone, result visibility and student-facing changes. Publication remains unchanged. Execution requires approval of this specific preview. With no classes, anyoneWithLink must be true for a public link.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "anyoneWithLink": {
            "default": false,
            "type": "boolean"
          },
          "assignmentId": {
            "description": "Assignment id from list_coursework.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "classes": {
            "default": [],
            "items": {
              "additionalProperties": false,
              "properties": {
                "classId": {
                  "description": "Class id from list_classes.",
                  "pattern": "^[a-f\\d]{24}$",
                  "type": "string"
                },
                "dueAt": {
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                  "type": "string"
                },
                "opensAt": {
                  "description": "When students can start; omit for now.",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                  "type": "string"
                },
                "resultsReleaseAt": {
                  "description": "Only for scheduled release.",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                  "type": "string"
                }
              },
              "required": [
                "classId"
              ],
              "type": "object"
            },
            "maxItems": 12,
            "type": "array"
          },
          "dueAt": {
            "description": "Due time for the anyone-with-link publish.",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
            "type": "string"
          },
          "resultRelease": {
            "description": "Defaults to the draft's setting.",
            "enum": [
              "immediate",
              "manual",
              "scheduled"
            ],
            "type": "string"
          },
          "timeZone": {
            "default": "America/New_York",
            "description": "The teacher's IANA time zone, e.g. America/Chicago, so the preview shows their local times.",
            "maxLength": 64,
            "type": "string"
          }
        },
        "required": [
          "assignmentId",
          "classes",
          "anyoneWithLink",
          "timeZone"
        ],
        "type": "object"
      },
      "name": "prepare_publish_assignment"
    },
    {
      "description": "Creates an owner-bound confirmation preview for exporting approved grading-session scores to the source Google Classroom assignment. Includes included/excluded counts and the point scale. No grades are sent until approved preview execution.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId"
        ],
        "type": "object"
      },
      "name": "prepare_push_grades_to_google_classroom"
    },
    {
      "description": "Creates an owner-bound confirmation preview for releasing assignment scores and feedback to every class, including counts of unscored responses. Release status remains unchanged until approved preview execution. A release cannot be taken back.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "assignmentId"
        ],
        "type": "object"
      },
      "name": "prepare_release_results"
    },
    {
      "description": "Creates an owner-bound confirmation preview for closing or reopening a published assignment, or changing class open/due dates. Links and submissions remain intact. Publication remains unchanged until approved preview execution.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "action": {
            "enum": [
              "close",
              "reopen",
              "change_dates"
            ],
            "type": "string"
          },
          "assignmentId": {
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "changes": {
            "default": [],
            "description": "For change_dates only.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "classId": {
                  "anyOf": [
                    {
                      "pattern": "^[a-f\\d]{24}$",
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Class id, or null for the anyone-with-the-link publication."
                },
                "dueAt": {
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                  "type": "string"
                },
                "opensAt": {
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                  "type": "string"
                }
              },
              "required": [
                "classId"
              ],
              "type": "object"
            },
            "maxItems": 12,
            "type": "array"
          },
          "timeZone": {
            "default": "America/New_York",
            "description": "The teacher's IANA time zone, e.g. America/Chicago, so the preview shows their local times.",
            "maxLength": 64,
            "type": "string"
          }
        },
        "required": [
          "assignmentId",
          "action",
          "changes",
          "timeZone"
        ],
        "type": "object"
      },
      "name": "prepare_update_publication"
    },
    {
      "description": "What a student will see when they open the assignment: instructions and each section in order. Answers are hidden, as they are for students. Diagnostics can't be previewed. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework.",
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "assignmentId"
        ],
        "type": "object"
      },
      "name": "preview_assignment_as_student"
    },
    {
      "description": "Returns one bank question with its stimulus, choices, marked correct answer and explanation. Stimulus sets include all linked questions and keys. Answer keys are teacher-only material. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "questionId": {
            "description": "Question id from search_question_bank, e.g. mcq:64f… or stimulus-set:64f….",
            "pattern": "^(mcq|stimulus-set|frq):[\\w-]+$|^saq:[\\w-]+:[A-Za-z]$",
            "type": "string"
          },
          "subjectSlug": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug",
          "questionId"
        ],
        "type": "object"
      },
      "name": "preview_question"
    },
    {
      "description": "Removes students by handle from a class roster while preserving their past work in the teacher's results. Returns an undoId valid for exact restoration within seven days.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "classId": {
            "description": "Class id from list_classes.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "handles": {
            "items": {
              "description": "Student handle from get_class, e.g. S-4f2a1c.",
              "pattern": "^S-[a-f0-9]{6}$",
              "type": "string"
            },
            "maxItems": 200,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "classId",
          "handles"
        ],
        "type": "object"
      },
      "name": "remove_students"
    },
    {
      "description": "Submits a caller-requested content issue to Fiveable support, which may lead to support follow-up. Requires explicit confirmReport approval. The description contains the reported issue only, excluding conversation history, unrelated notes and personal information. Fiveable resolves content and reporter identity. Matching requestId retries are idempotent.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "confirmReport": {
            "const": true,
            "description": "True only after the student explicitly requests sending this issue to Fiveable.",
            "type": "boolean"
          },
          "contentId": {
            "description": "Exact guide/question/FRQ ID, or the exact canonical key-term path from Fiveable.",
            "maxLength": 250,
            "minLength": 2,
            "type": "string"
          },
          "contentType": {
            "enum": [
              "studyGuide",
              "keyTerm",
              "practiceQuestion",
              "frq"
            ],
            "type": "string"
          },
          "description": {
            "description": "Only the issue the student wants reported; no conversation transcript or unrelated personal notes.",
            "maxLength": 2000,
            "minLength": 10,
            "type": "string"
          },
          "requestId": {
            "pattern": "^[\\w-]{8,128}$",
            "type": "string"
          }
        },
        "required": [
          "contentType",
          "contentId",
          "description",
          "requestId",
          "confirmReport"
        ],
        "type": "object"
      },
      "name": "report_content_issue"
    },
    {
      "description": "Retries background AI grading for one essay whose scoring failed. Existing successful scores cannot be changed by this operation.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "essayHandle": {
            "description": "Essay handle from get_grading_results, e.g. E-3b91c0.",
            "pattern": "^E-[a-f0-9]{6}$",
            "type": "string"
          },
          "requestId": {
            "description": "A unique id you generate for this action. Reuse it only when retrying the same action.",
            "pattern": "^[\\w-]{8,128}$",
            "type": "string"
          },
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId",
          "essayHandle",
          "requestId"
        ],
        "type": "object"
      },
      "name": "rescore_essay"
    },
    {
      "description": "Restores an assignment draft to its previous state using an undoId from a draft update.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "undoId": {
            "description": "undoId from update_assignment_draft.",
            "pattern": "^undo_[\\w-]{8,40}$",
            "type": "string"
          }
        },
        "required": [
          "undoId"
        ],
        "type": "object"
      },
      "name": "restore_assignment_draft"
    },
    {
      "description": "Restores removed roster students using a valid undoId, preserving their original roster entries.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "undoId": {
            "description": "undoId from remove_students.",
            "pattern": "^undo_[\\w-]{8,40}$",
            "type": "string"
          }
        },
        "required": [
          "undoId"
        ],
        "type": "object"
      },
      "name": "restore_students"
    },
    {
      "description": "Saves teacher-reviewed written feedback on one submission, overall or per section, without changing scores. Students see it once results are released, including immediately if already released. Returns previous text for restoration.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework or list_submissions_to_review.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "itemFeedback": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "itemId": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "text": {
                  "maxLength": 10000,
                  "type": "string"
                }
              },
              "required": [
                "itemId",
                "text"
              ],
              "type": "object"
            },
            "maxItems": 20,
            "type": "array"
          },
          "overallFeedback": {
            "maxLength": 10000,
            "type": "string"
          },
          "submissionId": {
            "description": "Submission id from list_submissions_to_review.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "assignmentId",
          "submissionId"
        ],
        "type": "object"
      },
      "name": "save_submission_feedback"
    },
    {
      "description": "Sets the teacher's score on sections of one submission (submission item ids), optionally with written feedback. Works in any scoring mode. Says whether the student sees it yet; to undo, set the sections back to the previous scores this returns.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "assignmentId": {
            "description": "Assignment id from list_coursework or list_submissions_to_review.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "itemFeedback": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "itemId": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "text": {
                  "maxLength": 10000,
                  "type": "string"
                }
              },
              "required": [
                "itemId",
                "text"
              ],
              "type": "object"
            },
            "maxItems": 20,
            "type": "array"
          },
          "itemScores": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "itemId": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "points": {
                  "maximum": 500,
                  "minimum": 0,
                  "type": "number"
                }
              },
              "required": [
                "itemId",
                "points"
              ],
              "type": "object"
            },
            "maxItems": 20,
            "minItems": 1,
            "type": "array"
          },
          "overallFeedback": {
            "maxLength": 10000,
            "type": "string"
          },
          "submissionId": {
            "description": "Submission id from list_submissions_to_review.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "assignmentId",
          "submissionId",
          "itemScores"
        ],
        "type": "object"
      },
      "name": "score_submission"
    },
    {
      "description": "Keyword search across every Fiveable study guide, unit, subject hub and key term. Suitable when the relevant subject or guide is not known. Returns titles and canonical references rather than full content, so it is cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "intent": {
            "description": "Privacy-safe reason for the request. Use explain, quiz, notes, frq, or research; never send the student's raw prompt for analytics.",
            "enum": [
              "explain",
              "quiz",
              "notes",
              "frq",
              "research"
            ],
            "type": "string"
          },
          "limit": {
            "default": 10,
            "description": "Maximum results to return.",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "query": {
            "description": "What to search for, e.g. \"photosynthesis light reactions\".",
            "minLength": 2,
            "type": "string"
          },
          "subjectSlug": {
            "description": "Optional: restrict the search to one subject.",
            "type": "string"
          }
        },
        "required": [
          "query",
          "limit"
        ],
        "type": "object"
      },
      "name": "search_content"
    },
    {
      "description": "Searches Fiveable's question bank for one subject (the same bank as the assignment builder): multiple choice, stimulus sets, SAQs and FRQs, filtered by unit, topic, skill, format and stimulus, optionally hiding questions this teacher already published. For AP Calculus, courseVariant scopes AB to exclude BC-only units, topics and FRQs. Returns ids, short stems and alignment, never answers. Filters accept exact unit/topic/skill labels from the filter lists in the result. Cheap.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "courseVariant": {
            "description": "AP Calculus only: ap-calc-ab or ap-calc-bc, the course of the class or draft you are building for.",
            "enum": [
              "ap-calc-ab",
              "ap-calc-bc"
            ],
            "type": "string"
          },
          "excludeAssigned": {
            "default": false,
            "description": "Hide questions this teacher already published.",
            "type": "boolean"
          },
          "format": {
            "enum": [
              "multiple-choice",
              "free-response"
            ],
            "type": "string"
          },
          "limit": {
            "default": 20,
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "maximum": 9007199254740991,
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "description": "Words to match in the question.",
            "maxLength": 200,
            "type": "string"
          },
          "skill": {
            "description": "Exact skill label from filters.skills.",
            "maxLength": 200,
            "type": "string"
          },
          "stimulus": {
            "enum": [
              "includes-stimulus",
              "no-stimulus"
            ],
            "type": "string"
          },
          "subjectSlug": {
            "description": "Subject, e.g. ap-bio or apush.",
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          },
          "topic": {
            "description": "Exact topic label from filters.topics.",
            "maxLength": 200,
            "type": "string"
          },
          "type": {
            "description": "mcq = single question, question-set = stimulus set, saq, or frq (LEQ, DBQ and other FRQs).",
            "enum": [
              "mcq",
              "question-set",
              "saq",
              "frq"
            ],
            "type": "string"
          },
          "unit": {
            "description": "Exact unit label from filters.units.",
            "maxLength": 200,
            "type": "string"
          }
        },
        "required": [
          "subjectSlug",
          "excludeAssigned",
          "offset",
          "limit"
        ],
        "type": "object"
      },
      "name": "search_question_bank"
    },
    {
      "description": "Sets a class's assignment defaults (scoring mode, timer, attempts, result release, notifications) so new assignments for that class start with them. Replaces the previous defaults and returns them for undo.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "classId": {
            "description": "Class id from list_classes.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "defaults": {
            "additionalProperties": false,
            "description": "The class's new defaults; unset fields fall back to Fiveable's.",
            "properties": {
              "durationMinutes": {
                "anyOf": [
                  {
                    "maximum": 300,
                    "minimum": 1,
                    "type": "integer"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "maxAttempts": {
                "maximum": 1000,
                "minimum": 1,
                "type": "integer"
              },
              "notifications": {
                "additionalProperties": false,
                "properties": {
                  "dueReminder": {
                    "type": "boolean"
                  },
                  "onPublish": {
                    "type": "boolean"
                  },
                  "onResultsRelease": {
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "resultRelease": {
                "description": "When students see results.",
                "enum": [
                  "immediate",
                  "manual",
                  "scheduled"
                ],
                "type": "string"
              },
              "scoringMode": {
                "description": "Who scores free responses.",
                "enum": [
                  "ai",
                  "self",
                  "teacher"
                ],
                "type": "string"
              },
              "timerMode": {
                "enum": [
                  "strict",
                  "flexible",
                  "none"
                ],
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "classId",
          "defaults"
        ],
        "type": "object"
      },
      "name": "set_class_assignment_defaults"
    },
    {
      "description": "Starts background AI grading for unscored essays on the session's Fiveable rubric, generating that rubric first if needed. Returns immediately with job status. retryFailed includes previously failed essays. Scores remain drafts until teacher approval.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "requestId": {
            "description": "A unique id you generate for this action. Reuse it only when retrying the same action.",
            "pattern": "^[\\w-]{8,128}$",
            "type": "string"
          },
          "retryFailed": {
            "default": false,
            "type": "boolean"
          },
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId",
          "retryFailed",
          "requestId"
        ],
        "type": "object"
      },
      "name": "start_grading"
    },
    {
      "description": "Changes a draft's title, instructions, AP Calculus course, classes, dates, settings or sections. Existing section ids identify sections to remove. Published assignments cannot be changed here. Returns an undoId for restoring the previous draft.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "addSections": {
            "items": {
              "oneOf": [
                {
                  "additionalProperties": false,
                  "properties": {
                    "avoidRepeats": {
                      "default": true,
                      "description": "When drawing from units, skip questions this teacher already published.",
                      "type": "boolean"
                    },
                    "questionCount": {
                      "description": "Questions to draw from units, on top of any questionIds. Omit when only using questionIds.",
                      "maximum": 100,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "questionIds": {
                      "description": "Specific questions to include, as mcq: ids from search_question_bank. They come first, exactly as picked; questions drawn from units never repeat them. Omit units to use only these.",
                      "items": {
                        "pattern": "^(mcq:)?[\\w-]+$",
                        "type": "string"
                      },
                      "maxItems": 100,
                      "minItems": 1,
                      "type": "array"
                    },
                    "skillId": {
                      "anyOf": [
                        {
                          "maxLength": 200,
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Optional CED skill id to narrow to."
                    },
                    "style": {
                      "default": "exam",
                      "description": "exam = AP-style (with stimulus sets where the exam has them); comprehension or vocabulary checks.",
                      "enum": [
                        "exam",
                        "comprehension",
                        "vocabulary"
                      ],
                      "type": "string"
                    },
                    "timeLimitMinutes": {
                      "anyOf": [
                        {
                          "maximum": 300,
                          "minimum": 1,
                          "type": "integer"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Omit for untimed."
                    },
                    "type": {
                      "const": "multiple_choice",
                      "type": "string"
                    },
                    "units": {
                      "description": "Units to draw questions from. Omit when only using questionIds.",
                      "items": {
                        "additionalProperties": false,
                        "properties": {
                          "questionCount": {
                            "description": "Omit to split the total evenly.",
                            "maximum": 100,
                            "minimum": 0,
                            "type": "integer"
                          },
                          "topicIds": {
                            "description": "Topic ids to narrow to.",
                            "items": {
                              "maxLength": 200,
                              "minLength": 1,
                              "type": "string"
                            },
                            "maxItems": 60,
                            "type": "array"
                          },
                          "unitId": {
                            "anyOf": [
                              {
                                "maxLength": 200,
                                "minLength": 1,
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Unit id from get_subject_outline; null = whole course."
                          }
                        },
                        "required": [
                          "unitId"
                        ],
                        "type": "object"
                      },
                      "maxItems": 20,
                      "type": "array"
                    }
                  },
                  "required": [
                    "type",
                    "style",
                    "avoidRepeats"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "focus": {
                      "const": "introduction",
                      "description": "AP World, APUSH or AP Euro DBQ or LEQ only: students write just the introduction (contextualization and a thesis), scored on the AP rubric's Thesis/Claim and Contextualization points (2 points). Omit for the whole essay. Can't be combined with parts.",
                      "type": "string"
                    },
                    "parts": {
                      "description": "Part letters students answer (e.g. [\"A\", \"B\"]), scored on those parts' AP rubric points. Omit for the whole question. Questions scored as a whole (essays, AP Stats, world languages) can't be split.",
                      "items": {
                        "pattern": "^[A-Za-z]$",
                        "type": "string"
                      },
                      "maxItems": 12,
                      "minItems": 1,
                      "type": "array"
                    },
                    "questionId": {
                      "description": "An frq: or saq: id from search_question_bank.",
                      "pattern": "^frq:[\\w-]+$|^saq:[\\w-]+(:[A-Za-z])?$",
                      "type": "string"
                    },
                    "type": {
                      "const": "free_response",
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "questionId"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "readingQuestions": {
                      "default": false,
                      "description": "Add reading-check questions (study guides and AMSCO guided notes).",
                      "type": "boolean"
                    },
                    "resourceId": {
                      "description": "A resource id from list_teaching_resources.",
                      "maxLength": 300,
                      "minLength": 1,
                      "type": "string"
                    },
                    "type": {
                      "const": "reading",
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "resourceId",
                    "readingQuestions"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "diagnostic",
                      "type": "string"
                    },
                    "unitIds": {
                      "description": "Unit ids from get_subject_outline.",
                      "items": {
                        "maxLength": 200,
                        "minLength": 1,
                        "type": "string"
                      },
                      "maxItems": 15,
                      "minItems": 1,
                      "type": "array"
                    },
                    "unitLabels": {
                      "items": {
                        "maxLength": 200,
                        "type": "string"
                      },
                      "maxItems": 15,
                      "type": "array"
                    }
                  },
                  "required": [
                    "type",
                    "unitIds"
                  ],
                  "type": "object"
                }
              ]
            },
            "maxItems": 20,
            "type": "array"
          },
          "assignmentId": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          },
          "availableAt": {
            "description": "When it opens, ISO with offset.",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
            "type": "string"
          },
          "classes": {
            "description": "Replaces the class targets.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "classId": {
                  "description": "Class id from list_classes.",
                  "pattern": "^[a-f\\d]{24}$",
                  "type": "string"
                },
                "dueAt": {
                  "description": "ISO date-time with timezone offset.",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                  "type": "string"
                }
              },
              "required": [
                "classId"
              ],
              "type": "object"
            },
            "maxItems": 12,
            "minItems": 1,
            "type": "array"
          },
          "courseVariant": {
            "description": "AP Calculus only: switch the draft to ap-calc-ab or ap-calc-bc. Its multiple choice, free-response and diagnostic sections must be removed in the same call (add new ones there too); readings stay.",
            "enum": [
              "ap-calc-ab",
              "ap-calc-bc"
            ],
            "type": "string"
          },
          "dueAt": {
            "description": "Default due time for every class.",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
            "type": "string"
          },
          "instructions": {
            "maxLength": 5000,
            "type": "string"
          },
          "removeSectionIds": {
            "items": {
              "maxLength": 100,
              "type": "string"
            },
            "maxItems": 20,
            "type": "array"
          },
          "resultRelease": {
            "description": "When students see results.",
            "enum": [
              "immediate",
              "manual",
              "scheduled"
            ],
            "type": "string"
          },
          "settings": {
            "additionalProperties": false,
            "description": "Merged into the current settings.",
            "properties": {
              "durationMinutes": {
                "anyOf": [
                  {
                    "maximum": 300,
                    "minimum": 1,
                    "type": "integer"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "maxAttempts": {
                "maximum": 1000,
                "minimum": 1,
                "type": "integer"
              },
              "notifications": {
                "additionalProperties": false,
                "properties": {
                  "dueReminder": {
                    "type": "boolean"
                  },
                  "onPublish": {
                    "type": "boolean"
                  },
                  "onResultsRelease": {
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "resultRelease": {
                "description": "When students see results.",
                "enum": [
                  "immediate",
                  "manual",
                  "scheduled"
                ],
                "type": "string"
              },
              "scoringMode": {
                "description": "Who scores free responses.",
                "enum": [
                  "ai",
                  "self",
                  "teacher"
                ],
                "type": "string"
              },
              "timerMode": {
                "enum": [
                  "strict",
                  "flexible",
                  "none"
                ],
                "type": "string"
              }
            },
            "type": "object"
          },
          "title": {
            "maxLength": 160,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "assignmentId"
        ],
        "type": "object"
      },
      "name": "update_assignment_draft"
    },
    {
      "description": "Renames a class, changes its subject, or sets an AP Calculus class's course (AB or BC). Returns the previous values for reversal through a subsequent class update.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "classId": {
            "description": "Class id from list_classes.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "courseVariant": {
            "description": "AP Calculus only: ap-calc-ab or ap-calc-bc.",
            "enum": [
              "ap-calc-ab",
              "ap-calc-bc"
            ],
            "type": "string"
          },
          "name": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          },
          "subjectSlug": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "classId"
        ],
        "type": "object"
      },
      "name": "update_class"
    },
    {
      "description": "Changes a session's Fiveable question or teacher-provided prompt and AP question type before any essay is scored. Regenerates the rubric using that type's AP rubric and point total. Returns the previous prompt for restoration.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "fiveableQuestionId": {
            "maxLength": 120,
            "type": "string"
          },
          "prompt": {
            "additionalProperties": false,
            "properties": {
              "frqType": {
                "description": "Question type as Fiveable names it, e.g. \"Long Essay Question (LEQ)\". Omit to get the list.",
                "maxLength": 120,
                "type": "string"
              },
              "images": {
                "description": "Visuals the question depends on.",
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "data": {
                      "description": "Base64 image, no data: prefix.",
                      "maxLength": 6000000,
                      "minLength": 1,
                      "type": "string"
                    },
                    "mediaType": {
                      "enum": [
                        "image/jpeg",
                        "image/png",
                        "image/webp"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "mediaType"
                  ],
                  "type": "object"
                },
                "maxItems": 4,
                "type": "array"
              },
              "text": {
                "description": "The question exactly as the teacher assigned it.",
                "maxLength": 20000,
                "minLength": 20,
                "type": "string"
              }
            },
            "required": [
              "text"
            ],
            "type": "object"
          },
          "sessionId": {
            "description": "Grading session id from list_grading_sessions or create_grading_session.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          }
        },
        "required": [
          "sessionId"
        ],
        "type": "object"
      },
      "name": "update_grading_rubric"
    },
    {
      "description": "Fixes a student's name on a class roster (the old name is kept as an alias so past work still matches), or sets the email used for assignment notifications. Students with Fiveable accounts can be renamed but their email comes from their account.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "classId": {
            "description": "Class id from list_classes.",
            "pattern": "^[a-f\\d]{24}$",
            "type": "string"
          },
          "email": {
            "format": "email",
            "maxLength": 254,
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
            "type": "string"
          },
          "handle": {
            "description": "Student handle from get_class, e.g. S-4f2a1c.",
            "pattern": "^S-[a-f0-9]{6}$",
            "type": "string"
          },
          "name": {
            "description": "Full name as the teacher wants it shown.",
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "classId",
          "handle"
        ],
        "type": "object"
      },
      "name": "update_student"
    }
  ]
}

What the leaf hashes

{"body":"f2fc56fd4d7c313c433dfe1ba8cd35abe8404cc952fb25e46efdb12fe0580cce","id":293037,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793049122587446,"prev":null,"subject":"580c897f-5f66-4fb5-bafc-722b43621e9f","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).

  1. 0x9a337298782305306b4e9e66f5e4adeb6ae20bca86d1e2b7e98e2d8608c21153
  2. 0x9efbc5a7978a46b0fcac2b1f57687f58861249f1f5e3f3bba36c5cad8cdd5b80
  3. 0x3108efedc5abf2759dcff813f51fd558204cce3737f07a9fc438ccdb22432b80
  4. 0xdae29adbaf9dcb24404e30679f8665323efed4021b5d33de69510de0946dd14f
  5. 0xaa922b244085b34cfb8b3a52c44e354df70ff73999f624a93beb932891668b2d
  6. 0xd80e8ae8b615508301382e56e595163c299b4932d7ff1f6cef4e07831c5f9c77
  7. 0x9fa8627fd99c454cec1db5c6d51db1fa3daa156b6135e39f813112cd48dc7f11
  8. 0xe710b5584987c4c18277f1e31d1e10aed835159dc2217f263ee12bfc287e00bf
  9. 0x5857ceac0af3d3165e2a4c7d5532ef6019b83aa5ea6b78ce7c6e85a61717200e
  10. 0x1aaf62de630dedecdb7489eb3c995d9755402e845b621c4301684e0f3dc79b03
  11. 0xee5ef8d84c329a24d375330252426182463aa2a536127b218e61007c87101323
  12. 0xfee33ee0189dc82c649bd0324796a297b897507b2fddbbe2eff331c40c960ce2
  13. 0x239fd39716710e7412bd120c373072b4c0d8b11bb9ee431dad62a2ce57b3d6f4
  14. 0x49062da782c4f73855ddd5fdd51840749f928b5f17d1ce75ac50f2d829104e72
  15. 0xf0bd63870f0bb378fa300bd33563050dcb7b3e02b44eb3ee550c1c534ec4b246
  16. 0x1ac20d30773e1f4f2f811540e9a99b5cca9177c9e2e029acc0d80cf3f1d11f0f
  17. 0xd21942ae3214eff88e08ab04884fd4b11958b51af9a0741b7668e2d07a2c56c9
  18. 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON