Skip to main content
Glama
jasonko
by jasonko

ParentSquare MCP Server

IMPORTANT

This repository is archived. Active development has moved to thehesiod/psquare-mcp.

It is released there as parentsquare-mcp on PyPI and io.github.thehesiod/psquare on the MCP Registry.

The old psquare-mcp / io.github.jasonko/psquare names are frozen at 0.3.0 and receive no further fixes. To migrate: pip uninstall psquare-mcp && pip install parentsquare-mcp (the command and import name are unchanged).

MCP Registry PyPI

An MCP (Model Context Protocol) server that gives Claude access to ParentSquare, a school-parent communication platform. Since ParentSquare has no public API, this server scrapes the web interface using saved session cookies.

Covers both the parent/guardian experience (feeds, posts, calendars, messages, directories, sign-ups, forms, payments) and school admin roster management — reading student and guardian rosters, and creating/editing students and guardians plus sending registration invitations. Admin write tools are off by default, gated behind PS_ENABLE_WRITES, and every write is recorded to a local audit log.

Available on the MCP Registry as io.github.thehesiod/psquare and on PyPI as parentsquare-mcp.

Disclaimer

This project is not affiliated with, endorsed by, or sponsored by ParentSquare, Inc. "ParentSquare" and all related names, logos, and trademarks are the property of ParentSquare, Inc.

This server communicates with ParentSquare's undocumented internal APIs (scraping the web UI and calling its non-public /api/v2/ JSON endpoints) — these are not published, not guaranteed to be stable, and may change or be blocked at any time without notice. Use of those interfaces may violate ParentSquare's Terms of Service; you are responsible for reviewing the ToS and deciding whether your use is acceptable.

Use at your own risk. The authors and contributors accept no responsibility for any consequences of using this software, including but not limited to: account suspension or termination, data loss or corruption, missed or incorrect notifications, MFA lockouts, leaked session cookies, IP blocks, or any other direct or indirect damages. No warranty is provided — see LICENSE for the full MIT no-warranty clause.

If ParentSquare publishes an official API, this project should be considered deprecated in favor of that.

Related MCP server: io.github.thehesiod/psquare

Features

Feed & Posts

  • get_feeds — Browse paginated school feed with titles, authors, summaries, and attachment names

  • get_post — Full post details with body text, comments, poll results, signup items, and inline image/PDF content (Claude can "see" attached calendars, flyers, etc.)

  • get_group_feed — Posts from a specific group

Calendar

  • get_calendar_events — Events from ICS calendar as structured JSON (title, start/end, location, description)

  • Falls back to guiding Claude to search feed posts for image/PDF calendars when ICS is empty

Communication

  • list_conversations / get_conversation — Read message threads

  • get_directory — Staff directory as structured JSON (name, role, phone, user_id)

  • get_staff_member — Full staff details with email, office hours, and inline profile photo

Media & Files

  • list_photos — Photo gallery with URLs

  • list_files — Document files

  • download_file — Download any attachment to local disk

Participate

  • list_signups — Sign-up and RSVP posts with progress tracking (e.g. "53/103 Items")

  • list_notices — Alerts and secure documents

  • list_polls — Polls with vote counts and winning options

  • list_forms — Permission slips and signable forms

  • list_payments — Payment items with prices and summary stats

  • list_volunteer_hours — Logged volunteer hours with totals

Groups & Discovery

  • list_schools — Schools and students as structured JSON

  • list_school_features — Available sections per school (parsed from sidebar)

  • list_groups — Groups with member counts, descriptions, and membership status

  • list_links — Quick-access links (Google Drive, external sites)

Student

  • get_student_dashboard — School, grade, classes, and teachers as structured JSON

Admin (roster: students & guardians)

Read tools are always available; write tools are disabled by default and only run when PS_ENABLE_WRITES is set (see below). Every write is recorded to a local audit log. v1 is create/edit only — no destructive operations.

  • list_students — School roster (id, name, grade, SIS id, guardians) as structured JSON, with optional grade / name_contains filters

  • list_parents — Guardian roster (user_id, name, email, phone, linked students) as structured JSON, with optional name_contains / student_name_contains filters; provides the user_id needed by edit_parent / link_guardian_to_student

  • list_grades — A school's grades and their grade_id values (needed for add/edit)

  • get_student — Admin detail for one student (name, grade, SIS id, linked guardians, classes)

  • add_student (write) — Create a student in a grade

  • edit_student (write) — Update a student's name, SIS id, or grade (unchanged fields preserved)

  • add_parent (write) — Create a guardian linked to a student

  • edit_parent (write) — Update a guardian's name, email, or phone (existing links preserved)

  • link_guardian_to_student (write) — Link an existing guardian to an additional student

  • invite_parent (write) — Send (or resend) a ParentSquare registration invitation to one guardian

  • bulk_invite_parents (write) — Invite many guardians at once; already-registered guardians are skipped automatically

Admin (classes, staff & enrollment)

Same write gate and audit log as above; no deletion of classes or staff.

  • list_classes / get_class — A school's classes, and one class with its full staff list (teachers, assistants, room parents)

  • add_class (write) — Create a class; new classes start hidden until set_class_visibility

  • edit_class (write) — Rename a class or change its grades

  • set_class_visibility (write) — Show or hide classes (date-driven, defaults to today)

  • list_staff — Staff and admin roster (user_id, name, email, phone, role/title) as structured JSON, with an optional name_contains filter; provides the user_id needed by edit_staff / add_class_staff

  • add_staff (write) — Add a teacher, staff member, or admin, optionally assigning them to classes

  • edit_staff (write) — Update a staff member's name, email, phone, title, or staff ID (class assignments and STAFF/ADMIN access preserved; guardians are rejected — use edit_parent)

  • add_class_staff / remove_class_staff (write) — Assign or unassign teachers, assistants, and room parents for a class. Section-membership writes are serialized inside one server process; never issue them in parallel, and verify each result with a fresh read.

  • list_class_students — The students enrolled in a class

  • add_class_students / remove_class_students / move_student_to_class (write) — Manage which students are enrolled in which classes. These share the same global serialization lock as class-staff writes because student-section updates can replace a student's full enrollment list.

Authentication

  • submit_mfa_code — Complete MFA verification with a 6-digit code

  • Supports MCP elicitation for inline MFA prompts

  • Session cookies persisted to ~/.parentsquare_cookies.json

  • Credentials loaded from environment variables, 1Password, or LastPass CLI on session expiry

Setup

Enabling admin write tools

The admin write tools (add_student, edit_student, add_parent, edit_parent, link_guardian_to_student) modify the live school roster, so they are off by default. To enable them, set PS_ENABLE_WRITES=1 (or true/yes/on) in the server's environment and restart. Every write attempt (including blocked ones) is appended as JSONL to PS_AUDIT_LOG (default ~/.parentsquare_audit.log). Read tools (list_students, list_parents, list_grades, get_student) work regardless.

ParentSquare's form endpoints answer every accepted POST with the same generic 200 "reload" response, which some silent failures also return. To avoid false-positive successes, the create/link tools (add_student, add_parent, link_guardian_to_student) read back authoritative state after the write and only report ✅ Success (verified) once the new record is actually found. If the POST is accepted but the read-back can't find the change, they return a ⚠️ warning that it likely did not persist; if the read-back itself can't run, they report the write as submitted-but-unverified.

The read-back also overrules a 5xx. ParentSquare renders its error page after the transaction commits, so a server error can hide a write that actually landed — add_student did exactly that on every create until a missing student[section_ids][] form param was tracked down. Reporting those as failures invited retries, and each retry duplicated a real student with no API route to delete one. So when a write returns a 5xx but the record is found on read-back, the tool reports ✅ Success (verified) with a note not to retry. An explicit rejection (a 4xx, or a 200 carrying an alert-danger flash) is still reported as a failure regardless of read-back.

Prerequisites

Credentials can be provided in either of two ways (checked in this order):

  1. Environment variables — set PS_USERNAME and PS_PASSWORD

  2. A credential manager selected by PS_CREDENTIAL_PROVIDER (default 1password):

    • 1Password CLI (op) — with a "Parentsquare" item containing username and password fields

    • LastPass CLI (lpass) — set PS_CREDENTIAL_PROVIDER=lastpass. Run lpass login <your-lastpass-email> in a terminal first (may prompt for MFA). The item read defaults to parentsquare.com and can be overridden with PS_LASTPASS_ITEM (an exact entry name or entry ID).

Install in Claude Code

claude mcp add --transport stdio parentsquare -- uvx --from "parentsquare-mcp @ git+https://github.com/thehesiod/psquare-mcp" parentsquare-mcp

To enable PDF text extraction for post attachments (optional, AGPL-3.0 licensed):

claude mcp add --transport stdio parentsquare -- uvx --from "parentsquare-mcp[pdf] @ git+https://github.com/thehesiod/psquare-mcp" parentsquare-mcp

That's It

No further configuration needed. The server auto-discovers your schools, students, and user ID from ParentSquare on first use. Authentication is handled automatically — when the session expires, the server loads your credentials from environment variables (or 1Password CLI) and re-authenticates (including MFA if needed).

To use environment variables with Claude Code, add an env block to your MCP config:

{
  "mcpServers": {
    "parentsquare": {
      "command": "uvx",
      "args": ["--from", "parentsquare-mcp", "parentsquare-mcp"],
      "env": {
        "PS_USERNAME": "your@email.com",
        "PS_PASSWORD": "your-password"
      }
    }
  }
}

Security note: environment variables place your password in plaintext inside your MCP config file. If you chose a password manager specifically to avoid that, prefer the 1Password or LastPass CLI path.

To use the LastPass CLI instead of 1Password, log in once (lpass login <your-lastpass-email>) and set the provider in your MCP config:

{
  "mcpServers": {
    "parentsquare": {
      "command": "uvx",
      "args": ["--from", "parentsquare-mcp", "parentsquare-mcp"],
      "env": {
        "PS_CREDENTIAL_PROVIDER": "lastpass",
        "PS_LASTPASS_ITEM": "parentsquare.com"
      }
    }
  }
}

PS_LASTPASS_ITEM is optional (defaults to parentsquare.com).

How It Works

The server uses requests + BeautifulSoup to scrape ParentSquare's server-rendered HTML pages. Each tool follows the pattern:

  1. Fetch the HTML page via PSClient.get_page() or JSON via PSClient.get_json() (auto-relogins on session expiry)

  2. Parse with a dedicated parser in parsers/ that extracts structured data into dataclasses

  3. Return results as either structured JSON dicts (for data-lookup tools) or markdown text (for content-rich tools)

Data-lookup tools (list_schools, get_directory, get_calendar_events, get_student_dashboard, get_staff_member) return structured JSON for easy programmatic access. Content tools (get_post, get_feeds, get_conversation) return markdown.

On first use, the server auto-discovers your schools, students, and user ID from ParentSquare (no config file needed).

For get_post, image attachments are downloaded and returned as MCP Image objects (so Claude can see them), and PDF attachments have their text extracted via pymupdf. get_staff_member also returns inline profile photos.

Groups use a GraphQL endpoint (/graphql) instead of HTML scraping. The directory and staff details use the internal /api/v2/ JSON:API.

Dependencies

Package

Purpose

License

mcp

Model Context Protocol SDK

MIT

requests

HTTP client

Apache 2.0

beautifulsoup4

HTML parsing

MIT

icalendar

ICS calendar parsing

BSD

pymupdf

PDF text extraction (optional)

AGPL-3.0

License

MIT — see LICENSE. Note: the optional pymupdf dependency is AGPL-3.0 licensed.

mcp-name: io.github.jasonko/psquare

Available Tools

48 tools
add_classA

Create a new class (section) at a school. Requires PS_ENABLE_WRITES.

New classes are created hidden — they are not visible to staff, parents, or students until you call set_class_visibility. Assign teachers afterwards with add_class_staff.

Args: school_id: School ID name: Class name (e.g. "Ms. Smith's Class") grade_ids: One or more grade IDs the class belongs to (from list_grades)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
grade_idsYes
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses the requirement for PS_ENABLE_WRITES and the critical side effect that new classes are hidden until set_class_visibility is called. It also implies that staff are not automatically assigned. These are meaningful behaviors beyond the simple 'create' action.

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

