Skip to main content
Glama

Zovo Gradebook

Calculate class grades

calculate_class_grades
Read-onlyIdempotent

Use this when a teacher or tutor wants a weighted grade calculator for a whole class; list ID and info columns (student number, StudentID, email, SIS, section) in ignore_columns so they stay out of the grades. Examples: final grades from a gradebook, 'calculate my students' grades with Homework 20%, Quizzes 30%, Tests 50%', a gradebook template filled in, class average, or who is missing work. Takes a roster of scores (pasted table, list, or a Google Classroom / Canvas CSV or XLSX export as file) plus optional category weights, points possible, drop lowest per category, blank handling, extra credit and letter scale. Returns each student's final percent and letter (fraction math, rounded only for display), category scores, weights renormalized when a category has no graded work, class mean/median/distribution, missing-work list, and Excel + CSV downloads. Does not store data, connect to a school system, or make progress report PDFs (use generate_progress_reports).

Input Schema

NameRequiredDescriptionDefault
fileNoA gradebook export as CSV or XLSX, e.g. the Google Classroom grades CSV or the Canvas gradebook export. One row per student, one column per assignment.
termNoGrading period, e.g. Fall 2026 Quarter 1.
rosterNoThe scores, one row per student: a pasted table (CSV, tab-separated or a markdown table) with a header row of assignment names, e.g. "Student, HW1, HW2, Quiz 1, Test 1\nAna Diaz, 18, 20, 9, 45\nBen Ito, 15, EX, 7, M". Also accepts a list of rows or [{"name":"Ana Diaz","scores":{"HW1":18,"Quiz 1":9}}]. Send this or file.
blank_asNoHow to treat empty cells: not_graded (default, left out) or zero (count as 0). EX means excused (left out); M or missing counts as 0.
studentsNoSame as roster (either name works), e.g. [{"name":"Ana Diaz","scores":{"HW1":18}}].
id_columnNoThe header of the student ID / student number column, if any, e.g. "StudentID". It is ignored (same as ignore_columns).
categoriesNoCategory weights, e.g. "Homework 20%, Quizzes 30%, Tests 50%" or [{"name":"Quizzes","weight":30,"drop_lowest":1}]. Assignments are matched to categories by name (HW 3 -> Homework, Quiz 2 -> Quizzes, Unit Test -> Tests). Leave out for a total-points grade.
class_nameNoClass name for the files, e.g. Algebra 1, Period 3.
plus_minusNotrue for +/- letters (A+ 97, A 93, A- 90, ...). Default false.
assignmentsNoOptional details per assignment when names do not show the category or the points: [{"name":"Unit 1","category":"Tests","points_possible":50}], or lines like "Unit 1, Tests, 50". Mark bonus work with "extra_credit": true.
drop_lowestNoDrop each student's lowest scores per category, e.g. {"Quizzes": 1} or "Quizzes 1, Homework 2". A plain number applies to every category.
letter_scaleNoLetter cutoffs. Default A 90, B 80, C 70, D 60, F below 60. Use "plus_minus" for A+ 97 / A 93 / A- 90 ... D- 60, or a custom list like "A 93, B 85, C 75, D 65".
teacher_nameNoTeacher or tutor name for the reports, e.g. Ms. Rivera.
ignore_columnsNoColumns that are not scores and must not be graded or copied, by header name: student IDs, student numbers, SIS/login/email, section, notes. Example: ["Student Number", "Email"] or "StudentID, Nr albumu". Always name ID and info columns here.
points_possibleNoPoints possible when the table does not say: one number for every assignment (e.g. 100), a list in column order (e.g. "20, 20, 10, 50"), or {"Quiz 1": 10}. A 'Points possible' row in the table or headers like "Quiz 1 (10)" also work. Default 100.
category_scoringNoHow a category score is built: points (default, total points earned / possible in the category) or average (each assignment counts equally).
round_for_letterNotrue to round the final percent to a whole number before picking the letter (89.5 -> 90 -> A). Default false: 89.5 is a B.

Output Schema

NameRequiredDescriptionDefault
kindYes
notesYes
pagesNo
statsYes
gradingYes
privacyYes
studentsYes
warningsYes
downloadsYes
categoriesYes
class_nameYes
distributionYes
graded_countYes
letter_scaleYes
missing_workYes
missing_totalYes
students_countYes
students_shownYes
assignments_countYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds real behavioral detail beyond them: no data storage, no school-system connection, Excel + CSV downloads produced, exact fraction math with rounding only for display, and weight renormalization when a category has no graded work. What's left unstated are practical traits like runtime, input size limits, or how failures on malformed CSVs are reported.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with a clean when-to-use sentence and closed with a clean exclusion sentence, and every clause carries information. The middle sentence is a dense run-on that packs inputs and outputs together, making it harder to scan than the surrounding prose, but no sentence is genuinely wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter, nested-schema grading tool, the description covers the input shapes (pasted table, list, CSV/XLSX file), the opinionated defaults (blank handling, points possible, letter scale), and the outputs. With an output schema present, the return-value summary is bonus rather than required, so nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns an extra point by promoting the easily-missed but critical parameter up front ('list ID and info columns ... in ignore_columns so they stay out of the grades') and by grouping the optional knobs (weights, points possible, drop lowest, blank handling, extra credit, letter scale) into a recognizable feature set. It does not add syntax or default detail beyond what per-parameter schemas already provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('weighted grade calculator for a whole class') and immediately scopes it with concrete examples: a gradebook, pasted table, or Classroom/Canvas CSV. It also explicitly names what it is not ('Does not store data... or make progress report PDFs (use generate_progress_reports)'), which separates it from the sibling without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this when a teacher or tutor wants...' gives the triggering condition, followed by four worked examples (final grades, weighted percentages, template fill, class average, missing work) that tell an agent exactly what requests belong here. Exclusions are explicit and route to the named alternative; the 'whole class' framing also implicitly separates it from a single-student what-if calculation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources