ParentSquare MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ParentSquare MCPWhat's on the school calendar for next week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ParentSquare MCP
An MCP server that gives Claude read access to your own ParentSquare parent account — school posts, calendars, messages, the staff directory, signups, forms, payments and files.
School calendars and flyers are very often posted as image or PDF attachments rather than as calendar entries. This server downloads them and hands them to Claude as real image/text content, so "what's on the school calendar next week?" works even when the calendar itself is empty.
Before you start: how this connects
ParentSquare has no public parent-facing API. Their documented API is district-side, for pushing student data in from an SIS — it is issued to district IT, not to parents, and it is not what you want here. So this server signs in as you and reads the same parent web app you use in a browser.
Two consequences worth knowing up front:
You need to supply your own session. See Authentication.
The page layouts are not a contract. Districts run different versions of the app on different URLs, so there are three layers of defence: every route is a list of candidate paths tried in order; if all of them fail, the section is located by matching its label in your sidebar; and if a parser still finds nothing, it returns the readable page text rather than failing.
scripts/doctor.pyreports what needed which. See Fitting it to your district.
Related MCP server: unofficial-magister-mcp
Install
cd "~/Desktop/ParentSquare MCP"
python3 -m venv .venv
./.venv/bin/python -m pip install -e .Authentication
Method 1 — browser cookie (recommended)
Works with every district, including ones that sign in through Google, Clever or ClassLink, and with two-factor accounts.
Sign in to ParentSquare in your browser.
Open DevTools → Network, click any request to
parentsquare.com.Under Request Headers, copy the entire value of
Cookie:.Put it in
PARENTSQUARE_COOKIE(see Connect it to Claude).
The cookie expires eventually — when tools start reporting that the session expired, repeat this.
Method 2 — email and password
Only works if your district uses a plain ParentSquare password, with no two-factor.
PARENTSQUARE_EMAIL=you@example.com ./.venv/bin/python scripts/login.pyThis caches the session in ~/.parentsquare-mcp/session.json (mode 600). If your district uses SSO
or 2FA, the script says so and points you back to Method 1.
Connect it to Claude
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"parentsquare": {
"command": "/Users/chen/Desktop/ParentSquare MCP/.venv/bin/python",
"args": ["-m", "parentsquare_mcp"],
"cwd": "/Users/chen/Desktop/ParentSquare MCP",
"env": {
"PARENTSQUARE_COOKIE": "_parentsquare_session=…; remember_user_token=…"
}
}
}
}Restart Claude Desktop.
Claude Code
claude mcp add parentsquare \
--env PARENTSQUARE_COOKIE="_parentsquare_session=…" \
-- "/Users/chen/Desktop/ParentSquare MCP/.venv/bin/python" -m parentsquare_mcpIf you used scripts/login.py, the cached session is picked up automatically and you can drop the
env block entirely.
See .env.example for every setting.
Fitting it to your district
Run this once after connecting:
./.venv/bin/python scripts/doctor.pyIt reports, for every section, which URL works and how many rows the parser got:
— routes —
ok feed /feeds
ok directory /directory
NAV payments /school_pay (found via the sidebar)
MISS volunteer_hours (no candidate worked, and no sidebar link matched)
— tools (23 registered) —
ok get_feeds 12 rows
THIN list_signups 0 rows — selectors need work. Source: https://…/signupsNAV — none of the guessed URLs worked, so the server found the section by matching its sidebar label instead. This already works; adding the reported path to
routes.pyjust saves a lookup. Districts re-route these pages constantly, which is why label matching is the safety net.MISS — no URL worked and no sidebar link matched. Open the section in your browser, copy the path from the address bar, and add it to the front of the matching list in
parentsquare_mcp/routes.py. If the sidebar calls it something unusual, adding that word toSECTION_KEYWORDSin the same file fixes it for good.THIN — the page loaded but nothing matched. Ask Claude to call
debug_fetchon that URL to see the real markup, then adjust the selector list at the top of the relevant file inparentsquare_mcp/tools/. The selectors are plain CSS lists, deliberately easy to edit.empty — the page loaded and genuinely has nothing in it. Nothing to fix.
Nothing in the doctor writes to ParentSquare.
Tools
Feed and posts
Tool | What it does |
| Paginated feed: titles, authors, dates, summaries, attachment names. Takes a |
| Full post — body, comments, poll results, signup items, and the contents of attached images and PDFs. |
| Posts from one group. |
Calendar
Tool | What it does |
| Structured events from the ICS feed, recurring events expanded. When empty, explains how to find calendars posted as attachments. |
Communication
Tool | What it does |
| Read message threads. |
| Staff directory: name, role, phone, email, user id. |
| Full profile including office hours and profile photo. |
Media and files
Tool | What it does |
| Photo gallery with image URLs. |
| Shared documents with download URLs. |
| Save any attachment to disk. |
Things to act on
Tool | What it does |
| Sign-ups and RSVPs with progress (e.g. |
| Alerts and secure documents. |
| Polls with vote counts and the leading option. |
| Permission slips, with an outstanding count. |
| Payment items with prices and totals. |
| Logged hours with the total. |
Discovery
Tool | What it does |
| Schools and students, with the ids other tools take. |
| Which sections a school actually has, from its sidebar. |
| Groups with member counts and membership status. |
| Pinned quick links. |
| A student's school, grade, classes and teachers. |
| Escape hatch: fetch any ParentSquare path and see what is really there. |
Nothing here writes to ParentSquare — every tool is read-only against your account. On your own disk,
download_file saves where you ask it to, and get_post saves image-only PDFs (scans, which have no
extractable text) to ~/Downloads/ParentSquare so they are still reachable.
Things to try
What did the school send home this week?
Is there anything I still need to sign or pay for?
The October calendar was posted as a PDF — what days is my kid off?
Who is my son's teacher and what's their email?
Tests
./.venv/bin/python tests/run_all.pyFour suites — parsers, tools over HTTP, a real MCP handshake over stdio, and the authentication paths — all against a fake ParentSquare served on localhost. They never touch the real site, so they are safe to run at any time.
Layout
parentsquare_mcp/
config.py environment settings
client.py auth, HTTP, route fallback, login-bounce detection
routes.py candidate URLs + sidebar keywords ← edit when doctor says MISS
parsers.py shared HTML helpers and the fallback result shape
media.py attachments → images / PDF text
tools/ one module per group of tools ← edit when doctor says THIN
scripts/
login.py cache a session with email + password
doctor.py check routes and tools against your account
tests/Notes
Read-only by design. Nothing posts, replies, signs, pays or RSVPs on your behalf.
Your credentials stay on your machine: in the client config env block, or in
~/.parentsquare-mcp/session.jsonat mode 600.Because it depends on the parent web app's HTML, a ParentSquare redesign can break parsing. That is what
doctor.pyanddebug_fetchare for, and why nothing hard-fails when a selector misses.
Available Tools
23 toolsdebug_fetchFetch a raw ParentSquare pageARead-only
Escape hatch: fetch any ParentSquare path with your session and return its text, or its raw HTML. Use this when another tool reports that nothing matched the expected layout, to work out what the page really looks like — or to reach a section this server has no dedicated tool for.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path or full URL, e.g. "/feeds" or "/schools/123/directory". | |
| limit | No | Maximum characters to return. | |
| raw_html | No | Return raw HTML instead of readable text. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and non-destructive behavior. The description adds that it uses the session, can return raw HTML, and serves as a debug escape hatch for inspecting unexpected layouts. No contradictions, though it doesn't mention potential performance or size implications beyond the limit parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the 'Escape hatch' framing, which immediately conveys the tool's nature. Every word earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With readOnly/openWorld annotations, 100% schema coverage, and an output schema present, the description effectively adds the essential usage context. It covers purpose, when to use, and the raw/text distinction, leaving no significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all three parameters with detailed descriptions, so the description adds little beyond restating that it fetches any path and can return raw HTML. The schema carries the burden, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches any ParentSquare path with the session and returns text or raw HTML. It distinguishes itself from the many sibling tools by positioning as an 'escape hatch' for any path, which is distinct from dedicated resource-specific tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use: 'when another tool reports that nothing matched the expected layout' or 'to reach a section this server has no dedicated tool for.' This gives clear usage context and implicitly names alternatives (dedicated sibling tools) without listing them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_fileDownload a fileA
Download any ParentSquare attachment to disk (default /root/Downloads/ParentSquare) and return the path. Use this for things too large to inline, or when you want to keep a copy.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Attachment URL from get_post, list_files or list_photos. | |
| show | No | Also inline the contents in the reply, if it is readable. | |
| filename | No | Override the saved file name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations state readOnlyHint=false, so a write operation is expected. The description adds useful behavioral details: it downloads to a default directory (/root/Downloads/ParentSquare), returns the path, and implies a size-based rationale. It does not mention overwrite behavior or side effects beyond disk writes, but the annotations already signal non-read-only, and the description adds context beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action and default path, then a concise usage rationale. Every sentence adds value, with no fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters and no output schema, the description covers the core behavior (download to disk, return path) and provides use-case context. It lacks details on error handling or prerequisites (e.g., valid attachment URL), but the schema mentions the URL source, and the tool is simple enough that this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds some context about why to use the tool (large files, keeping a copy) which indirectly relates to the 'show' parameter, but it does not add new semantic meaning to the parameters themselves. The schema already describes all parameters accurately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Download') and resource ('ParentSquare attachment') and clearly states the output (path). It distinguishes itself from inline display by noting it's for things too large to inline or for keeping a copy, which differentiates it from sibling tools like get_post or list_files that provide content access.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: 'Use this for things too large to inline, or when you want to keep a copy.' This indicates when to prefer this tool, but it does not explicitly name an alternative tool or provide exclusion criteria, so it falls slightly 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.
get_calendar_eventsSchool calendar eventsARead-only
Structured calendar events (title, start/end, location, description) from the ParentSquare ICS subscription feed, with recurring events expanded over a date range. Falls back to the HTML calendar view, and when the calendar is empty explains how to find calendars posted as image or PDF attachments instead.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Case-insensitive filter on title, location and description. | |
| days_back | No | How far back to look. | |
| days_ahead | No | How far forward to look. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral details beyond the read-only annotation: recurring events are expanded, there is a fallback to HTML, and empty calendar results trigger explanatory guidance about image/PDF calendars. This is valuable context not available from annotations or schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, using two sentences to convey the core function, source, recurrence handling, fallback behavior, and empty-state guidance. Every clause adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and rich output schema, the description is complete: it identifies the data source, recurrence expansion, date-range behavior, fallback path, and handling of empty results. No critical usage context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with clear descriptions for all three parameters (query, days_back, days_ahead). The description adds little parameter-specific meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves structured calendar events from a specific source (ParentSquare ICS feed) with a scope (date range, recurring events expanded). The verb 'get' plus the resource 'calendar events' is specific and distinguishes this from the broad sibling tool list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when the tool is appropriate: it pulls from the ICS subscription feed and falls back to the HTML calendar view. It also mentions an alternative for calendars posted as image/PDF attachments in empty cases, though it doesn't explicitly exclude other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversationRead a message threadARead-only
Every message in one thread, in order, with senders, timestamps and any attachments.
| Name | Required | Description | Default |
|---|---|---|---|
| conversation_id | Yes | Thread id from list_conversations. | |
| include_attachments | No | Download and inline images/PDFs sent in the thread. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and destructiveHint, so the safety profile is covered. The description adds useful context about ordering and included fields (senders, timestamps, attachments). However, the mention of 'any attachments' is ambiguous given that include_attachments defaults to false, which could mislead about default behavior. It does not describe pagination or return format, but that is secondary for a read-only fetch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the core function, output contents, and ordering. No wasted words, and it provides a clear mental model of the return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose and output, but there are gaps: it does not clarify the role of include_attachments in the output, nor does it mention any limits or structure (though no output schema exists). For a simple read-only thread fetch, this is adequate but not complete enough to fully anticipate behavior without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-specific meaning beyond what the schema provides. It references attachments but not how include_attachments controls them. The schema already explains conversation_id and include_attachments adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('get') and resource ('conversation'), and specifies the scope: 'Every message in one thread, in order, with senders, timestamps and any attachments.' This distinguishes it from siblings like list_conversations (which lists threads) and get_post (which likely gets a single message).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The schema mentions 'Thread id from list_conversations', which implies a prerequisite, but the description itself does not state when to choose this tool or when not to use it. No exclusions or alternative names are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_directoryStaff directoryARead-only
School staff directory as structured rows: name, role/title, phone, email and user id.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Case-insensitive filter on name and role. | |
| school_id | No | Limit to one school (see list_schools). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds the specific output fields but does not disclose additional behaviors such as authentication requirements, pagination, or rate limits. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that efficiently communicates the tool's purpose and output format without extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, with an output schema present, annotations covering safety, and schema descriptions covering parameters. The description explains the return structure adequately. However, it lacks any usage guidance or alternative tool references, which slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'query' and 'school_id' already documented in the schema. The description does not add additional parameter semantics beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a school staff directory as structured rows with specific fields (name, role, phone, email, user id). The verb 'get' combined with 'directory' distinguishes it from sibling tools like get_staff_member, which fetches a single member.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention that get_staff_member is for individual lookup, nor does it explain when to use school_id filtering. This leaves the agent without direction on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feedsBrowse the school feedARead-only
Browse the paginated ParentSquare feed: post titles, authors, dates, summaries, attachment names and links. Use this to find something, then get_post for the full text and attachments.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. | |
| query | No | Case-insensitive filter on title, author, group and summary, applied after fetching. | |
| school_id | No | Limit to one school (see list_schools). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, matching the 'Browse' behavior. The description adds value by noting the pagination and the returned fields (titles, authors, dates, summaries, attachment names/links), which are not in the annotations. No contradiction found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences, with no redundant words. The first sentence states the tool's function and output, while the second gives actionable usage guidance. Every word contributes to clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the presence of an output schema, and strong annotations, the description is complete. It covers the key aspects: what the feed contains, that it is paginated, and the recommended workflow with get_post. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents all three parameters (page, query, school_id) with descriptions, so baseline is 3. The description does not add additional parameter-level meaning beyond what the schema provides, but it doesn't need to given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool browses the paginated ParentSquare feed and lists the specific content returned (titles, authors, dates, summaries, attachments). It distinguishes itself from get_post by explicitly noting that get_post provides full text and attachments, making the purpose and boundary clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: 'Use this to find something, then get_post for the full text and attachments.' This tells the agent when to use get_feeds and when to switch to a sibling tool, satisfying the usage guideline dimension fully.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_group_feedPosts from one groupARead-only
Posts belonging to a specific ParentSquare group (see list_groups for ids).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. | |
| group_id | Yes | Group id from list_groups. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the scoping detail of group-specific feed, but does not describe pagination behavior or return format. This is acceptable given annotations, but no additional behavioral traits are disclosed beyond what the title/schema imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence. It front-loads the core purpose ('Posts belonging to a specific ParentSquare group') and includes a practical pointer to list_groups. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with an output schema and strong annotations, the description covers the essential purpose and ID sourcing. It does not explain pagination, but the schema provides the page parameter details. Overall, it is sufficiently complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both 'group_id' and 'page'. The description adds value by telling users to get group IDs from list_groups, which clarifies the source of the required parameter. Page semantics are left to the schema, which is sufficient given high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves posts for a specific ParentSquare group, with a specific verb ('Posts belonging to') and resource ('group'). It distinguishes itself from siblings like 'get_feeds' by emphasizing 'a specific group' and references 'list_groups' for IDs, removing ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: to get posts for one group, use this tool, and to find group IDs, use list_groups first. It does not explicitly exclude alternatives like get_feeds, but the phrasing 'a specific ParentSquare group' contrasts enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postRead a full postARead-only
Full details for one post: body text, comments, poll results, signup items, and — when include_attachments is on — the contents of attached images and PDFs, so calendars and flyers can be read directly.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Post id from get_feeds. | |
| include_attachments | No | Download and inline images/PDFs attached to the post. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and non-destructive behavior. The description adds valuable context: include_attachments downloads and inlines images/PDFs, so agents know the tool can return binary content directly. This goes beyond the annotation baseline and enriches understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence with a leading core statement, followed by a parenthetical list of content types and a conditional attachment clause. Every phrase contributes to understanding, with no redundancy or irrelevant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two parameters, the description covers all relevant return contents (body, comments, polls, signups, attachments) and clarifies the attachment side effect. No output schema exists, but the description provides a sufficient mental model for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both post_id and include_attachments with descriptions (100% coverage). The description mostly restates the include_attachments behavior without adding new semantics for post_id. Thus a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Full details for one post' and enumerates body text, comments, poll results, signup items, and attachment contents, making both the resource and scope crystal clear. This distinguishes it from sibling list tools like get_feeds or get_group_feed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies use when full details of a single post are needed, including attachment content for readable calendars/flyers. It does not explicitly state alternatives or when-not-to-use, though the context is straightforward and the schema notes post_id comes from get_feeds.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_staff_memberStaff member detailsARead-only
Full profile for one staff member — email, phone, role, office hours — including their profile photo inline.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | User id from get_directory. | |
| include_photo | No | Inline the profile photo. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already specify readOnlyHint=true and destructiveHint=false, so the description only needs to add context beyond those. It does so by enumerating the fields returned (email, phone, role, office hours) and disclosing that the profile photo is included inline, giving a clear picture of the response content without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that packs all key information (resource, fields, photo) without redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only retrieval tool with no output schema, the description adequately communicates the response contents (the listed fields and inline photo). It could specify the return format structure or note what happens if the staff member is not found, but these are minor gaps given the straightforward nature and strong annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both user_id and include_photo having descriptions. The description adds only minimal context about include_photo ('profile photo inline') which is also stated in the schema, so it does not elevate beyond the baseline for fully documented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb phrase 'Full profile for one staff member' and lists concrete fields (email, phone, role, office hours) and inline photo, clearly distinguishing this from sibling tools like get_directory (a list) or get_post (content).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving a single staff member's full profile, but it does not explicitly mention when to use it instead of other directory or profile tools. The schema hints that user_id comes from get_directory, providing indirect guidance, but the description itself lacks direct exclusion or alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_student_dashboardStudent dashboardBRead-only
A student's school, grade, classes and teachers.
| Name | Required | Description | Default |
|---|---|---|---|
| student_id | No | Student id from list_schools. Omit for the default student. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and non-destructive behavior, so the safety profile is clear. The description adds high-level content expectations (school, grade, classes, teachers) but does not provide additional behavioral context such as default-student handling or authentication. It is adequate given the annotations and output schema, and it does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise phrase — 'A student's school, grade, classes and teachers.' — with no filler, redundancy, or unnecessary detail. It is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with one optional parameter, an output schema, and clear annotations, the description provides enough high-level context about the returned data. The optional parameter behavior is delegated to the schema. It could be more explicit about the retrieval action, but it is sufficiently complete for an agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter student_id is fully described in the schema ('Student id from list_schools. Omit for the default student.'), so the description does not need to add parameter-level detail. Since schema coverage is 100%, the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates the tool's resource — a student's school, grade, classes, and teachers — and is distinguishable from sibling tools like list_schools or get_staff_member. However, it is a noun phrase without an explicit verb like 'retrieves' or 'returns', so it does not fully meet the highest bar of a verb-led purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool description provides no guidance on when to use this tool versus alternatives. The only usage hint ('Omit for the default student') lives in the parameter schema, not the description. There is no mention of exclusions, prerequisites, or sibling comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversationsList message threadsARead-only
Direct-message threads: who they are with, subject, last-message preview and unread state.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds behavioral context by specifying the output fields (who, subject, last-message preview, unread state) and that it's a list of DM threads. This goes beyond what annotations convey, earning a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that clearly communicates the resource and key attributes. No wasted words, perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional param, no required params, output schema present, annotations present), the description is sufficient. It conveys the purpose, scope, and output content, making it complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'page' is fully described in the schema (page number, 1-based). The tool description does not add additional parameter semantics beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: listing direct-message threads with specific fields (who, subject, last-message preview, unread state). It distinguishes itself from siblings like get_conversation (which likely retrieves a single thread) and other list_* tools by specifying DM threads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 this tool (to get an overview of DM threads) but doesn't explicitly mention alternatives or exclusions. Given the sibling tools, it's implied that get_conversation is for individual thread detail, but this isn't stated explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesList filesARead-only
Documents the school has shared — handbooks, menus, forms, newsletters — with download URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Case-insensitive filter on file name. | |
| school_id | No | Limit to one school (see list_schools). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, which cover safety and result completeness. The description adds context about the content (school documents) and the inclusion of URLs, which is useful but does not go beyond what annotations already imply. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core purpose and uses an em-dash list of examples for clarity. Every word contributes value; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values. The tool is simple (2 optional parameters, read-only, open-world), and the description sufficient for an agent to know when and why to use it. Annotations and schema round out the full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both query and school_id fully described in the input schema. The description itself adds no parameter-level detail. Per the baseline rule for high schema coverage, a score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies that this tool returns a list of school-shared documents (handbooks, menus, forms, newsletters) with download URLs. The verb is implied by the tool name and the phrasing 'Documents the school has shared' unambiguously conveys a listing action, distinguishing it from sibling tools like download_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use the tool: to retrieve shared school documents of various types. It implicitly differentiates from download_file by mentioning download URLs, and from list_links/list_forms by listing typical document types. However, it does not explicitly name alternatives or state when not to use it, so it does not reach the highest bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_formsList formsARead-only
Permission slips and signable forms, with whether each one is still outstanding.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that outstanding status is included, but does not elaborate on ordering, pagination, or other behavioral aspects. This is a minimal addition beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence that immediately states the resource and key attribute. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with an output schema and strong annotations, the description is sufficiently complete. It conveys the essential subject matter without needing to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is 100%. The baseline of 4 applies because there are no parameter semantics to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists permission slips and signable forms, with a specific detail about outstanding status. This distinguishes it from sibling list_* tools like list_notices or list_polls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: the user would call this when needing forms. However, no explicit guidance on when to use this versus alternatives, nor any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_groupsList groupsARead-only
ParentSquare groups — classes, clubs, committees — with member counts and whether you are a member.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Case-insensitive filter on group name and description. | |
| school_id | No | Limit to one school (see list_schools). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is clear. The description adds context about return fields (member counts, membership) but does not disclose any behavioral traits like pagination, rate limits, or side effects. This is acceptable given the strong annotations, but adds limited behavioral value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the resource, scope, and key output fields without any fluff or repetition. Every word contributes to clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 comprehensive parameter descriptions in the schema, the description is adequately complete. It clarifies the domain (ParentSquare groups) and highlights notable return data, which is sufficient for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (query and school_id), so the schema fully documents them. The description does not add any parameter-specific meaning beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists ParentSquare groups, with specific subtypes (classes, clubs, committees) and key output fields (member counts, membership status). This specific verb+resource+detail distinguishes it from sibling list tools like list_schools or list_links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its usage: it is for listing groups. However, it does not explicitly mention when to use it versus alternatives, nor does it provide exclusions or prerequisites. The context is clear but no explicit guidance is given, so 'implied usage' applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linksList quick linksARead-only
Quick-access links the school has pinned — Google Drive folders, lunch menus, external sites.
| Name | Required | Description | Default |
|---|---|---|---|
| school_id | No | Limit to one school (see list_schools). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's a safe read. The description adds the 'pinned' scope and examples of link types, but does not disclose ordering, pagination, or other behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with examples, no wasted words. However, it is a noun phrase rather than an explicit action, but it remains concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter, an output schema, and safety annotations, the description plus structured data is sufficient. No critical missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for school_id ('Limit to one school (see list_schools)'). The tool description adds no additional parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as school-pinned quick links (Drive, lunch menus, external sites), which differentiates it from other list_* tools. The verb 'list' appears only in the title, but the description's content makes the operation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool vs other list tools. The description only explains what the links are, not usage context. The optional school_id parameter is documented in the schema but not highlighted in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_noticesList noticesARead-only
Alerts, urgent notices and secure documents sent to your account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds context about content type but reveals no additional behavioral traits (e.g., auth requirements, ordering, response size). It neither contradicts annotations nor provides further transparency beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise phrase that directly conveys what the tool returns. Every word contributes meaning, with no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with an output schema and safety annotations, the description sufficiently communicates the tool's purpose. It does not include extra details like caveats or alternate notes, but none are critical for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers parameter semantics (100% coverage). The description does not need to explain parameters, earning the baseline score of 4 for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the resource (alerts, urgent notices, secure documents) and distinguishes it from sibling list tools (e.g., list_polls, list_forms). However, the verb 'list' is not explicitly stated in the description, relying on the tool name and title for action clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention any exclusions or preferred contexts, leaving the agent to infer usage solely from the resource type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_paymentsList paymentsARead-only
Payment items and fees with prices, plus totals for what is due and what is paid.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and destructiveHint=false, covering the safety profile. The description adds that the tool returns both line items (with prices) and summary totals, giving useful insight into the response structure beyond what annotations state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that avoids redundancy. It communicates the core contents (items, fees, totals) without any fluff or over-explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple, parameterless read-only tool with an output schema provided. The description sufficiently conveys what is returned (payments, fees, totals) and needs no extra context for an AI agent to invoke it correctly, especially given the strong annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the input schema is trivially 100% covered. The description doesn't need to explain parameters; it inherently adds no parameter semantics. Per the rubric, zero params yields a baseline score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns payment items and fees with prices plus totals for due and paid amounts. This specific content distinguishes it from other list_* siblings (e.g., list_notices, list_polls) and aligns with the name 'list_payments'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and description—it's a read-only listing for payment data—but there is no explicit statement of when to use it versus alternatives or exclusions. The description doesn't mention scenarios like checking outstanding balances or interacting with a specific payment context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_photosList photosARead-only
Photos and photo albums shared by the school, with direct image URLs. Pass a URL to get_post's attachments or download_file to save one.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. | |
| school_id | No | Limit to one school (see list_schools). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe read-only operation. The description adds that output consists of direct image URLs and that these are intended for use with get_post or download_file, which is useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief with no redundant words, but the first sentence is a fragment ('Photos and photo albums...') rather than a complete sentence, which slightly reduces structural clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with two optional parameters and an output schema, the description covers the core purpose and gives actionable integration advice. It does not mention pagination or sorting, but the schema and output schema likely cover those.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema (page, school_id), and the description does not add any additional parameter-specific meaning. Since schema coverage is 100%, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('photos and photo albums shared by the school') and notes they come with direct image URLs, but it uses a noun phrase rather than an explicit verb like 'lists'. The title 'List photos' supplies the action, and the mention of downstream use in get_post/download_file distinguishes it from generic file listing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage tip about passing URLs to get_post or download_file, but it never states when to choose this tool over siblings like list_files or get_post, nor does it mention any exclusions. Usage context is implied by the resource type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pollsList pollsARead-only
Polls with their options, vote counts and the option currently in the lead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a read-only, open-world operation. The description adds context about the returned data structure (options, vote counts, leading option) but does not disclose any pagination, ordering, or filtering behavior. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence that is easily skimmable and front-loaded with the core content. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters), the presence of an output schema, and read-only annotations, the description sufficiently conveys what the tool returns. It doesn't need to explain return values in depth because the output schema handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the description has no parameter meanings to explain. The empty input schema is fully covered, and the description appropriately focuses on the return value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates this tool returns polls with their options, vote counts, and leading option, but it lacks an explicit verb phrase, relying on the title/name for the action. It differentiates from sibling tools by focusing on poll-specific data, though no direct comparison is made.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. The description implies it is used to retrieve poll data, but does not mention any exclusions or alternative tools for filtering or other poll-related queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_school_featuresSections available for a schoolARead-only
Which ParentSquare sections a school actually has — parsed from its sidebar — so you know whether to bother with polls, payments, volunteer hours and so on.
| Name | Required | Description | Default |
|---|---|---|---|
| school_id | No | School id from list_schools. Omit for the default view. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive. The description adds the behavioral detail that the sections are 'parsed from its sidebar', and emphasizes the actual state rather than assumed defaults, which is contextual beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the purpose and includes concrete examples. Every word contributes value, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, an output schema exists (so return values don't need description), and the description explains the core purpose and use case. It does not enumerate all possible sections, but gives sufficient examples to infer the output. A small gap is that it doesn't explicitly say the output is a list of section names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with a single optional school_id parameter well-documented in the schema ('School id from list_schools. Omit for the default view'). The description does not add parameter-specific meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the ParentSquare sections a school actually has, parsed from its sidebar. It uses a specific verb 'list' and resource 'sections', and distinguishes itself from sibling list tools by focusing on feature availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'so you know whether to bother with polls, payments, volunteer hours and so on' implies usage before calling feature-specific list tools like list_polls or list_payments. However, it does not explicitly name the alternative tools or provide when-not-to-use conditions, so it's clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schoolsList schools and studentsARead-only
The schools and students attached to your account, with their ids. Most other tools accept a school_id — start here to get one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint false, covering safety. The description adds context about account scoping ('attached to your account') and the practical need for the returned IDs, which is useful behavioral information beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero wasted words. The first sentence states what the tool returns, and the second gives usage context. Information is front-loaded and directly relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no params, no nested objects), and an output schema exists. The description fully covers the tool's purpose, account scoping, and the practical reason to call it. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is 100% by default. The description adds no parameter-specific details, but none are needed. Baseline for zero parameters is 4, and the description does not introduce ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the schools and students attached to the account, including their IDs. It also distinguishes itself from sibling tools by explicitly noting that most other tools accept a school_id, making this the entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Most other tools accept a school_id — start here to get one.' This tells the agent exactly when to use this tool (first, to obtain a school_id) and implies it is a prerequisite for other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_signupsList signups and RSVPsARead-only
Open sign-ups, RSVPs and volunteer slots, with progress like "53/103 Items" so you can see what still needs filling.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only and non-destructive. The description adds useful context about the scope (only open sign-ups) and the output structure (progress counts), going beyond what annotations alone convey. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with a concrete example. Every word contributes value, and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only list tool with an output schema and clear annotations, the description provides sufficient context for an agent to select and invoke it. It explains the tool's purpose and expected output without needing extra details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the schema fully covers parameter semantics. The baseline of 4 applies, and the description need not add parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists open sign-ups, RSVPs, and volunteer slots, and even includes the progress format ('53/103 Items'). This verb+resource combination distinguishes it from sibling list tools like list_polls or list_forms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: seeing what still needs filling in signups/RSVPs/volunteer slots. However, it does not explicitly contrast with related sibling tools such as list_volunteer_hours or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_volunteer_hoursList volunteer hoursARead-only
Volunteer hours logged on your account, with the total.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=true and destructiveHint=false. The description adds that the result includes the total, which is a minor behavioral detail. It doesn't disclose further behavior like pagination or filtering, but for a 0-param read-only tool, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that is front-loaded with the verb and resource. Every word adds value; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no parameters and good annotations. The output schema exists, so return values need not be detailed in the description. The description adequately captures the tool's purpose and scope for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the input schema is trivially complete. Per rubric, 0 params gives a baseline of 4, and the description needn't add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'list' with resource 'volunteer hours' and scoping 'on your account', and notes it includes the total. This clearly distinguishes it from sibling list tools like list_notices or list_payments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: to see volunteer hours logged on your account, including total. However, it provides no explicit guidance on when to use this tool vs alternatives, or when not to use it. No alternatives are mentioned.
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.
23 tool updates
v0.1.0- First observed
debug_fetch - First observed
download_file - First observed
get_calendar_events - First observed
get_conversation - First observed
get_directory - First observed
get_feeds - First observed
get_group_feed - First observed
get_post - First observed
get_staff_member - First observed
get_student_dashboard - First observed
list_conversations - First observed
list_files - First observed
list_forms - First observed
list_groups - First observed
list_links - First observed
list_notices - First observed
list_payments - First observed
list_photos - First observed
list_polls - First observed
list_school_features - First observed
list_schools - First observed
list_signups - First observed
list_volunteer_hours
TDQS
Scored across 23 tools
Each tool targets a distinct resource or action: feeds, posts, notices, polls, forms, payments, volunteer hours, schools, groups, calendar, conversations, directory, photos, files, and signups. Even similar tools like get_feeds, get_group_feed, and get_post are clearly separated by list vs. single and group filtering, leaving no ambiguity.
The naming follows a strong list_<resource> / get_<resource> pattern with consistent snake_case. Exceptions like download_file and debug_fetch are action-oriented but still use the verb_noun convention. Minor inconsistency: get_calendar_events returns a list despite using 'get', but overall patterns are predictable.
23 tools is on the higher side, but each maps to a distinct ParentSquare data type or action, and none seem redundant. The count feels justified given the broad scope of features covered, from feeds and forms to directory and file downloads. It is slightly heavy but well-scoped.
The set covers the major read/query surfaces of ParentSquare comprehensively, including posts, groups, events, conversations, directory, media, and documents. The inclusion of download_file and debug_fetch fills gaps for attachments and unknown layout issues. Missing write operations (e.g., creating posts or signing up) suggest an intentional read-only focus, so the surface is quite complete for that purpose.
Maintenance
Related MCP Connectors
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Holiday photo MCP server: list and fetch personal holiday photos inline in Claude chat.
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables Claude to access ParentSquare school-parent communication platform, including feeds, calendar, conversations, and media files.488MIT
- AlicenseAqualityDmaintenanceAn MCP server for accessing Dutch school schedules from Magister. Enables Claude and other MCP-compatible AI assistants to query school schedules, drop-off times, and pick-up times.49 npm3MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that gives Claude Desktop access to school data from Studie+ (Danish school platform), enabling queries about schedules, homework, assignments, and files directly in chat.MIT
- AlicenseAqualityFmaintenanceMCP server that connects Claude to Edupage, a school information system used across Europe. Provides access to timetables, grades, homework, messages, students, teachers, and more.251GPL 3.0