Conciseness5/5

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

The description is tight and well-ordered: a one-sentence purpose, a brief paragraph on hidden behavior and next steps, then a clean Args list. No filler or redundancy; the most important behavioral note is front-loaded.

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 simple create operation with 3 params and an output schema present, the description covers everything an agent needs: purpose, required permission, parameter semantics, and the hidden-class behavior. It even points to list_grades for valid IDs and suggests follow-up tools. No critical gaps remain.

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

Parameters5/5

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

Schema description coverage is 0%, so the description's Args section is the sole documentation. It explains each parameter: school_id as School ID, name with an example, and grade_ids with a source (list_grades). This fully compensates for the schema's lack of descriptions.

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?

The description states a clear verb and resource: 'Create a new class (section) at a school.' It distinguishes itself from siblings like edit_class and set_class_visibility by explicitly noting that new classes are hidden until set_class_visibility is called, and that teacher assignment is done via add_class_staff. This makes the tool's role unambiguous.

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

Usage Guidelines4/5

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

The description gives clear workflow context: after creating a class, you must call set_class_visibility to make it visible and add_class_staff to assign teachers. This implicitly tells the agent when to use this tool (for creation) versus those others. It doesn't explicitly say 'do not use this for editing' but the workflow guidance is strong.

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

add_class_staffA

Assign teachers, assistants, or room parents to a class. Requires PS_ENABLE_WRITES.

SAFETY: Never call this tool or remove_class_staff in parallel, even for different sections. ParentSquare replaces the full staff list, and concurrent writes have caused unrelated associations to disappear. The server serializes calls within this process; still use one call at a time and verify with a fresh get_class read before the next class-staff write.

The class's existing staff are read first and preserved — only the listed people are added, all in a single update. Anyone already holding the role is skipped; anyone on the class under a different role is moved to this one. Room parents are ordinary guardians: get their user_id from list_parents. Teachers and assistants come from list_staff.

Args: section_id: Class/section ID (from list_classes) user_ids: One or more user IDs (list_staff for staff, list_parents for room parents) role: One of TEACHER, ASSISTANT, ROOM_PARENT — applied to everyone in user_ids class_title: Optional label shown on the class (defaults to the role name)

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
user_idsYes
section_idYes
class_titleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral disclosure burden, and it does so thoroughly. It discloses the concurrency hazard, the fact that the server replaces the full staff list internally, the preservation of existing staff, deduplication of current roles, and role-transfer behavior for people on a different role. It also includes the required environment flag and the instruction to serialize with read verification.

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

Conciseness5/5

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

The description is appropriately structured: a one-sentence purpose, a critical safety note, detailed concurrency guidance, and a clean Args breakdown. Every sentence conveys non-redundant information, and the matching risk is placed prominently before more detailed parameter documentation.

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?

Given the presence of an output schema and the tool's complexity, the description covers everything required to invoke it correctly: required permission flag, concurrency constraints, where to get IDs, role values, and behavior for existing associations. The return format is not described, but the presence of an output schema satisfies that requirement.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate and almost perfectly does. It maps section_id to list_classes, user_ids to list_staff or list_parents (depending on role), explicitly enumerates the accepted role values, and clarifies that class_title is an optional label defaulting to the role name. This adds valuable source and value semantics beyond the bare schema.

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?

The description opens with a specific verb-resource pairing: 'Assign teachers, assistants, or room parents to a class,' which clearly states what the tool does and the types of roles it handles. The explicit mention of preserving existing staff and contrasting with remove_class_staff differentiates it from sibling tools without requiring schema inspection.

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

Usage Guidelines4/5

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

It provides strong when-to-use context: it is for adding staff roles, requires PS_ENABLE_WRITES, and should never be called concurrently with remove_class_staff. It even instructs verifying with a fresh get_class read before the next class-staff write. It does not explicitly say 'for removing staff use remove_class_staff,' but that is strongly implied by the add/preserve semantics.

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

add_class_studentsA

Enroll students in a class. Requires PS_ENABLE_WRITES.

SAFETY: Never call this tool or another class-staff/student-enrollment write in parallel. The server serializes section-membership writes within this process; still use one call at a time and verify with a fresh read.

Adds everyone listed in a single call without disturbing the students already in the class or their other classes. Students already enrolled are skipped, so re-running is safe.

To assign a whole grade at the start of the year, call this once per classroom with that classroom's students — list_students(grade=...) gives the ids.

Args: section_id: Class/section ID (from list_classes) student_ids: One or more student IDs (from list_students)

ParametersJSON Schema
NameRequiredDescriptionDefault
section_idYes
student_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden. It discloses the required permission (PS_ENABLE_WRITES), the serialized nature of writes and the need to avoid parallelism, idempotency (re-running safe, skipping existing students), and that it does not disturb existing class memberships. This is exceptionally transparent.

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?

The description is longer than a single sentence but well-structured: purpose/requirement, SAFETY callout, behavior notes, and usage example, then an Args section. Every sentence carries meaning, and key information is front-loaded. Slightly verbose but not redundant.

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

Completeness4/5

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

The description covers permissions, safety, idempotency, example usage, and parameter details. It does not describe the return value, but an output schema exists (context says has output schema: true), so that gap is acceptable. For a write tool with no annotations, this is sufficiently complete.

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

Parameters5/5

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

Schema has 0% description coverage, so the description fully compensates. It explains each parameter's meaning and origin: section_id from list_classes, student_ids from list_students. This adds critical context (that these are IDs from other tools) that the schema's bare 'integer' and 'array' types do not 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 action ('Enroll students in a class') and clearly differentiates it from sibling tools like remove_class_students and move_student_to_class. The description further clarifies it adds everyone in a single call without disturbing existing enrollments, making the scope unambiguous.

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?

Provides explicit guidance: gives a concrete use case ('assign a whole grade at the start of the year') with a workflow referencing list_students(grade=...), and warns against parallel calls, recommending a fresh read after. This is clear when-to-use and how-to-use guidance, and it distinguishes from alternatives implicitly.

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

add_parentA

Create a guardian/parent and link them to a student. Requires PS_ENABLE_WRITES.

A parent is always created attached to at least one student. The new user id is not returned — call list_students or the parent roster afterward.

