Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.thehesiod/psquare

PYPI · PARENTSQUARE-MCP · SCANNED SEP 21

MCP server for ParentSquare — feeds, calendars, messages, directories, and admin roster tools

Available components

+4 this week 62 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 2 of 39 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
Schema Quality & AI Usability78
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 5645 tokens (~117/item across 48 items; 48 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management87
  • Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (90% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "invite_parent" implies "send" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 49 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the io.github.thehesiod/psquare MCP server?

io.github.thehesiod/psquare runs locally as a PyPI package, launched with uvx parentsquare-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · parentsquare-mcp

# add to Claude Code
claude mcp add thehesiod-psquare -- uvx parentsquare-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "thehesiod-psquare": {
      "command": "uvx",
      "args": [
        "parentsquare-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "thehesiod-psquare": {
      "command": "uvx",
      "args": [
        "parentsquare-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add thehesiod-psquare -- uvx parentsquare-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "thehesiod-psquare": {
      "type": "local",
      "command": [
        "uvx",
        "parentsquare-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add thehesiod-psquare --command uvx --arg parentsquare-mcp
# ~/.hermes/config.yaml
mcp_servers:
  thehesiod-psquare:
    command: "uvx"
    args: ["parentsquare-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "thehesiod-psquare": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "parentsquare-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add thehesiod-psquare -t stdio -c uvx -a parentsquare-mcp
// mcp.json
{
  "mcpServers": {
    "thehesiod-psquare": {
      "command": "uvx",
      "args": [
        "parentsquare-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Sept 26 +1
    • Security disclosure: unverified → fail functional
  • 17 Sept 26 +1
    • Security disclosure: fail → unverified functional
  • 15 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

  • 13 Sept 26 −15
    • Malware scan: pass → unverified security
  • 12 Sept 26 +16
    • Malware scan: unverified → pass security
  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

  • 8 Sept 26 −14
    • Malware scan: pass → unverified security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Analysed pypi/parentsquare-mcp@0.4.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 39 packages
Packages resolved 39
Stale 1
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 48 exposed · ~5,570 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_class ~127

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)

NameTypeReqDescription
grade_idsarrayyes
namestringyes
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

add_class_staff ~279

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)

NameTypeReqDescription
class_title
rolestringyes
section_idintegeryes
user_idsarrayyes
NameTypeReqDescription
resultstringyes

No examples provided.

add_class_students ~186

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)

NameTypeReqDescription
section_idintegeryes
student_idsarrayyes
NameTypeReqDescription
resultstringyes

No examples provided.

add_parent ~155

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)

NameTypeReqDescription
email
first_namestringyes
last_namestringyes
phone
school_idintegeryes
student_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

add_staff ~301

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

NameTypeReqDescription
class_rolestring
email
first_namestringyes
is_adminboolean
last_namestringyes
phone
school_idintegeryes
section_ids
staff_id
title
NameTypeReqDescription
resultstringyes

No examples provided.

add_student ~221

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

NameTypeReqDescription
first_namestringyes
grade_idintegeryes
last_namestringyes
school_idintegeryes
student_sis_id
NameTypeReqDescription
resultstringyes

No examples provided.

bulk_invite_parents ~139

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)

NameTypeReqDescription
school_idintegeryes
user_idsarrayyes
NameTypeReqDescription
resultstringyes

No examples provided.

download_file ~105

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.

NameTypeReqDescription
filename
urlstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

edit_class ~174

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)

NameTypeReqDescription
grade_ids
name
room
school_idintegeryes
section_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

edit_parent ~146

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)

NameTypeReqDescription
email
first_name
last_name
phone
school_idintegeryes
user_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

edit_staff ~241

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)

NameTypeReqDescription
email
first_name
last_name
phone
school_idintegeryes
staff_id
title
user_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

edit_student ~182

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)

NameTypeReqDescription
first_name
grade_id
last_name
school_idintegeryes
student_idintegeryes
student_sis_id
NameTypeReqDescription
resultstringyes

No examples provided.

get_calendar_events ~126

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

NameTypeReqDescription
school_idintegeryes

No output schema declared.

No examples provided.

get_class ~84

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)

NameTypeReqDescription
section_idintegeryes
NameTypeReqDescription
resultyes

No examples provided.

get_conversation ~78

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)

NameTypeReqDescription
chat_idintegeryes
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

get_directory ~79

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

NameTypeReqDescription
school_idintegeryes

No output schema declared.

No examples provided.

get_feeds ~83

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)

NameTypeReqDescription
pageinteger
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

get_group_feed ~73

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)

NameTypeReqDescription
group_idintegeryes
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

get_post ~75

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)

NameTypeReqDescription
feed_idintegeryes

No output schema declared.

No examples provided.

get_staff_member ~94

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)

NameTypeReqDescription
school_idintegeryes
user_idintegeryes

No output schema declared.

No examples provided.

get_student ~56

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)

NameTypeReqDescription
student_idintegeryes
NameTypeReqDescription
resultyes

No examples provided.

get_student_dashboard ~50

Get student dashboard information including school, grade, classes, and teachers. Args: student_id: Student ID (use list_schools to see available students)

NameTypeReqDescription
student_idintegeryes

No output schema declared.

No examples provided.

invite_parent ~124

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)

NameTypeReqDescription
school_idintegeryes
user_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

link_guardian_to_student ~115

Link an existing guardian to an additional student. Requires PS_ENABLE_WRITES. Existing guardian-student links are left untouched. (Unlinking is a destructive op deferred to the ParentSquare website in v1.) Args: school_id: School ID user_id: Guardian's user ID (from list_parents) student_id: Student ID to link (from list_students)

NameTypeReqDescription
school_idintegeryes
student_idintegeryes
user_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_class_students ~40

List the students enrolled in one class. Args: section_id: Class/section ID (from list_classes)

NameTypeReqDescription
section_idintegeryes
NameTypeReqDescription
resultyes

No examples provided.

list_classes ~129

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")

NameTypeReqDescription
grade
name_contains
school_idintegeryes
NameTypeReqDescription
resultyes

No examples provided.

list_conversations ~80

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)

NameTypeReqDescription
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_files ~41

List files and documents posted for a school. Returns file URLs for download_file. Args: school_id: School ID

NameTypeReqDescription
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_forms ~80

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

NameTypeReqDescription
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_grades ~70

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)

NameTypeReqDescription
school_idintegeryes
NameTypeReqDescription
resultyes

No examples provided.

list_groups ~75

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)

NameTypeReqDescription
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_links ~56

List quick-access links for a school (calendars, menus, forms, etc.). Returns link names and URLs (typically Google Drive or external sites). Args: school_id: School ID

NameTypeReqDescription
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_notices ~43

List alerts and notices for a school (urgent alerts, secure documents, consent forms). Args: school_id: School ID

NameTypeReqDescription
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_parents ~130

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

NameTypeReqDescription
name_contains
school_idintegeryes
student_name_contains
NameTypeReqDescription
resultyes

No examples provided.

list_payments ~61

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

NameTypeReqDescription
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_photos ~62

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)

NameTypeReqDescription
pageinteger
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_polls ~59

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

NameTypeReqDescription
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_school_features ~74

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)

NameTypeReqDescription
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_schools ~64

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).

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultyes

No examples provided.

list_signups ~104

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)

NameTypeReqDescription
pageinteger
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

list_staff ~89

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

NameTypeReqDescription
name_contains
school_idintegeryes
NameTypeReqDescription
resultyes

No examples provided.

list_students ~132

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

NameTypeReqDescription
grade
name_contains
school_idintegeryes
NameTypeReqDescription
resultyes

No examples provided.

list_volunteer_hours ~51

List your logged volunteer hours for a school. Shows each logged entry with month, activity type, notes, and hours. Args: school_id: School ID

NameTypeReqDescription
school_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

move_student_to_class ~197

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)

NameTypeReqDescription
from_section_id
school_idintegeryes
student_idintegeryes
to_section_idintegeryes
NameTypeReqDescription
resultstringyes

No examples provided.

remove_class_staff ~252

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

NameTypeReqDescription
role
section_idintegeryes
user_ids
NameTypeReqDescription
resultstringyes

No examples provided.

remove_class_students ~157

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)

NameTypeReqDescription
school_idintegeryes
section_idintegeryes
student_idsarrayyes
NameTypeReqDescription
resultstringyes

No examples provided.

set_class_visibility ~150

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

NameTypeReqDescription
date
school_idintegeryes
section_idsarrayyes
visiblebooleanyes
NameTypeReqDescription
resultstringyes

No examples provided.

submit_mfa_code ~81

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

NameTypeReqDescription
codestringyes
NameTypeReqDescription
resultstringyes

No examples provided.

Common questions

What is the io.github.thehesiod/psquare MCP server?

io.github.thehesiod/psquare is an MCP server listed in the public MCP registry as io.github.thehesiod/psquare. MCP server for ParentSquare, feeds, calendars, messages, directories, and admin roster tools. This page covers its PyPI package (parentsquare-mcp).

Is the io.github.thehesiod/psquare MCP server safe to use?

io.github.thehesiod/psquare scores 62 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.thehesiod/psquare MCP server expose?

io.github.thehesiod/psquare exposes 48 tools: submit_mfa_code, list_schools, list_school_features, get_feeds, get_post, and 43 more. Their descriptions and schemas cost roughly 5,570 tokens of context every time the server is loaded.

Is the io.github.thehesiod/psquare MCP server still maintained?

io.github.thehesiod/psquare is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.