Args: school_id: School ID student_id: Student ID to attach the guardian to (from list_students) first_name: Guardian first name last_name: Guardian last name email: Guardian email (optional) phone: Guardian phone (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
phoneNo
last_nameYes
school_idYes
first_nameYes
student_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses a required permission (PS_ENABLE_WRITES), the invariant that a parent is always attached to at least one student, and the notable behavior that the new user id is not returned. These are important and beyond what the schema conveys.

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?

The description is efficiently structured: a short introductory paragraph followed by an Args block. The key points (requirement and no return id) are front-loaded, and the parameter list is easy to scan. No wasted sentences.

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

Completeness4/5

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

For a create tool with 6 parameters and an output schema, the description covers the essential prerequisites, the attachment requirement, and the crucial fact that the new id is not returned. It omits error behavior and field formats, but these are not critical for basic invocation. Given the output schema exists, it doesn't need to explain return values beyond the id note.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must add meaning. It provides a brief line for each parameter (e.g., 'student_id: Student ID to attach the guardian to (from list_students)') which adds context beyond titles, but the descriptions are minimal and don't explain formats, constraints, or relationships beyond the basic mapping.

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

Purpose4/5

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

The description states a clear verb ('Create') and resource ('guardian/parent') and specifies the linking to a student. It is unambiguous about what the tool does. However, it does not explicitly differentiate from sibling tools like link_guardian_to_student, so it falls short of a 5.

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

Usage Guidelines3/5

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

The description implies when to use it (to create a new parent) but does not mention alternatives or explicitly state when not to use it. It gives a prerequisite (PS_ENABLE_WRITES) but lacks clear routing among the many parent-related siblings.

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

add_staffA

Add a teacher or other staff member to a school. Requires PS_ENABLE_WRITES.

ParentSquare emails the new account an address-verification/registration invite. Passing section_ids assigns them to those classes right away (as class_role, default TEACHER) — verified live, because ParentSquare's own "invited classes" field does not create the assignment until the person registers, so this tool makes the assignment itself.

Args: school_id: School ID first_name: Staff member's first name last_name: Staff member's last name email: Email address (optional but needed for them to register) phone: Phone number (optional) title: Title shown at the school, e.g. "3rd Grade Teacher" (optional) staff_id: The school's own staff/external ID (optional) is_admin: True to grant school Admin rather than Staff access section_ids: Class/section IDs to assign them to (from list_classes) class_role: Role for those classes — TEACHER (default) or ASSISTANT

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
phoneNo
titleNo
is_adminNo
staff_idNo
last_nameYes
school_idYes
class_roleNoTEACHER
first_nameYes
section_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and succeeds: it discloses that ParentSquare emails a registration invite, that section_ids create direct assignments because ParentSquare's own 'invited classes' field delays assignment until registration, and that is_admin grants Admin rather than Staff access.

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?

The structure is effective: a one-sentence purpose, a compact behavioral note about the registration invite and section assignment, and a skimmable Args list. It is slightly wordy in the ParentSquare explanation, but that detail justifies its place.

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 10-parameter mutation tool with no annotations and an output schema, the description is complete: it covers required permissions, side effects, parameter semantics, and the non-obvious class-assignment behavior. Return values are appropriately left to the output schema.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates fully by explaining every parameter, including optionality, defaults, and provenance. Examples include email being 'optional but needed for them to register,' section_ids coming 'from list_classes,' and class_role being 'TEACHER (default) or ASSISTANT.'

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?

The description opens with a specific verb and resource: 'Add a teacher or other staff member to a school.' This clearly distinguishes the operation from sibling tools like add_student and add_parent, and the mention of class_role and is_admin further sharpens the scope.

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

Usage Guidelines4/5

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

It provides clear context for when to use the tool—adding staff and optionally assigning them to classes immediately—and states the prerequisite PS_ENABLE_WRITES. It does not explicitly name alternatives such as add_class_staff or edit_staff, so exclusion guidance is left to inference.

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

add_studentA

Create a new student on a school's roster. Requires PS_ENABLE_WRITES.

Use list_grades(school_id) to find the grade_id. The new student's id is not returned by ParentSquare — call list_students afterward to retrieve it.

The roster is read back after the write, so the result says whether the student actually exists. If ParentSquare ever returns a 5xx here, do not retry on the status code alone: its error page is rendered after the record is saved, so the student may well have been created, and there is no API route to delete a duplicate.

Args: school_id: School ID first_name: Student first name last_name: Student last name grade_id: Grade ID (from list_grades) student_sis_id: Optional SIS/external student ID

ParametersJSON Schema
NameRequiredDescriptionDefault
grade_idYes
last_nameYes
school_idYes
first_nameYes
student_sis_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and excels: it discloses that the created id is not returned, that the roster is read back to verify success, and that a 5xx error may still mean the student was created because the error page renders after saving. It also flags that there is no delete route for duplicates, which is critical non-obvious behavior.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: the purpose is front-loaded, the workflow advice is actionable, and the 5xx caveat is essential. There is no filler or vague boilerplate.

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 tool with no annotations and low schema coverage, the description covers everything needed: precondition (PS_ENABLE_WRITES), prerequisite lookup (list_grades), post-write retrieval (list_students), failure semantics, parameter meaning, and duplicate-deletion risk. An output schema exists, so detailed return-value documentation is not necessary.

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 0%, so the description must compensate, and it does. Each parameter gets a one-line meaning, including the crucial note that grade_id comes from list_grades and that student_sis_id is optional and external. It could add more constraints (e.g., uniqueness expectations), but the provided semantics go well beyond the bare schema titles.

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?

The description opens with a specific verb and resource: 'Create a new student on a school's roster.' This clearly distinguishes it from sibling tools like add_parent, add_staff, and edit_student, and the focus on roster creation is immediately unambiguous.

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

Usage Guidelines4/5

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

The description provides concrete usage guidance: it requires PS_ENABLE_WRITES, tells the agent to use list_grades(school_id) to obtain grade_id, and instructs to call list_students afterward because the new id is not returned. It does not explicitly state when-not-to-use this tool versus edit_student, but the creation-vs-edit distinction is strongly implied.

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

bulk_invite_parentsA

Send registration invitations to multiple guardians at once. Requires PS_ENABLE_WRITES.

ParentSquare sends each unregistered guardian an email/text invite and automatically skips any that are already registered (the returned message reports how many of the selected users were actually notified). Get user_ids from list_parents(school_id) — typically those with registered=false. To "invite all", pass every unregistered user_id from list_parents.

Args: school_id: School ID user_ids: Guardian user IDs to invite (from list_parents)

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idsYes
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

The description discloses that the tool requires PS_ENABLE_WRITES (a prerequisite) and that it automatically skips already registered guardians, which is a behavioral nuance not apparent from the schema or annotations. It also indicates that the response reports how many were notified, which adds transparency about output. This is valuable beyond the schema.

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

Conciseness5/5

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

The description is well-structured, with a clear purpose statement, behavioral notes, and a concise parameter section. It is front-loaded with the most important context (what it does and the requirement), followed by workflow details. No superfluous wording.

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

Completeness4/5

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

Given the tool's moderate complexity (two params, clear purpose) and the presence of an output schema (not provided in detail but indicated), the description covers the essential aspects: purpose, prerequisites, parameter semantics, and behavior. It does not explain the output format in detail, but the output schema is available, and the description mentions the response reports notified count. This is complete enough for an agent to use it correctly.

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?

The schema provides only names and types (school_id: integer, user_ids: array of integers), with 0% schema description coverage. The description adds critical meaning by explaining that user_ids come from list_parents and should be unregistered guardians. It also implicitly defines school_id as the identifier for the school. This compensates for the lack of schema descriptions, though it could be more explicit about the exact format or constraints.

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?

The description clearly states the action (send registration invitations), the target (multiple guardians), and the purpose (to register them). It distinguishes itself from the sibling tool 'invite_parent' by focusing on bulk invites, and it refers to related tools like 'list_parents' for context.

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?

The description explicitly states when to use this tool ('to invite all' unregistered guardians) and provides a clear workflow: get user_ids from list_parents(school_id), typically those with registered=false. It does not explicitly mention when not to use it, but the workflow is specific enough to guide the agent.

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

download_fileA

Download a photo, video, or file to local disk from a ParentSquare URL.

Returns the local file path where the file was saved. Use URLs from list_photos, list_files, or get_post attachment results.

Args: url: The file URL (from list_photos, list_files, or get_post results) filename: Optional custom filename. If not provided, uses the original filename from the URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
filenameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description carries full behavioral burden. It states that it downloads and saves to local disk and returns the path, which is the core behavior. However, it does not disclose details like overwrite behavior, error handling, network requirements, or any side effects beyond writing a file. A simple but thin behavioral description.

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

Conciseness5/5

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

The description is concise and well-structured: purpose statement, return value, source guidance, then an args list. Every sentence contributes information without redundancy or fluff. Front-loaded with the verb phrase and key behavior.

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

Completeness4/5

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

For a tool with only 2 parameters, simple behavior, and an output schema (which likely details the returned path), the description covers the essentials: what it does, where inputs come from, and output. It does not elaborate on potential edge cases, but that is acceptable for this simplicity and the presence of an output schema.

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

Parameters5/5

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

Schema description coverage is 0%, so the description fully compensates. It explains the 'url' parameter as the file URL from specific sources, and 'filename' as an optional custom filename with default behavior (uses original from URL). This adds meaningful semantic detail beyond the bare schema.

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?

The description clearly states the verb 'Download' and the resource 'a photo, video, or file to local disk from a ParentSquare URL'. It also specifies the return value (local file path). This differentiates it from all sibling tools, which are list/get operations without local disk writes.

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

Usage Guidelines4/5

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

The description explicitly instructs to use URLs from list_photos, list_files, or get_post attachment results, which gives clear context on when to use the tool. It also explains the optional filename default behavior. While it doesn't mention when not to use it, there are no alternative download tools among siblings, so no exclusion needed.

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

edit_classA

Rename a class or change its room code / grades. Requires PS_ENABLE_WRITES.

Only provided fields change — current values are read back from the class first and resent, because the underlying endpoint replaces what it is given. Staff are not affected; use add_class_staff / remove_class_staff for those.

Args: section_id: Class/section ID (from list_classes) school_id: School ID the class belongs to name: New class name (optional) room: New room code / external ID, e.g. "Room 5" (optional) grade_ids: New list of grade IDs (optional; replaces the current grades)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
roomNo
grade_idsNo
school_idYes
section_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden, and it delivers: it discloses the read-modify-write mechanism, states that only supplied fields are changed, and warns that grade_ids replaces the current grades. This gives the agent accurate expectations about side effects.

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

Conciseness5/5

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

Each line carries distinct information: purpose, permission, behavioral mechanism, staff exclusion, then a clean Args block. There is no filler, and the most decision-relevant details are front-loaded.

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 5-parameter write tool with zero annotation coverage, the description covers prerequisites, update semantics, parameter semantics, and the alternative for staff. The presence of an output schema means the lack of return-value documentation is not a gap.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must explain every parameter, and it does: section_id is sourced from list_classes, name/room are marked optional with a format example, and grade_ids is explicitly 'new list ... replaces the current grades.' This adds substantial meaning beyond the bare types and null defaults.

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?

The opening sentence states a precise action and resource: 'Rename a class or change its room code / grades.' It enumerates exactly which attributes are editable, so an agent can immediately distinguish edit_class from sibling mutators like set_class_visibility or add_class_staff.

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?

It gives an explicit precondition ('Requires PS_ENABLE_WRITES') and a when-not-to-use rule: 'Staff are not affected; use add_class_staff / remove_class_staff for those.' This is a clear decision rule that prevents the most likely misuse, without making the agent infer from the sibling list.

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

edit_parentA

Update a guardian's name, email, or phone. Requires PS_ENABLE_WRITES.

Only provided fields change; existing student links are preserved. Get the user_id from list_parents(school_id).

Args: school_id: School ID user_id: Guardian's user ID (from list_parents) first_name: New first name (optional) last_name: New last name (optional) email: New email (optional) phone: New phone (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
phoneNo
user_idYes
last_nameNo
school_idYes
first_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries full behavioral disclosure burden. It provides strong context: the permission requirement, partial-update semantics ('Only provided fields change'), and a safety-relevant effect ('existing student links are preserved'). This goes well beyond the raw schema.

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

Conciseness5/5

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

The description is compact and well-structured: an opening purpose line, two behavioral notes, and a clean Args list. Every sentence adds useful information with no filler or repetition of schema details.

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 targeted guardian-edit tool, the description covers the required permission, how to obtain the required user_id, the partial-update behavior, and all parameters. An output schema exists, so not describing return values is acceptable. Nothing critical is missing for correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, so the Args block is essential. The description explains all six parameters, clarifies which are optional, and adds critical usage guidance for user_id ('from list_parents') that the schema alone does not 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?

The description starts with a clear, specific verb and resource: 'Update a guardian's name, email, or phone.' This directly states what the tool does and distinguishes it from sibling tools like add_parent, invite_parent, or link_guardian_to_student.

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

Usage Guidelines4/5

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

The description gives useful context by noting the PS_ENABLE_WRITES requirement and instructing the agent to obtain user_id from list_parents(school_id). It does not explicitly state when not to use this tool in favor of an alternative, but the intended editing use case is clear.

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

edit_staffA

Update a staff member's name, email, phone, title, or staff ID. Requires PS_ENABLE_WRITES.

Only provided fields change; everything else — including their class assignments and STAFF/ADMIN access level — is left untouched. Get the user_id from list_staff(school_id). To change which classes they teach, use add_class_staff / remove_class_staff instead. Guardians are rejected: use edit_parent for those.

Args: school_id: School ID user_id: Staff member's user ID (from list_staff) first_name: New first name (optional) last_name: New last name (optional) email: New email (optional) phone: New phone (optional) title: New title shown at the school, e.g. "3rd Grade Teacher" (optional) staff_id: The school's own staff/external ID (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
phoneNo
titleNo
user_idYes
staff_idNo
last_nameNo
school_idYes
first_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

No annotations are present, so the description carries the full burden. It discloses the PS_ENABLE_WRITES requirement, states that only provided fields change, explicitly says class assignments and STAFF/ADMIN access level are left untouched, and notes that guardians are rejected. This makes side-effect behavior clear for a mutating operation.

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

Conciseness5/5

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

The description is front-loaded with a one-sentence purpose, followed by a compact behavioral note and a clean Args block. There is no filler; every sentence provides actionable guidance.

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 mutating tool with two required identifiers and six optional update fields, the description covers prerequisites, side-effect boundaries, alternative routing, and all parameter meanings. An output schema exists, so return-value documentation is unnecessary; nothing essential for correct invocation is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the manual Args list is essential. It annotates school_id and user_id as identifiers, clarifies staff_id as the school's own external ID, gives an example for title, and marks every optional attribute, adding semantics the schema lacks.

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?

The first sentence names the exact operation ('Update a staff member's') and enumerates affected fields (name, email, phone, title, staff ID). It also separates itself from sibling tools by naming add_class_staff/remove_class_staff and edit_parent for related actions, making its purpose unambiguous.

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?

It explicitly says to use add_class_staff/remove_class_staff for class changes and edit_parent for guardians, and tells the agent to obtain user_id from list_staff(school_id). This gives clear when-to-use and alternatives guidance with no ambiguity.

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

edit_studentA

Update an existing student. Only provided fields change. Requires PS_ENABLE_WRITES.

Current values (name, SIS id, grade) are read from the edit form and preserved for any field you don't pass. Class enrollment is never touched — use add_class_students / remove_class_students / move_student_to_class.

Args: school_id: School ID student_id: Student ID (from list_students) first_name: New first name (optional) last_name: New last name (optional) student_sis_id: New SIS/external ID (optional) grade_id: New grade ID (optional; from list_grades)

ParametersJSON Schema
NameRequiredDescriptionDefault
grade_idNo
last_nameNo
school_idYes
first_nameNo
student_idYes
student_sis_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. It does so well: it states this is a partial update, that omitted fields are preserved, and that class enrollment is untouched. It doesn't state whether the operation is reversible, but it covers the key side effects an agent needs.

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

Conciseness5/5

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

Front-loaded with the core action and key constraint (provided fields only), then adds auth requirement, side-effect boundary, and parameter guidance. Each sentence earns its place.

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

Completeness4/5

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

Covers purpose, partial-update semantics, required permission, and explicit exclusion of class enrollment. It does not describe the return value, but an output schema exists and the write action is straightforward.

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 has zero parameter descriptionscars, but the Description adds meaning: it identifies which params are new values (first_name, last_name, student_sis_id, grade_id), marks grade_id as sourced from list_grades, and clarifies that optional fields are only updated when provided. This compensates well for the schema's lack of documentation.

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?

The first sentence states a specific action ('Update') on a specific resource ('an existing student') plus the settable fields (name, SIS ID, grade level). It is unmistakably distinct from add_student, edit_class, and read-only list/get siblings.

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?

The description explicitly declares the write prerequisite (PS_ENABLE_WRITES), clarifies that only provided fields change, and explicitly routes class-enrollment changes to sibling tools (add_class_students, remove_class_students, move_student_to_class). An agent knows when to call this tool and when not to.

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

get_calendar_eventsA

Get calendar events for a school using the ICS calendar export.

Returns JSON array of events with title, start/end times, location, and description. Note: Some schools post monthly calendars as images or PDFs in the feed instead of using the ICS calendar. If this returns no events, use get_feeds to browse recent posts — look for posts with "calendar" in the title or image/PDF attachments. Use get_post to view them (images are returned inline so you can read them).

Args: school_id: School ID

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and covers it well: it reveals the ICS export source, the exact JSON array shape with event fields, and the empty-result scenario. It even explains why results may be empty and how to recover, going well beyond the schema.

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

Conciseness5/5

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

The main purpose is front-loaded in one sentence, followed by a valuable fallback note and a minimal args line. Every sentence earns its place; no filler or repeated schema noise.

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?

Given a single integer argument, no output schema, and no annotations, the description is unusually complete: it documents the return payload, covers the foreseeable no-events case, and names the two alternate tools to pursue. Nothing needed to invoke the tool correctly is missing.

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

Parameters2/5

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

The only parameter is school_id, and the description's 'Args: school_id: School ID' merely restates the schema's property title and type. With schema_description_coverage at 0%, the description should compensate, but it adds no guidance about where to obtain the ID, format constraints, or validation.

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?

Description opens with 'Get calendar events for a school using the ICS calendar export', naming a specific verb, resource, and data source. It also distinguishes itself from feed/post tools by explaining when calendar data appears as images/PDFs instead.

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?

It gives explicit routing: if get_calendar_events returns no events, use get_feeds to look for posts with 'calendar' in the title or image/PDF attachments, then get_post to view them. This is exactly the when-to-use and alternative selection guidance an agent needs.

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

get_classA

Get one class with its full staff list (teachers, assistants, room parents).

Each staff entry includes the user_id (the person) and assoc_id (their link to this class). Use this before changing staff to see the current state.

Args: section_id: Class/section ID (from list_classes)

ParametersJSON Schema
NameRequiredDescriptionDefault
section_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It explains the return content (user_id and assoc_id) and notes it's for viewing current state, but lacks details on authentication, rate limits, or any side effects (unlikely for a get). It adds moderate value beyond a bare fetch.

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?

The description is compact with a clear intro, a usage note, and a parameter definition. It's front-loaded and to the point, though the usage note could be integrated more smoothly.

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

Completeness4/5

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

For a simple get tool with one parameter and an output schema, the description covers purpose, parameter, and use case adequately. It doesn't need to explain return values since output schema exists. Missing only minor behavioral details like pagination or error scenarios, which are irrelevant here.

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?

The single parameter section_id is explained as a class/section ID and imported from list_classes, compensating for the 0% schema coverage. This gives the agent clear sourcing guidance and prevents misuse.

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?

The description clearly states the tool fetches one class and its full staff list, specifying the resource and content. It distinguishes from siblings like list_classes (list all) and list_staff (global staff), making the purpose unmistakable.

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

Usage Guidelines4/5

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

Explicitly advises using this tool before changing staff to see the current state, providing a concrete use case. It implies the section_id comes from list_classes, but doesn't explicitly list exclusions or alternatives. Still, the guidance is clear and actionable.

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

get_conversationA

Read a specific message conversation thread with all messages.

IMPORTANT: Both school_id and chat_id are required.

Args: school_id: School ID (same school_id used in list_conversations) chat_id: Conversation/chat ID (from list_conversations results)

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that the tool reads a conversation thread with all messages, which implies a read-only operation. However, it doesn't describe return format, pagination, or any side effects. The description is accurate and adds some behavioral context (returns all messages in the thread), but lacks depth.

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?

The description is concise and front-loaded with the core purpose. The IMPORTANT note and Args section are clearly structured. It could be slightly more compact, but every sentence earns its place by clarifying required parameters and their provenance.

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

Completeness4/5

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

Given the tool has an output schema (so return values are documented elsewhere), the description covers the essential context: what it reads, that both parameters are required, and where to get the parameter values. It doesn't mention error conditions or edge cases, but for a simple read operation with an output schema, this is adequate.

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 description coverage is 0%, so the description must compensate. It does: it explains that school_id is the same one used in list_conversations and chat_id comes from list_conversations results. This adds meaning beyond the bare schema types (integer) and clarifies the relationship between parameters and the sibling tool.

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

Purpose4/5

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

The description states a specific verb ('Read') and resource ('a specific message conversation thread with all messages'), which clearly distinguishes it from list_conversations (which lists conversations) and get_post (which reads a post). It doesn't explicitly name a sibling, but the action and resource are clear enough to differentiate.

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

Usage Guidelines4/5

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

The description provides clear context: it reads a specific conversation thread, and it explicitly notes that both school_id and chat_id are required, referencing list_conversations as the source of these IDs. It doesn't explicitly state when not to use it or name alternatives, but the usage context is clear.

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

get_directoryA

List school contact info and staff directory with names, roles, and phone numbers.

Returns JSON with school details (phone, address) and staff records. Use get_staff_member(school_id, user_id) for full staff details including email, photo, and office hours.

Args: school_id: School ID

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden. It discloses that the tool returns JSON with school details and staff records, and implies it provides only basic info (via contrast with get_staff_member). It does not mention side effects, auth requirements, or pagination, but for a read-only list operation this is acceptable. The description adds value but leaves room for more behavioral context.

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?

The description is concise, using three short sentences plus a simple Args listing. The main purpose is stated first, followed by return format and a pointer to an alternative. It is appropriately sized and front-loaded with the most important information, though the Args section could be integrated more fluidly.

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

Completeness3/5

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

Given it is a simple list tool with a single parameter and no output schema, the description covers the essential return contents (school phone, address, staff records) and distinguishes itself from a more detailed sibling. However, it lacks details on potential limits, error handling, or whether the staff records include only names/roles/phones, which could be inferred but not explicit. It is adequate but not fully complete.

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

Parameters1/5

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

The schema has 0% description coverage for the single parameter school_id. The description only repeats 'School ID' in the Args section, adding no semantic meaning beyond the schema's type and title. This provides no guidance on format, constraints, or how to obtain the ID, which is a significant gap.

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?

The description clearly states the tool lists school contact info and staff directory with specific fields (names, roles, phone numbers). It also explicitly differentiates from get_staff_member by pointing out that tool provides full details. This is a specific verb+resource that distinguishes it from siblings.

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

Usage Guidelines4/5

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

The description explicitly directs users to get_staff_member for full staff details, indicating when not to use this tool. It implies usage when basic contact info and directory are needed. However, it does not mention any prerequisites or conditions beyond that contrast, leaving some ambiguity but still providing clear context.

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

get_feedsB

Get recent posts from a school's feed with titles, authors, dates, and summaries.

Returns a paginated list of posts. Use get_post with the feed_id to see full details.

Args: school_id: School ID page: Page number for pagination (default: 1)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It discloses that the tool returns a paginated list of posts with titles, authors, dates, and summaries, and it mentions the page parameter for pagination. However, it does not state whether the operation is read-only (though 'get' implies it), nor does it cover error handling, authentication requirements, or any side effects. The information is adequate but not comprehensive for a tool with zero annotation support.

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?

The description is concise and well-structured. The opening sentence states the purpose, the second notes the return type, the third gives a routing suggestion, and the Args section lists parameters. It front-loads the key purpose and avoids unnecessary fluff. The Args section is slightly redundant with the schema but justified given the schema's lack of descriptions. Overall, it is efficient and organized.

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

Completeness3/5

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

The description covers the main purpose, return content, pagination, and the alternative tool for full details. It does not explicitly differentiate from get_group_feed, nor does it mention any required permissions or error cases. Since an output schema exists (though not shown here), the description need not enumerate return fields, but it does mention the key fields. For a simple list operation, this is largely complete, but the lack of comparison with get_group_feed and any note on authentication leaves a small gap.

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

Parameters3/5

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

Schema description coverage is 0% (the schema properties have no descriptions), so the description's Args section is the only source of parameter meaning. It provides basic explanations: 'school_id: School ID' and 'page: Page number for pagination (default: 1)'. This adds some value over the bare schema, but the explanations are minimal. For a tool with only two simple parameters, this is sufficient, though it does not elaborate on constraints or formats beyond the obvious.

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

Purpose4/5

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

The description clearly states it gets recent posts from a school's feed, specifying the content (titles, authors, dates, summaries). It also indicates it returns a paginated list. This is specific enough to distinguish from get_post (which provides full details) and get_group_feed (which is for group feeds), though it does not explicitly name these siblings. The verb and resource are clear.

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

Usage Guidelines3/5

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

The description gives one explicit routing instruction: 'Use get_post with the feed_id to see full details.' This tells the agent when to switch to get_post. However, it does not mention when to use get_group_feed or other listing tools, nor does it state any exclusions. The guidance is helpful but incomplete for distinguishing among all sibling feed/list tools.

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

get_group_feedA

Get posts from a specific group's feed.

IMPORTANT: Both school_id and group_id are required.

Args: school_id: School ID (same school_id used in list_groups) group_id: Group ID (from list_groups results)

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only repeats the schema's required parameters and tells where to obtain them, but does not describe any behavioral traits such as pagination, ordering, error conditions, or whether the operation is read-only. This is a significant gap for a tool that might return a large feed.

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?

The description is concise, starting with the core purpose, then a clearly marked IMPORTANT note and a structured Args list. It avoids verbosity while delivering necessary parameter context. Slight improvement would be possible by merging the redundant required note, but it is well-organized and efficient.

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

Completeness3/5

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

Given an output schema exists (indicated by the context signal), the description need not explain return values. It covers the essential parameter origin and requirement. However, it lacks contextual details like pagination limits, ordering, or potential filters, and does not clearly distinguish its scope from sibling tools. For a simple getter this is acceptable but not rich.

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 description coverage is 0%, so the description must compensate. It does so by explaining that school_id is the same one used in list_groups and group_id comes from list_groups results, adding practical meaning beyond the bare integer types. This is sufficient for the two parameters involved.

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?

The description clearly states the tool retrieves posts from a specific group's feed, using a clear verb ('Get') and resource ('posts from a specific group's feed'). It differentiates from siblings like get_feeds (likely for all feeds) and get_post (single post) by specifying the group context.

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

Usage Guidelines3/5

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

The description implies usage by requiring school_id and group_id, and mentions they come from list_groups, which gives context. However, it does not explicitly state when to prefer this tool over alternatives like get_feeds or get_post, nor does it provide exclusions or criteria for selection. The usage guidance is implied rather than explicit.

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

get_postA

Get full details of a specific post including body text, comments, and attachments.

Image attachments are returned inline so you can see their contents directly. PDF attachments have their text extracted and included inline.

Args: feed_id: Post/feed ID (shown as feed_id in get_feeds results)

ParametersJSON Schema
NameRequiredDescriptionDefault
feed_idYes

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It explains that image attachments are returned inline and PDF attachments have their text extracted inline, which is meaningful behavioral context beyond a simple fetch. It does not mention error cases or pagination, but for a single-post retrieval tool this is adequate.

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?

The description is compact and front-loaded with the main purpose, followed by useful attachment behavior notes and a brief Args section. The Args block partly duplicates the schema, but it adds semantic value that the schema lacks, so no sentence is wasted.

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

Completeness4/5

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

For a single-parameter, no-output-schema, no-annotation tool, the description covers the essential call information: what the tool returns, how attachments are handled, and where the required parameter comes from. It is not exhaustive about response structure or errors, but it is sufficient for correct invocation.

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?

The schema only describes feed_id as an integer with title 'Feed Id', and description coverage is 0%. The description compensates by explaining that feed_id is a 'Post/feed ID' and, crucially, tells the agent where to find it in get_feeds results, which the schema does not convey.

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

Purpose4/5

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

The description clearly states a specific verb and resource: 'Get full details of a specific post including body text, comments, and attachments.' This distinguishes it from list-style tools like get_feeds and get_group_feed, though it does not explicitly contrast itself with any sibling.

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

Usage Guidelines2/5

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

The description gives a useful prerequisite by saying feed_id is 'shown as feed_id in get_feeds results', but it does not explain when to choose this tool over alternatives like get_group_feed or get_conversation. No exclusions or decision rules are provided.

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

get_staff_memberA

Get detailed info for a specific staff member including email, photo, and office hours.

Use get_directory first to find the user_id, then call this for full details. Returns structured data plus an inline profile photo when available.

Args: school_id: School ID user_id: Staff member's user ID (from get_directory results)

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes
school_idYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description must carry behavioral disclosure. It does say returns structured data plus an inline profile photo when available, adding conditional return behavior. However, it omits permissions, authentication requirements, and what happens if the user is not found; these are notable gaps for a non-annotated read tool.

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?

The description is short, to-the-point, and the most relevant information (purpose, then prerequisite, then return behavior) appears near the start. The Args block complement the schema, but it adds some redundancy; otherwise no sentence is wasted. It is slightly above average but not perfectly compact.

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

Completeness4/5

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

The tool is a simple two-parameter getter, and the description gives a workflow to obtain user_id, states the fields returned (email, photo, office), and caveats the profile photo as conditionally present. With no output schema, it explains enough for basic usage. Shortfalls are error or not-found behavior and permission assumptions, though for a read-only detail endpoint this stays primarily complete.

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

Parameters3/5

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

Schema description coverage is 0%, so the Args block supplies the only parameter context. It gives terse meaning '('School ID', 'Staff member's user ID (from get_directory results)') and the user_id provenance hint is genuinely useful, but it restates the parameter names without additional constraints, defaults, or allowed values.

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?

Description states a clear verb ('Get') and a specific resource ('detailed info for a specific staff member') including what details are returned (email, photo, office hours). It is distinct from siblings like list_staff and get_directory because it targets one member's full detail rather than a list or a directory entry.

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

Usage Guidelines4/5

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

It explicitly instructs the agent to call get_directory first to find the user_id, then use this tool, which is clear workflow guidance. It does not state when not to use the tool or mention list_staff as an alternative for bulk access, so it falls just short of full when/when-not coverage.

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

get_studentB

Get admin detail for one student (name, grade, SIS id, linked guardians, classes).

Args: student_id: Student ID (the id from list_students; == roster id)

ParametersJSON Schema
NameRequiredDescriptionDefault
student_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether this is a read-only operation, whether it requires special admin permissions, whether the student must exist (error behavior), or what happens if the ID is invalid. The phrase 'admin detail' hints at an admin context but does not disclose rate limits, data freshness, or side effects. For a single-record fetch, this is a notable gap.

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?

The description is compact and front-loaded: the first sentence states the purpose and return fields, and the Args line adds the critical ID provenance. Every sentence earns its place. It loses one point because the field list could be slightly more structured, but it is appropriately sized for a single-parameter tool.

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

Completeness3/5

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

The tool has an output schema, so return values are already documented. The description covers the input semantics well. However, with no annotations, the description should also disclose whether this is a safe read operation and any admin-context requirements. The absence of behavioral context makes it minimally viable but not complete.

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 description coverage is 0%, so the description must compensate. It does: it explains that student_id is the `id` from list_students and equates it to the roster id, which is meaningfully more than the schema's bare 'integer' type. This is exactly the kind of semantic clarification an agent needs to avoid passing the wrong identifier.

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

Purpose4/5

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

The description states a specific verb and resource: 'Get admin detail for one student' and enumerates the fields returned (name, grade, SIS id, linked guardians, classes). This clearly distinguishes it from list_students (which lists students) and get_student_dashboard (which likely returns a dashboard view). It could be slightly stronger by explicitly naming the sibling it is not, but the resource and field list make the purpose clear.

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

Usage Guidelines3/5

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

The description implies usage: call this when you need admin detail for a single student, and the Args note tells the agent to use the `id` from list_students. This is useful routing context. However, it does not explicitly state when to prefer get_student_dashboard or list_students, nor does it mention any exclusions or prerequisites beyond the ID source.

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

get_student_dashboardC

Get student dashboard information including school, grade, classes, and teachers.

Args: student_id: Student ID (use list_schools to see available students)

ParametersJSON Schema
NameRequiredDescriptionDefault
student_idYes

TDQS

C2.5/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden. It only implies a read operation via 'Get' and provides no details about permissions, authentication, side effects, or data shape. This is minimal behavioral disclosure.

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?

The description is appropriately short and front-loaded with the key purpose. The 'Args' section is somewhat redundant with the schema but does not add harmful bulk.

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

Completeness2/5

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

For a tool with no annotations and no output schema, the description is too thin. It gives the result categories but omits return shape, any required prerequisites, and a correct route to obtain a valid student_id. The misleading list_schools reference leaves a critical gap.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain the parameter. It adds that student_id identifies a student and suggests a source for it, but that source is wrong (list_schools instead of list_students). This makes the hint counterproductive.

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

Purpose4/5

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

The description states a clear verb and resource ('Get student dashboard information') and lists the composed data fields (school, grade, classes, teachers). This distinguishes it from generic lookups like get_student and list_students, though it does not explicitly name a sibling.

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

Usage Guidelines1/5

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

No when-to-use versus alternative guidance is provided. The only usage hint, 'use list_schools to see available students', is misleading because list_schools presumably lists schools, not students; the correct sibling would be list_students.

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

invite_parentA

Send (or resend) a ParentSquare registration invitation to one guardian. Requires PS_ENABLE_WRITES.

ParentSquare emails the guardian an invite to activate their account. The same endpoint is used to resend to an already-invited (but not yet registered) guardian. Get the user_id from list_parents(school_id); only guardians with registered=false need inviting.

Args: school_id: School ID user_id: Guardian's user ID (from list_parents)

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It discloses a prerequisite (PS_ENABLE_WRITES), the effect (ParentSquare emails the guardian), and that the same endpoint can resend. This is helpful, but it does not mention potential errors, idempotency beyond 'resend', or any rate limits. It covers the key behavioral traits adequately.

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

Conciseness5/5

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

The description is concise and well-structured. It front-loads the purpose, then explains usage and parameters in a compact block. No unnecessary words or repetition. The Args section cleanly lists parameters with short descriptions.

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?

Given the simplicity of the tool (2 parameters, no enums, output schema exists), the description covers all necessary aspects: purpose, usage condition, prerequisite, and parameter sources. It is complete for an agent to correctly invoke the tool. The output schema handles return values, so no need to repeat them.

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 description coverage is 0%, so the description must compensate. It provides brief but useful semantics: school_id is a School ID and user_id is the Guardian's user ID, with an explicit source (from list_parents). This adds meaning beyond the bare schema and helps an agent understand where the parameters come from.

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?

The description clearly states the action: send (or resend) a ParentSquare registration invitation to one guardian. It specifies the resource (registration invitation) and the target (one guardian), and distinguishes from bulk operations by emphasizing 'one guardian'. The mention of resending also clarifies a specific use case.

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

Usage Guidelines4/5

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

It gives clear context: get user_id from list_parents and only invite guardians with registered=false. This establishes when to use and when not to (unregistered guardians only). However, it does not explicitly name alternatives like bulk_invite_parents, though it implies single vs. bulk. The guidance is strong but not fully explicit about alternatives.

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

list_classesA

List a school's classes (sections) with grades, teachers, and room-parent counts.

Returns every class in one call. Use the section_id from results with get_class, edit_class, add_class_staff, remove_class_staff, and set_class_visibility.

Args: school_id: School ID (from list_schools) name_contains: Optional case-insensitive substring filter on class name grade: Optional case-insensitive filter on grade name (e.g. "Kindergarten")

ParametersJSON Schema
NameRequiredDescriptionDefault
gradeNo
school_idYes
name_containsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the 'one call' behavior and lists output fields (grades, teachers, room-parent counts), which adds value beyond the schema. However, it does not explicitly state that the operation is read-only, nor does it mention authentication, rate limits, or error conditions. Since 'List' implies a read action, it's not misleading, but the description could be more explicit about safety and performance implications.

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

Conciseness5/5

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

The description is concise and well-structured. The first sentence establishes the purpose, the second highlights the one-call behavior, the third links to other tools, and the args list is minimal. Every sentence adds value without redundancy, making it easy for an agent to parse quickly.

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

Completeness4/5

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

For a simple list tool with 3 parameters and an output schema, the description covers all inputs, explains the filters, and indicates the return includes section_id for chaining. It addresses potential pagination concerns with 'Returns every class in one call.' It doesn't detail the output schema, but that's fine since an output schema exists. Minor gaps: no mention of error handling or large-data considerations, but overall sufficient.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It fully explains each parameter: school_id is sourced from list_schools, name_contains is a case-insensitive substring filter, and grade is a case-insensitive filter with an example ('Kindergarten'). This provides clear semantics that the bare schema lacks, going beyond types and defaults.

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?

The description clearly states the operation: 'List a school's classes (sections) with grades, teachers, and room-parent counts.' It specifies the resource (classes), scope (a school), and output fields. It distinguishes itself from siblings by noting it returns every class in one call and identifies downstream tools that use the section_id, making it clear when to use this tool.

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

Usage Guidelines3/5

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

The description gives context: school_id comes from list_schools, and the result section_id is used with get_class, edit_class, etc. It also notes 'Returns every class in one call,' implying it's for comprehensive listing. However, it does not explicitly state when NOT to use this tool or name alternatives like list_class_students for filtered/specific needs. The chaining guidance is useful but not a full usage comparison.

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

list_class_studentsB

List the students enrolled in one class.

Args: section_id: Class/section ID (from list_classes)

ParametersJSON Schema
NameRequiredDescriptionDefault
section_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool lists students for a single class, but doesn't mention whether it returns full student objects or just IDs, whether it includes inactive/withdrawn students, or any pagination/ordering behavior. For a read-only list tool, this is a moderate gap.

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?

The description is compact: one sentence plus an Args note. It front-loads the purpose and gives the key parameter hint. No wasted words, though the Args section partially duplicates the schema.

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

Completeness3/5

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

The tool has an output schema, so return values are covered elsewhere. The description covers the essential input (section_id) and its source. It doesn't mention edge cases like empty classes or error conditions, but for a simple list-by-ID tool this is acceptable. The lack of behavioral details (e.g., whether it returns only active students) is the main gap.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does explain that section_id is a 'Class/section ID (from list_classes)', which adds provenance and meaning beyond the bare schema. However, it doesn't specify the expected format (integer is in schema) or any constraints beyond that. The single parameter is adequately explained for basic use.

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

Purpose4/5

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

The description states a specific verb and resource: 'List the students enrolled in one class.' This clearly distinguishes it from sibling tools like list_students (all students) and add_class_students (mutating enrollment). It doesn't explicitly name a sibling alternative, but the scope is clear enough.

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

Usage Guidelines3/5

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

The description implies usage: call it with a section_id to get students in that class. It doesn't explicitly state when to use this over list_students or get_class, but the 'one class' scoping and the Args note provide adequate context. No exclusions or alternatives are named.

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

list_conversationsA

List message conversations for a school. Returns conversation IDs, participants, and previews.

To read a full conversation, call get_conversation with BOTH the same school_id used here AND the chat_id shown in the results.

Args: school_id: School ID (use list_schools to find available IDs)

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. Describes output but does not disclose if it's read-only, pagination behavior, or authentication requirements. Acceptable for a simple list but lacks depth.

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?

Concise with two clear paragraphs. Slightly redundant 'Args' section but not excessive. Efficient use of words.

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

Completeness4/5

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

Covers key aspects: what it does, what it returns, how to use results. Output schema exists, so return values are handled. Adequate for the tool's complexity.

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

Parameters5/5

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

Though schema coverage is 0%, the description adds significant meaning to the single parameter by explaining it as a School ID and directing to list_schools. This goes beyond the schema's type-only definition.

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

Purpose4/5

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

Clearly states it lists message conversations for a school and specifies returned data (IDs, participants, previews). Distinguishes from get_conversation by noting it provides previews only, but does not explicitly differentiate from other list tools.

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?

Explicitly tells when to use get_conversation for full content and provides cross-reference to list_schools for finding school_id. Clear guidance on chaining tools.

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

list_filesB

List files and documents posted for a school. Returns file URLs for download_file.

Args: school_id: School ID

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the behavioral health. While it states 'Returns file URLs', it does not disclose whether the operation is read-only, requires special authorization, or handles availability or pagination. This gives the agent little insight into side effects or assumptions.

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?

The description is sharp and to the point, with no extra filler. The opening sentence immediately states what the tool does, and the argument listing is useful, though it adds no new information. It could benefit by moving the Args line directly beneath the purpose, but overall it is appropriately succinct.

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

Completeness3/5

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

Given the tool's simplicity (one parameter, straightforward output), the description gives a functional starting point. However, it omits potentially important context such as what range of dates is covered, whether the list is paginated, or what types of files/documents are included. With an output schema present, return values are not An issue here, but the usage context remains thin.

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

Parameters1/5

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

Schema description coverage is 0%, and the description only repeats the parameter name and a generic label ('school_id: School ID') without adding meaningful guidance. It does not explain how to obtain the school_id, its format, units, or relationship to other data, so added value beyond the schema is nonexistent.

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?

The description explicitly states 'List files and documents posted for a school', identifying a clear verb, resource, and scope. It differentiates from sibling tools like list_links and list_photos by specifying 'files and documents', making the purpose immediately comprehendible.

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

Usage Guidelines3/5

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

The description provides some usage context by noting that it returns file URLs for download_file, implying when to use it. However, it does not explicitly mention alternatives or give conditions such as 'use get_post to fetch files attached to a single post', so the guidance remains implicit.

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

list_formsA

List available forms and permission slips for a school.

Shows form titles, authors, and dates. These are signable forms that may require parent signatures (e.g. field trip permission, driver forms). Use get_post with the feed_id to see the full form content.

Args: school_id: School ID

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. It gives useful context: the tool returns form titles, authors, and dates rather than full content ('Use get_post with the feed_id to see the full form content'), and it notes these forms 'may require parent signatures' — a behavioral trait an agent benefits from knowing. It does not mention side effects, but the description strongly implies a read-only listing operation.

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

Conciseness5/5

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

The description is three sentences plus an Args block. Every sentence earns its place: it states the action, the output fields, the nature of the forms, and a pointer to the full-content tool. The most important information is front-loaded, and there is no fluff or repetition.

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

Completeness4/5

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

For a simple single-parameter list tool with an existing output schema, this description is complete. It explains what the tool returns, the type of forms covered, and the next step for full content. The one omission is that it doesn't explicitly mention what the absence of a school_id entails, but the schema marks it required, and the purpose is evident from the text.

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

Parameters3/5

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

The schema has zero description coverage, so the description must compensate. The only parameter, school_id, is addressed with 'school_id: School ID' in the Args section. This adds little beyond the schema's type and name, but the surrounding 'for a school' phrasing gives some context. It does not explain how to obtain the ID or validate it, so it adds only minimal value for a single obvious parameter.

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?

The description uses a specific verb-plus-resource construction: 'List available forms and permission slips for a school.' It also clarifies the result covers titles, authors, and dates, and gives concrete examples of form types (field trip permission, driver forms). This clearly separates it from sibling list tools like list_links or list_signups.

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

Usage Guidelines3/5

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

The description implies when to use it by stating it lists forms and permission slips, and it suggests a follow-up ('Use get_post with the feed_id to see the full form content'). However, it does not explicitly state when not to use it or contrast it with sibling list tools (e.g., list_signups, list_notices). The guidance is present but only implicit.

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

list_gradesA

List a school's grades with their grade_id values (needed for add_student).

Grades are per-school and discovered at runtime. Use the returned grade_id with add_student / edit_student.

Args: school_id: School ID (from list_schools)

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description must disclose behavioral traits. It mentions grades are per-school and discovered at runtime, adding context, but does not explicitly state read-only behavior, permissions, or other side effects. It relies on the verb 'List' to imply read-only.

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

Conciseness5/5

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

The description is concise, three lines including args, with no extraneous information. It front-loads the purpose and use case.

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

Completeness4/5

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

Given the presence of an output schema, the description adequately covers purpose, usage, and parameter semantics. It does not mention error handling or limitations, but for a simple list operation it is reasonably complete.

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 description coverage is 0%, so the description must compensate. The description explains school_id as 'School ID (from list_schools)', which tells the agent where to obtain it, adding value beyond the schema's type integer.

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?

The description clearly states the tool lists a school's grades and returns grade_id values needed for add_student. It uses specific verbs and resources, distinguishing it from sibling tools like list_schools and list_students.

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

Usage Guidelines4/5

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

It provides context that grades are per-school and discovered at runtime, and explicitly directs the user to use the returned grade_id with add_student/edit_student, which clarifies when this tool is appropriate in the workflow.

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

list_groupsA

List groups at a school with active post counts and descriptions.

To view a group's posts, call get_group_feed with BOTH the same school_id used here AND the group_id shown in the results.

Args: school_id: School ID (use list_schools to find available IDs)

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses that the tool lists groups with active post counts and descriptions, implying a read-only operation, but does not mention pagination, sorting, or any side effects. It adds some context (the relationship to get_group_feed) but lacks explicit statements about read-only guarantees or edge cases.

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

Conciseness5/5

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

The description is short and front-loaded with the primary purpose. It then gives a useful next-step hint and a parameter explanation, all in a compact structure. No superfluous text; every sentence adds value.

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

Completeness4/5

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

Given the presence of an output schema (which defines return shape), the description covers the essential call context: required parameter, how to obtain it, and how to follow up. It doesn't mention limitations like pagination or error handling, but for a simple list tool with one parameter, it is adequately complete.

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 description coverage is 0%, so the description must compensate. It explains that school_id refers to a school ID and directs the user to list_schools to find valid IDs, adding meaning beyond the raw integer type. This is sufficient for the single required parameter.

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?

The description states a specific action ('List groups at a school') with a clear object (groups) and key attributes (active post counts and descriptions). It differentiates from siblings like list_class_students or list_schools by being group-specific, so an agent can immediately recognize its unique purpose.

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

Usage Guidelines4/5

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

Provides explicit guidance on prerequisite steps: how to obtain school_id via list_schools, and how to proceed to view posts using get_group_feed with matching school_id and group_id. It names the relevant sibling and the condition for switching, though it doesn't explicitly state when not to use this tool (e.g., if you need a single group's details).

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

list_noticesC

List alerts and notices for a school (urgent alerts, secure documents, consent forms).

Args: school_id: School ID

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It indicates a read-only listing operation, but does not explain return behavior, pagination, filtering, authentication needs, or how the listed notices are structured. This leaves the agent with only the word 'list' plus resource categories.

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?

The description is brief and front-loaded, with no filler or promotional language. However, the 'Args' line largely repeats the schema and adds no real value, so it is not perfectly efficient.

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

Completeness3/5

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

For a simple one-parameter list operation, the description covers the resource and the required parameter, and the output schema presumably covers return shape. However, it lacks usage context, sibling differentiation, and any detail about filtering or special behavior, leaving the agent to infer when and how to invoke it.

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

Parameters1/5

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

The only parameter explanation is 'school_id: School ID', which simply restates the parameter name and adds no meaningful detail beyond the schema's integer type. The description fails to clarify where to obtain school_id or any constraints.

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

Purpose4/5

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

The description uses a specific verb and resource ('List alerts and notices') and scopes it to a school, with concrete categories (urgent alerts, secure documents, consent forms). It is clear about what the tool does, though it does not explicitly differentiate itself from sibling list tools.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool versus sibling tools like list_forms, list_signups, or list_polls. The description only implies that it is for school alerts and notices, but provides no exclusions, prerequisites, or alternative routing.

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

list_parentsA

List guardians/parents on a school's admin roster (user_id, name, email, phone, linked students).

Returns the full parent roster in one call. Use the user_id from results in edit_parent and link_guardian_to_student.

Args: school_id: School ID (from list_schools) name_contains: Optional case-insensitive substring filter on guardian name student_name_contains: Optional case-insensitive substring filter on the guardian's linked student names

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes
name_containsNo
student_name_containsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It states that the tool returns the full parent roster in one call and supports substring filters, but it does not explicitly mention read-only behavior, ordering, pagination, or invalid-input behavior. This is adequate but has gaps.

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

Conciseness5/5

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

The description is front-loaded with the purpose, followed by the key return behavior and downstream usage, then a clean Args list. Every line earns its place.

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

Completeness4/5

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

The description covers the required parameter, optional filters, and downstream user_id usage, while the output schema covers return fields. It could note whether filters combine or how results are ordered, but it is sufficient for correct invocation.

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

Parameters5/5

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

The input schema has 0% description coverage, so the description compensates by explaining school_id's source, name_contains as a case-insensitive substring filter, and student_name_contains as a filter on linked student names.

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?

The description explicitly names the verb and resource: listing guardians/parents on a school's admin roster, and it enumerates the returned fields. This clearly separates it from sibling list tools like list_students and list_staff.

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

Usage Guidelines4/5

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

It gives clear context for when to use the tool (get the full parent roster in one call) and downstream usage of the returned user_id. It does not explicitly name alternatives or exclusion conditions, so it stops short of a 5.

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

list_paymentsC

List payment items for a school with summary stats and item prices.

Shows upcoming/paid counts, total amount paid, and each payment post with its available items and prices.

Args: school_id: School ID

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations are absent, so the description carries the full burden. It does not state whether the operation is read-only, how it handles invalid or missing school_ids, whether pagination is involved, or any side effects. It only describes the output content (upcoming/paid counts, total amount, payment posts). For a list tool, read-only behavior is implied but not explicit, and error handling is entirely undisclosed.

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?

The description is compact: one sentence stating purpose, one sentence detailing output, and a minimal args line. It is front-loaded with the core action and provides useful output detail without unnecessary fluff. The structure is logical, though the args section could be more informative without hurting conciseness.

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

Completeness3/5

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

Given there is an output schema (though not shown), the description needn't enumerate every field, but it does give a high-level summary of what the tool returns (counts, total amount, payment posts with items/prices). However, it omits important operational context such as possible error conditions (e.g., invalid school ID), ordering of results, or any filtering options. For a simple one-parameter list, this is minimally acceptable but leaves gaps in handling edge cases.

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

Parameters1/5

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

The only parameter, school_id, has no schema description (coverage 0%). The description's 'Args' section says 'school_id: School ID', which is purely tautological and adds no semantic value beyond what the property name and integer type already convey. It neither explains the format, constraints, or usage, nor clarifies that it is an identifier for an existing school. The description fails to compensate for the schema's lack of documentation.

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

Purpose4/5

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

The description states a specific verb 'List', a clear resource 'payment items', and narrows scope to 'a school', adding 'summary stats and item prices' as the output focus. This distinguishes it from sibling list tools like list_schools or list_links, though it does not explicitly name alternatives. The purpose is unambiguous.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives, no prerequisites are mentioned, and there is no exclusion or condition to pick another tool. The phrase 'for a school' implies the need for a school_id but doesn't explain when this is the right choice among many list_* siblings. The agent is left to infer usage context.

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

list_photosB

List photos posted for a school. Returns photo URLs that can be used with download_file.

Args: school_id: School ID page: Page number (default: 1)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It usefully reveals that the tool returns URLs rather than image content and that those URLs are compatible with download_file. It does not mention pagination behavior, ordering, authorization requirements, or error conditions, though an output schema exists.

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?

The description is appropriately short and front-loaded, with the core purpose first, followed by the download_file integration note and a minimal Args list. The Args lines largely duplicate the schema but are brief and do not bloat the description.

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

Completeness3/5

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

For a simple two-parameter list tool with an output schema, the description covers the basic purpose, parameter names, and downstream usage. It is not fully complete because it omits any guidance on when not to use it, how pagination behaves beyond the default, or whether authentication/school context is required.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but the Args section merely restates what the schema already implies: school_id is a school ID and page is a page number. It adds no meaningful context such as how to obtain school_id, page bounds, or ordering semantics.

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

Purpose4/5

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

The description opens with a specific verb and resource: 'List photos posted for a school.' This clearly identifies what the tool does and distinguishes it from download_file by noting that it returns URLs. It does not explicitly contrast with the closely related list_files sibling, so it stops short of full differentiation.

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

Usage Guidelines4/5

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

The use case is clear: list photos for a school. The phrase 'Returns photo URLs that can be used with download_file' gives concrete downstream guidance on how to use the returned data. However, it does not state when to prefer this over alternatives like list_files, so exclusions are absent.

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

list_pollsA

List polls for a school with questions, options, and vote counts.

Shows each poll's question, answer options with vote totals, and which option is winning.

Args: school_id: School ID

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of disclosing behavior. It mentions that the tool shows poll questions, options, and vote counts, which gives some insight into the response. However, it doesn't disclose whether this is a read-only operation, whether pagination exists, or how many polls are returned. For a simple list tool with no annotations, this is adequate but not rich.

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

Conciseness5/5

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

The description is concise, with two sentences explaining what the tool does and what is returned, followed by a clear Args list. No fluff, and the essential information is front-loaded. The structure is clean and easy to parse.

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

Completeness4/5

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

The tool has an output schema, so return values are already defined. The description provides enough context for a simple list operation with one parameter. It might be missing guidance on edge cases (e.g., no polls available), but for a straightforward list tool with a clear output schema, it is sufficiently complete.

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?

The schema has 0% coverage since no descriptions are provided in the schema properties. The description adds meaning to the school_id parameter by stating it is the 'School ID', which is not in the schema. With only one parameter and no enum constraints, a baseline of 4 is appropriate as the description fully clarifies the parameter's purpose.

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

Purpose4/5

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

The description clearly states the verb 'List' and resource 'polls for a school', and explains what the response contains (questions, options, vote counts). It is distinguishable from siblings like list_notices or list_signups, which are clearly different entities, though no explicit differentiation is provided.

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

Usage Guidelines3/5

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

The description implies usage: to list polls for a school. It states the required school_id parameter but does not provide any context on when to use this tool versus others (e.g., no mention of alternatives or prerequisites). The usage context is clear but no exclusions or alternatives are given.

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

list_school_featuresA

List features available for a specific school by parsing its sidebar navigation.

Returns a list of available sections (Feed, Messages, Calendar, Photos, etc.). Different schools may have different features enabled.

Args: school_id: School ID (use list_schools to find available IDs)

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden. It discloses the mechanism (sidebar parsing), per-school variability, and the result shape (list of sections). It does not cover error behavior, but 'List' and 'parsing' make the read-only nature clear.

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

Conciseness5/5

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

Three short blocks with purpose front-loaded, illustrative examples, and an Args section. Every sentence earns its place; there is no fluff.

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

Completeness4/5

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

For a one-parameter, read-only list tool with an output schema, the description covers discovery, purpose, and parameter provenance. An agent can invoke it correctly based on this description alone.

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?

The schema has no parameter descriptions (0% coverage), but the Args block compensates: school_id is explained as 'School ID' and the description points to list_schools for valid values. This is actionable beyond the bare integer schema.

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 an explicit action ('List features available'), a specific resource ('for a specific school'), and the mechanism ('by parsing its sidebar navigation'). The return value is clearly described as available sections, distinguishing it from data-fetching siblings like get_feeds or get_calendar_events.

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

Usage Guidelines4/5

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

Hints at when to use it per-school because 'Different schools may have different features enabled.' It does not name sibling alternatives or exclusions, but the Args section gives a clear precondition by pointing to list_schools for finding valid IDs.

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

list_schoolsA

List available schools and students in your ParentSquare account.

Returns JSON with schools, students, and your user ID. Use the school_id and student_id values from this output in other tools. For school contact info (phone, address), use get_directory(school_id).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are present, so the description must carry the behavioral burden. It discloses an important behavior: returns JSON containing schools, students, and the user ID, which helps an agent know what to expect. However, it does not mention pagination, filtering, or potential failure modes, leaving some behavior opaque.

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

Conciseness5/5

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

Three sentences with no filler; the main action and output format are front-loaded. The get_directory pointer is a routing hint that earns its place without bloating the description.

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 zero-parameter listing tool, the description covers purpose, output contents, and next-step usage. Since an output schema exists and this is a simple operation, nothing critical for invoking it 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?

The tool has zero parameters, so schema coverage is trivially complete and the baseline is 4. The description adds value by explaining that the output values, school_id and student_id, are meant to be consumed as inputs by other tools.

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

Purpose4/5

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

States a specific verb and resource: lists schools and students in the ParentSquare account. This clearly identifies the tool's function, though it does not explicitly differentiate it from siblings like list_students or list_class_students.

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

Usage Guidelines4/5

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

Provides clear context: use the returned school_id and student_id in other tools, and use get_directory for contact info. It lacks explicit when-not-to-use guidance relative to list_students or list_class_students, but the pointers are actionable.

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

list_signupsA

List sign-up and RSVP posts for a school (item donations, volunteer slots, event RSVPs).

Shows each signup post with its title, progress (e.g. "53/103 Items"), and author. Use get_post with the feed_id to see full signup details including individual items.

Args: school_id: School ID page: Page number for pagination (default: 1)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden. It reveals that the tool returns summaries with title, progress, and author, illustrates the progress format, and notes that detailed items require get_post. It omits auth or pagination-depth caveats, but these are minor for a read-only listing with an output schema.

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?

The description is front-loaded with the core purpose, then provides a compact output summary, a useful cross-reference, and a short Args block. It is efficiently sized, though the Args section somewhat duplicates the input schema.

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

Completeness4/5

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

For a two-parameter list tool, the description plus schema covers the required school_id, optional page, the fields returned, and the follow-up path to get_post. The presence of an output schema covers return shape, so an agent has enough to call it correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It restates school_id as 'School ID' and page as 'Page number for pagination (default: 1)', adding the default but little else. It does not explain page size, response ordering, or how school_id relates to feeds, so it only partially compensates for the absent schema descriptions.

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?

The description states a specific verb and resource: 'List sign-up and RSVP posts for a school', with concrete examples such as item donations, volunteer slots, and event RSVPs. This clearly separates it from sibling list tools like list_links or list_notices and from get_post.

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

Usage Guidelines4/5

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

It explicitly directs agents to 'Use get_post with the feed_id to see full signup details including individual items', giving a concrete alternative for deeper detail. It does not, however, enumerate exclusions or compare against other list_* siblings, so it stops short of full routing guidance.

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

list_staffA

List a school's staff and admins (user_id, name, email, phone, role/title).

Use the returned user_id with add_class_staff to assign a teacher to a class.

Args: school_id: School ID (from list_schools) name_contains: Optional case-insensitive substring filter on staff name

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes
name_containsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the return fields and the optional name_contains filter behavior (case-insensitive substring). However, it doesn't mention pagination, ordering, or whether admins are included in the same list or distinguished by role. It's adequate but not rich.

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

Conciseness5/5

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

The description is compact and front-loaded: the main purpose is in the first sentence, followed by a usage tip and parameter explanations. Every sentence earns its place; no filler.

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

Completeness4/5

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

Given the tool's simplicity (2 params, 1 required, output schema present), the description covers the essential usage: what it returns, how to use the result, and how to obtain the required parameter. It doesn't mention pagination or sorting, but for a list tool with an output schema, this is a minor gap.

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 description coverage is 0%, so the description must compensate. It explains school_id as coming from list_schools and name_contains as a case-insensitive substring filter on staff name. This adds real meaning beyond the raw schema, though it doesn't detail the exact format of the name filter (e.g., wildcards).

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?

The description states a specific verb ('List'), a resource ('a school's staff and admins'), and the exact fields returned (user_id, name, email, phone, role/title). It also distinguishes itself from siblings like get_staff_member and list_students by focusing on staff/admins. The purpose is unambiguous.

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

Usage Guidelines4/5

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

The description gives clear context: it lists staff for a school, and explicitly tells the agent to use the returned user_id with add_class_staff. It also references list_schools for the school_id. It doesn't explicitly say when NOT to use it versus get_staff_member, but the context is strong enough for an agent to select it correctly.

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

list_studentsA

List students on a school's admin roster (id, name, grade, SIS id, guardians).

Returns the full roster in one call. Use the id from results as student_id in get_student, edit_student, add_parent, and link_guardian_to_student.

Args: school_id: School ID (from list_schools) grade: Optional case-insensitive filter on grade name (e.g. "2nd Grade") name_contains: Optional case-insensitive substring filter on student name

ParametersJSON Schema
NameRequiredDescriptionDefault
gradeNo
school_idYes
name_containsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It explicitly states 'Returns the full roster in one call', indicating no pagination, and notes that the id from results is intended for use as student_id in other operations. It does not state read-only status explicitly, but 'list' and 'roster' imply it. The description adds meaningful behavioral context beyond the schema, though it could mention ordering or any implicit constraints.

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

Conciseness5/5

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

The description is concise and well-structured: a one-sentence purpose, a behavioral note, and a clean Args list. No filler or redundancy. Front-loads the main purpose and then details parameters efficiently.

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

Completeness4/5

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

Given the presence of an output schema, the description need not enumerate return fields, yet it does highlight the key fields. It explains parameter sources and chaining behavior. However, it lacks explicit mention of ordering or any limits on the number of students, though 'full roster' implies all. Overall it's complete enough for an agent to invoke correctly, with minor gaps in MS.

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

Parameters5/5

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

Schema description coverage is 0%, so the Args section fully explains each parameter: school_id is sourced from list_schools, grade is an optional case-insensitive filter with an example, and name_contains is an optional substring filter. This adds clear semantics that the schema alone does not provide, effectively compensating for the lack of schema-level descriptions.

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?

The description states a specific action ('List students') on a specific resource ('a school's admin roster') and lists the fields returned (id, name, grade, SIS id, guardians). It clearly distinguishes from siblings like list_class_students by emphasizing 'admin roster' and 'full roster'. The purpose is unambiguous and not a tautology.

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

Usage Guidelines3/5

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

The description provides some usage context: it returns the full roster in one call and instructs how to chain the resulting id into subsequent tools (get_student, edit_student, etc.). However, it does not explicitly mention when to use this tool instead of list_class_students or other list functions, nor does it state any exclusion criteria. The guidance is implicit through 'full roster' but lacks direct alternatives.

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

list_volunteer_hoursA

List your logged volunteer hours for a school.

Shows each logged entry with month, activity type, notes, and hours.

Args: school_id: School ID

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

There are no annotations, so the description must carry the behavioral burden. It does convey that the tool returns logged entries with specific fields and is clearly a read/list operation, but it does not mention ordering, pagination, authorization/ownership limits, or explicitly confirm that no mutations occur. This is acceptable for a simple list tool but leaves gaps.

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

Conciseness5/5

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

The description is concise and front-loaded with the main purpose. It includes a useful list of displayed fields and a minimal args block, with no verbose filler or unnecessary background. Every sentence contributes directly to the basic behavior.

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

Completeness3/5

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

For a tool with one parameter and an output schema, the description is nearly sufficient but still misses minor context: how to source school_id, whether the list is ordered, and how large the result set could be. The presence of an output schema covers return shape, so the remaining gaps are modest.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it only repeats 'school_id: School ID' which adds essentially nothing beyond the schema's property name and type. It does not say where to get the school_id, how to ensure it belongs to the current user, or whether the field carries any further meaning.

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?

The description uses a specific verb and resource: 'List your logged volunteer hours for a school.' It also identifies the key output fields (month, activity type, notes, hours), and the resource is distinct enough from all sibling list_* tools that an agent can select it without opening the schema.

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

Usage Guidelines3/5

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

The description makes the main use case clear—listing someone's logged volunteer hours for a school—but it gives no explicit guidance on when to prefer this over alternatives, no prerequisite steps (e.g., getting school_id via list_schools), and no exclusions. This is adequate but not a complete usage guide.

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

move_student_to_classA

Switch a student from one class to another. Requires PS_ENABLE_WRITES.

SAFETY: Never call this tool or another class-staff/student-enrollment write in parallel. The student's full class list is replaced, so the server holds one global lock across the read, computation, and PUT within this process.

Applies both halves of the switch in a single request. The student's other classes are preserved. Omit from_section_id to add the new class while keeping every current one.

Args: school_id: School ID the classes belong to student_id: Student ID (from list_students) to_section_id: Class to move the student into (from list_classes) from_section_id: Class to move them out of (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes
student_idYes
to_section_idYes
from_section_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full burden, and it excels: it discloses that this is a write operation, requires PS_ENABLE_WRITES, replaces the student's full class list under a global lock, preserves other classes, and handles both halves of the switch atomically. This is exactly the kind of non-obvious behavior an agent needs to know before calling.

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

Conciseness5/5

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

The description is well-organized: purpose, prerequisite, safety warning, operational behavior, then parameter semantics. The longer safety block is warranted because the concurrency constraint is critical. Every sentence adds value and the structure makes it easy to scan.

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 mutation tool with no annotations, this is complete: it explains the write requirement, the locking behavior, the exact effect on existing enrollments, and how to achieve add-vs-move semantics. The output schema exists, so return values do not need to be described. An agent has everything needed to invoke it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate, and it does. Every parameter is given real meaning: school_id scopes the classes, student_id is sourced from list_students, to_section_id comes from list_classes, and from_section_id is optional with a clear effect. This is significantly more useful than the bare schema titles.

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?

The description opens with a specific verb and resource: 'Switch a student from one class to another.' It further clarifies scope by explaining that both halves of the switch happen in a single request and that other classes are preserved, which distinguishes it from sibling add/remove enrollment tools. The purpose is unmistakable even without opening the schema.

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

Usage Guidelines4/5

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

The description gives clear behavioral guidance: never run in parallel with other enrollment writes, and omit from_section_id to add rather than move. It states the PS_ENABLE_WRITES prerequisite and explains when the optional parameter changes the operation. It does not explicitly name sibling alternatives, but the guidance is strong enough for an agent to decide when to use this tool.

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

remove_class_staffA

Remove staff or room parents from a class. Requires PS_ENABLE_WRITES.

SAFETY: Never call this tool or add_class_staff in parallel, even for different sections. ParentSquare replaces the full staff list, and concurrent writes have caused unrelated associations to disappear. The server serializes calls within this process; still use one call at a time and verify with a fresh get_class read before the next class-staff write.

Pass user_ids to remove specific people, role to remove everyone holding that role on the class (e.g. role="ROOM_PARENT" clears that class's room parents), or both to remove only those people who hold that role. Everyone else on the class is preserved. To clear room parents school-wide, call list_classes and repeat this for each class with room_parent_count > 0.

Args: section_id: Class/section ID (from list_classes) user_ids: One or more people to remove (optional if role is given) role: Remove all holders of this role: TEACHER, ASSISTANT, or ROOM_PARENT

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNo
user_idsNo
section_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries full disclosure. It states the PS_ENABLE_WRITES requirement, warns that ParentSquare replaces the full staff list and that concurrent writes can cause unrelated associations to disappear, recommends serialization and verification with a fresh get_class read, and clarifies that everyone else on the class is preserved. This is thorough and candid.

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

Conciseness5/5

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

The description is focused and front-loaded: purpose first, then a labeled SAFETY section, then usage modes. Every sentence carries operational value; there is no filler. The structure makes critical warnings prominent without burying the core instructions.

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 mutation tool with multiple invocation patterns, the description covers prerequisites, side effects, concurrency risks, parameter semantics, and a step-by-step workflow for a complex scenario (school-wide clearing). An output schema exists, so return details are not necessary here. Nothing needed to call it correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must explain each parameter and it does: section_id is defined as 'Class/section ID (from list_classes)', user_ids as 'One or more people to remove', and role as 'Remove all holders of this role: TEACHER, ASSISTANT, or ROOM_PARENT'. It also explains how they interact (both to filter by role+user), adding value far beyond the schema.

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?

The description opens with 'Remove staff or room parents from a class.' This is a specific verb+resource with clear scope. It also distinguishes from the sibling add_class_staff by mentioning it in the safety note, so an agent can tell them apart without opening the 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?

The description provides explicit when-to-use guidance: it explains the three modes (user_ids, role, both), gives a concrete example for ROOM_PARENT, and instructs on school-wide clearing via list_classes. It also warns against parallel calls with add_class_staff, clarifying the alternative. No ambiguity remains.

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

remove_class_studentsA

Remove specific students from a class. Requires PS_ENABLE_WRITES.

SAFETY: Never call this tool or another class-staff/student-enrollment write in parallel. The server serializes the complete school-map read and all resulting student writes within this process.

Each student's other classes are read first and preserved — only this class is dropped. student_ids is required: this tool will not empty a class.

Args: school_id: School ID the class belongs to section_id: Class/section ID (from list_classes) student_ids: The students to remove (from list_class_students)

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYes
section_idYes
student_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden, and it does so thoroughly. It discloses the PS_ENABLE_WRITES requirement, the serialization constraint, the preservation of each student's other classes, and the refusal to empty a class. These details go well beyond a simple mutation statement and reveal important side-effect semantics.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then safety, then semantics, then argument definitions. Every sentence earns its place, and the warning about parallel writes is prominent and concise. It is appropriately sized for the complexity of the operation.

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?

Despite having no annotations, the description covers the critical invocation aspects: required permission, concurrency constraints, side-effect preservation, empty-class guard, and parameter sources. Since an output schema exists, the lack of return-value detail is acceptable. An agent has enough information to call this tool safely and correctly.

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 0%, so the description must compensate, and it does. It explains school_id as the student's school, section_id as coming from list_classes, and student_ids as coming from list_class_students, which gives the agent provenance for valid values. It also reinforces the required, non-empty nature of student_ids, adding meaning beyond the raw property definitions.

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?

The first sentence, 'Remove specific students from a class,' states a precise verb and resource, and the qualifier 'specific' distinguishes it from class-wide mutation tools like add_class_students or move_student_to_class. The subsequent guard 'student_ids is required: this tool will not empty a class' further clarifies exact scope.

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

Usage Guidelines4/5

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

The description gives clear context: it removes only specific students, preserves other class enrollments, and will not empty a class. It also provides a strong concurrency exclusion: never call it in parallel with other class-staff or student-enrollment writes. It does not explicitly name alternative sibling tools, but the behavioral context is enough to guide correct invocation.

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

set_class_visibilityA

Show or hide classes for staff, parents, and students. Requires PS_ENABLE_WRITES.

Newly created classes start hidden, so a class made with add_class needs this before anyone can see or post to it. Hidden classes are not visible to staff, parents, or students.

Args: school_id: School ID section_ids: Class/section IDs to update (from list_classes) visible: True to make the classes visible, False to hide them date: Optional YYYY-MM-DD date the change takes effect; defaults to today

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
visibleYes
school_idYes
section_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description must carry the burden. It discloses the write prerequisite, the visibility effect, and the date default. It does not discuss edge cases like idempotency, existing posts under a hidden class, or error conditions, but it does state the core behavioral outcome.

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?

The description is well-structured: a purpose sentence, a context sentence, and a clear Args list. Every sentence adds value; no fluff. The front-loaded purpose makes it immediately actionable.

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

Completeness4/5

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

An output schema exists, so return values are presumably covered. The description covers all required parameters, the prerequisite, and the effect. It could mention more about side effects, but for a visibility toggle it provides sufficient context for an agent to call it correctly.

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 0%, so the description's Args section is essential. It explains each parameter: school_id as 'School ID', section_ids as 'from list_classes', visible as boolean meaning, and date with format and default. This adds meaning beyond the bare schema and compensates for the lack of schema descriptions.

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?

The description states an explicit verb-and-resource pair ('Show or hide classes') and explains the specific audience (staff, parents, students). It also connects to add_class by noting newly created classes start hidden, which distinguishes this tool from other class-related siblings.

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

Usage Guidelines4/5

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

Gives a clear prerequisite (PS_ENABLE_WRITES) and a concrete scenario: 'a class made with add_class needs this before anyone can see or post to it.' It does not explicitly list alternatives or when not to use it, but the context implies the typical workflow after class creation.

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

submit_mfa_codeA

Submit a 6-digit MFA verification code to complete ParentSquare login.

When a ParentSquare tool returns an MFA error, a verification code is sent to your email. Check your email for the code and use this tool to complete authentication.

Args: code: The 6-digit verification code from your email

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It explains the trigger (MFA error) and the action (submit code to complete authentication), which is helpful. However, it does not disclose potential side effects, such as whether submitting an incorrect code locks the account, whether the code expires, or what the response contains on success/failure. The description is adequate but not rich in behavioral detail.

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

Conciseness5/5

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

The description is concise and well-structured. It front-loads the core purpose in the first sentence, then provides context and parameter details in a clear, scannable format. Every sentence earns its place: the trigger condition, the source of the code, and the parameter explanation. No fluff or redundancy.

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

Completeness4/5

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

For a single-parameter authentication tool, the description is nearly complete. It explains the trigger, the parameter, and the goal. The output schema exists, so return values need not be described. The only minor gap is the lack of error-handling details (e.g., what happens on invalid/expired code), but this is not critical for an agent to invoke the tool correctly.

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?

The schema has 0% description coverage, so the description must compensate. It does: it explains that 'code' is the 6-digit verification code from email, adding format (6-digit) and source (email) beyond the schema's bare 'Code' title. This is meaningful semantic enrichment. A score of 4 is appropriate because it fully clarifies the only parameter, though it could have added examples or validation details.

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?

The description clearly states the tool's purpose: submitting a 6-digit MFA verification code to complete ParentSquare login. It uses a specific verb ('Submit') and resource ('MFA verification code'), and it distinguishes itself from the sibling tools, which are all data-retrieval or management operations. The context about when it is used (after an MFA error) further clarifies its unique role.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: when a ParentSquare tool returns an MFA error and a verification code is sent to email. It explains the workflow (check email, submit code). However, it does not explicitly state when not to use it or mention alternatives, though the sibling list makes it obvious that this is the only authentication tool. The guidance is sufficient for an agent to know when to invoke it.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 48 tool updatesv0.3.0
    • First observedadd_class
    • First observedadd_class_staff
    • First observedadd_class_students
    • First observedadd_parent
    • First observedadd_staff
    • First observedadd_student
    • First observedbulk_invite_parents
    • First observeddownload_file
    • First observededit_class
    • First observededit_parent
    • First observededit_staff
    • First observededit_student
    • First observedget_calendar_events
    • First observedget_class
    • First observedget_conversation
    • First observedget_directory
    • First observedget_feeds
    • First observedget_group_feed
    • First observedget_post
    • First observedget_staff_member
    • First observedget_student
    • First observedget_student_dashboard
    • First observedinvite_parent
    • First observedlink_guardian_to_student
    • First observedlist_class_students
    • First observedlist_classes
    • First observedlist_conversations
    • First observedlist_files
    • First observedlist_forms
    • First observedlist_grades
    • First observedlist_groups
    • First observedlist_links
    • First observedlist_notices
    • First observedlist_parents
    • First observedlist_payments
    • First observedlist_photos
    • First observedlist_polls
    • First observedlist_school_features
    • First observedlist_schools
    • First observedlist_signups
    • First observedlist_staff
    • First observedlist_students
    • First observedlist_volunteer_hours
    • First observedmove_student_to_class
    • First observedremove_class_staff
    • First observedremove_class_students
    • First observedset_class_visibility
    • First observedsubmit_mfa_code

TDQS

A3.5/5.0

Scored across 48 tools

Disambiguation4/5

Most tools are clearly scoped to distinct resources (students, staff, classes, parents, feeds, payments), and the descriptions reinforce boundaries. Minor overlap exists between list_students/get_student and list_staff/get_staff_member, and between list_class_students and get_class, but the descriptions clarify the differences.

Naming Consistency4/5

The set overwhelmingly follows a consistent verb_noun pattern (list_*, get_*, add_*, edit_*, remove_*, move_*, set_*, submit_*, download_*, invite_*, bulk_invite_*). Minor deviations: get_feeds/get_post vs list_* for other read operations, and get_student_dashboard doesn't follow the resource pattern, but these are understandable.

Tool Count3/5

48 tools is on the heavy side, but the server covers a broad domain (school communication, rosters, classes, staff, parents, payments, forms, photos, calendar). The count is justified by the breadth, though it pushes the upper bound of what an agent can comfortably navigate.

Completeness4/5

The surface covers the core ParentSquare domains well: read operations for feeds, conversations, calendar, photos, files, directory, groups, signups, notices, polls, payments, forms, volunteer hours, and full admin CRUD for students, parents, staff, and classes. Minor gaps: no way to create posts, send messages, or unlink guardians, and no delete operations for students/staff/classes, but the stated scope (school info + roster management) is largely complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables natural language queries about grades, GPA, attendance, and schedules by connecting Claude to StudentVue school dashboards. Includes analytical tools for grade simulation, what-if scenarios, and academic performance tracking based on live school data.
    19
    -
  • F
    license
    A
    quality
    C
    maintenance
    A local MCP server for reading ParentSquare data (feeds, calendar, messages, directory, groups, and more) using undocumented internal APIs. It enables Claude, Cursor, and other MCP clients to access your ParentSquare account via stdio.
    23
    1
    -