Skip to main content
Glama

schoolpass-mcp

MCP server for SchoolPass — read AND change your child's school arrival & dismissal from a parent account. Talks to the SchoolPass REST API used by the SchoolPass web and mobile apps, authenticating server-side with your own parent email and password (no browser, no extension).

Developed and maintained by AI (Claude Code). Use at your own discretion.

Parent-scoped: read tools plus a confirm-gated dismissal-change write/cancel.

Tools

Tool

What it does

schoolpass_healthcheck

Reachability + authentication, reported separately.

schoolpass_whoami

The parent identity the server signed in as.

schoolpass_list_students

Your linked students — name, grade, home dismissal location, aftercare.

schoolpass_get_profile

The parent account profile.

schoolpass_list_drivers

Authorized pickup drivers; include_carpool: true adds their carpools (other families' contact/vehicle fields dropped unless view: "full").

schoolpass_get_calendar

A student's arrival/dismissal calendar over a date range.

schoolpass_list_pickup_changes

Pickup/dismissal changes for a student on a date.

schoolpass_list_dismissal_locations

The school's dismissal locations, with ids.

schoolpass_get_school_info

Basic school info and per-school config.

schoolpass_submit_dismissal_change

Submit a dismissal/arrival change (confirm-gated: preview + single-use confirmToken).

schoolpass_cancel_dismissal_change

Cancel a change, back to default (confirm-gated: preview + confirmToken).

Related MCP server: alphaportal-mcp

Configuration

Env var

Required

Notes

SCHOOLPASS_EMAIL

yes

Your SchoolPass parent account email.

SCHOOLPASS_PASSWORD

yes

Your SchoolPass password.

SCHOOLPASS_SCHOOL_CODE

yes

The numeric school id (the AppCode / appCode value; e.g. 1183).

SCHOOLPASS_API_HOST

no

Regional API host override (default busapi-east16-ss.school-pass.net).

MCP_CONFIRM_MODE

no

How the two writes confirm on a client that cannot show a prompt: ask-user (default — preview + token, the user approves in chat), auto (the model may use the token after reviewing the preview), or refuse.

MCP_CONFIRM_TTL_SECONDS

no

How long a confirm token stays valid (default 600).

MCP_CONFIRM_SECRET

no

HMAC key for confirm tokens; set only if tokens must survive a restart. On mcp-host the host supplies a stable per-child key (MCP_HOST_CONFIRM_SECRET) and spent tokens are recorded under MCP_DATA_DIR, so an approval survives an idle restart.

Finding your school id and region host: sign into your school's <school>.school-pass.net portal, open the new SchoolPass app, and read appCode (the id) and apiUrl (the host) from its browser localStorage.

Install

{
  "mcpServers": {
    "schoolpass": {
      "command": "npx",
      "args": ["-y", "schoolpass-mcp"],
      "env": {
        "SCHOOLPASS_EMAIL": "you@example.com",
        "SCHOOLPASS_PASSWORD": "your-password",
        "SCHOOLPASS_SCHOOL_CODE": "1183"
      }
    }
  }
}

Notes

  • Parent scope only. A parent token cannot reach admin routes (visitor management, carline operations, reports, bus routing); those return 403.

  • Never retry a rejected login. SchoolPass fronts its login with reCAPTCHA; repeated failures can get the account challenged. A password SchoolPass refuses (400/401) is tried once per process: later calls return the same error without contacting SchoolPass until the configured credentials change or the server restarts. A CDN/WAF block page (CloudFront, Cloudflare, …) is not a refusal: it is reported as an edge block, never latched, and never spends or discards the stored session.

  • No credentials, still boots. The server starts without configuration and answers tools/list; the config error surfaces on the first tool call.

Without the server: curl

The SchoolPass API is reachable server-side, so a one-off shell read needs no MCP process — see the bundled schoolpass-curl skill (skills/schoolpass-curl/) for a curl + jq recipe set.

Development

npm install
npm test            # tsc typecheck + unit + boot tests
npm run build       # tsc + esbuild bundle
node --env-file=.env scripts/live-check.mjs   # live read-only check (needs .env)

License

MIT

Available Tools

11 tools
schoolpass_cancel_dismissal_changeA
Destructive

Cancel a previously-submitted dismissal/arrival change for a student on a date, returning that date to its default. CONFIRM-GATED: a client that supports MCP elicitation gets a confirmation prompt; otherwise the first call makes NO change and returns a preview (the child by name, the date, the change, the exact request) plus a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). The token is bound to the previewed arguments and to the day as it was read, so a day that changed in between is refused with a fresh preview. Once confirmed it deletes the change and re-reads the calendar to confirm the day is back to default.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe date whose change should be cancelled (YYYY-MM-DD).
student_idYesStudent id (schoolpass_list_students).
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
change_series_idNoWhich change to cancel, when the date carries more than one. Get it from the student calendar (changeSeriesId) or from this tool's preview. Optional when the date has exactly one cancellable change.

TDQS

A4.6/5.0
Behavior5/5

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

Far exceeds the annotations (destructiveHint, non-idempotent, openWorld), which only signal that it mutates. The description discloses the confirm-gating interaction model, that phase 1 makes NO change, the exact preview payload, that the token is bound to the previewed arguments and the day as read, that a changed day is refused with a fresh preview, and that the calendar is re-read afterward to verify the default.

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

Conciseness4/5

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

A single dense paragraph, but the core verb+effect is front-loaded and nearly every clause carries operationally relevant information (confirmation phases, token rules, refusal behavior). It is longer than typical but not padded.

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

Completeness5/5

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

No output schema exists, and the description compensates by specifying what phase 1 returns (child by name, date, change, exact request, confirmToken). For a destructive, confirm-gated mutation with four parameters, nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the 3 baseline applies, but the description adds meaning beyond the field docs: it explains the token's role and binding in the confirmation lifecycle and why change_series_id is needed only when a date carries multiple changes. It does not restate the date/student_id formats, which the schema already covers.

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

Purpose5/5

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

States a specific verb (cancel) and resource (a previously-submitted dismissal/arrival change) plus the effect (returns the date to its default). An agent can immediately distinguish this from the sibling schoolpass_submit_dismissal_change without opening either schema.

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

Usage Guidelines4/5

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

Gives clear when-to-use context and, unusually, explains the two invocation modes (elicitation-capable clients vs. the two-step preview/confirmToken fallback) so the agent knows when a second call is required. It stops short of naming sibling alternatives (e.g. submit_dismissal_change, get_calendar) or stating exclusions.

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

schoolpass_get_calendarA
Read-onlyIdempotent

Get a student’s arrival & dismissal calendar over a date range — the per-day default and any changes. Requires a student id (from schoolpass_list_students). Defaults to today through 14 days out.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.
end_dateNoEnd of range (YYYY-MM-DD). Defaults to 14 days out.
start_dateNoStart of range (YYYY-MM-DD). Defaults to today.
student_idYesStudent id, from schoolpass_list_students.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered; the description's main additions are the default range and the fact that both defaults and changes are returned. It says nothing about pagination, volume of days, auth scope, or how changes are flagged in the response.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and payload scope, then prerequisites and defaults. Every clause carries information; nothing is padding.

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

Completeness4/5

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

With annotations covering the safety profile and no output schema to explain, the description supplies the action, the range default and the param source. It could go further on response shape (how per-day defaults vs changes are represented), but for a read-only lookup it is largely sufficient.

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

Parameters3/5

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

Schema description coverage is 100% — every parameter already documents its format, default and (for view) its trade-offs. The description only restates the student_id source and the date defaults, adding no new semantics beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Get a student's arrival & dismissal calendar') plus the scope of the payload ('the per-day default and any changes'). That content scope distinguishes it from the changes-only sibling schoolpass_list_pickup_changes without needing to name it.

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

Usage Guidelines3/5

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

The description names the prerequisite ('Requires a student id (from schoolpass_list_students)') and the default window, which is useful context, but it never says when to reach for this tool versus schoolpass_list_pickup_changes or the school-info tools. Usage is implied rather than stated.

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

schoolpass_get_profileB
Read-onlyIdempotent

Get the parent account profile (contact details and account settings) for the signed-in parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.

TDQS

B3.4/5.0
Behavior3/5

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

With readOnlyHint, idempotentHint, and openWorldHint already present in annotations, the description does not need to restate safety behavior. It adds a useful scope ('for the signed-in parent') and content expectations, but it does not disclose error behavior, response envelope, or other operational traits beyond the annotations. No contradiction exists.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that packs the action, object, content, and scope without filler. It avoids duplicating schema details or annotation hints.

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

Completeness4/5

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

For a simple optional-parameter read with read-only and idempotent annotations, the definition is largely self-sufficient: the schema fully documents the only parameter)Skip and the description clarifies the resource and scope. It lacks an explicit contrast with schoolpass_whoami and any detail on the response envelope, but these are not critical for making a correct first call.

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

Parameters3/5

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

The schema has 100% parameter description coverage-newline including a detailed explanation of the view enum and its compact/full behavior. The tool description itself adds nothing about the parameter, but the schema already provides the necessary meaning, so the baseline score of 3 applies.

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

Purpose4/5

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

The description uses a specific verb and resource, 'Get the parent account profile', and clarifies the content with '(contact details and account settings)' and the scope 'for the signed-in parent'. It is clear about what the tool returns, though it does not explicitly distinguish itself from the sibling schoolpass_whoami, so agents must infer the boundary between identity and profile.

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

Usage Guidelines2/5

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

There is no statement about when to use this tool versus alternatives such as schoolpass_whoami or schoolpass_list_students. The phrase 'for the signed-in parent' implies a prerequisite, but it does not provide routing guidance, exclusions, or example scenarios.

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

schoolpass_get_school_infoA
Read-onlyIdempotent

Get basic school info and per-school configuration (features enabled, dismissal windows, etc.) for the configured school.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful context by specifying what the response covers (features enabled, dismissal windows, etc.), but it does not disclose response shape, potential variability, or any operational behavior 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.

Conciseness5/5

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

The description is a single sentence that immediately states the tool's purpose and key data contents. It is front-loaded and contains no filler or redundant repetition of the tool name or schema.

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

Completeness4/5

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

For a simple read-only info tool with one optional parameter and no output schema, the description gives sufficient context about what the caller will receive. The 'etc.' is slightly vague, but the examples (features enabled, dismissal windows) give a clear enough sense of scope for an agent to invoke it appropriately.

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

Parameters3/5

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

Schema description coverage is 100%, and the single 'view' parameter is thoroughly documented in the schema itself. The description does not add parameter-level detail, but the baseline of 3 applies because the schema carries the full burden.

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

Purpose5/5

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

The description clearly states a specific verb ('Get') and resource ('school info and per-school configuration'), giving immediate clarity about what the tool does. It also distinguishes itself from the sibling tools by referring to the configured school's general information rather than students, drivers, calendar, or dismissal changes.

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

Usage Guidelines2/5

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

The description gives no direct guidance about when to use this tool versus alternatives. It implies usage through its purpose, but it does not state exclusions, prerequisites, or mention any sibling tool such as schoolpass_healthcheck or schoolpass_whoami.

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

schoolpass_healthcheckA
Read-onlyIdempotent

Check SchoolPass connectivity and authentication. Reports whether the regional API host is reachable (an unauthenticated version probe) and, separately, whether the configured credentials log in — so a network problem is distinguishable from a bad password or school code.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering safety and repeatability. The description adds value by explaining the two-part behavior (unauth probe and credential login), which is not directly implied by the annotations. It doesn't contradict annotations and provides useful context about the checks performed.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core action and purpose. It efficiently conveys the two checks and the rationale without unnecessary fluff. Every word earns its place.

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

Completeness5/5

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

For a tool with no parameters, no output schema, and annotations covering the safety profile, the description is complete. It explains what the tool does, why it's useful, and the distinction it provides. The agent has everything needed to invoke it correctly.

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

Parameters4/5

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

The tool has zero parameters, so the schema provides no parameter documentation. Per rubric, a tool with 0 parameters gets a baseline of 4. The description doesn't need to add parameter meaning since there are none, and it doesn't attempt to invent any.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('Check') and resource ('SchoolPass connectivity and authentication'). It distinguishes two distinct aspects: an unauthenticated version probe for reachability and a credentials login check. This clearly differentiates it from sibling tools like schoolpass_whoami or schoolpass_list_students, which focus on specific data operations.

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

Usage Guidelines4/5

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

The description implies when to use the tool: when needing to diagnose whether network issues versus credential problems are at play. It explicitly states the diagnostic value ('so a network problem is distinguishable from a bad password or school code'). However, it does not name alternatives or explicitly state when not to use this tool, though the context is clear enough for an agent to infer its diagnostic role.

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

schoolpass_list_dismissal_locationsA
Read-onlyIdempotent

List the school’s dismissal locations (car line, bus, aftercare, walkers, etc.) with their ids — the vocabulary a dismissal change refers to.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds the behavioral context that the result serves as the reference vocabulary for dismissal changes, which is valuable beyond the annotations. It also confirms the output includes ids, giving a hint about the return shape.

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

Conciseness5/5

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

One sentence, front-loaded with the core purpose, followed by a clarifying clause about its role in dismissal changes. Every word earns its place; no fluff.

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

Completeness4/5

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

For a simple list tool with no output schema, the description conveys the essential facts: it lists locations and their ids, and it is the vocabulary for dismissal changes. It does not specify the exact response structure, but given the simplicity and the annotations, this is sufficient. It could mention if it returns only active locations, but that is a minor gap.

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

Parameters3/5

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

The single parameter 'view' is fully documented in the input schema with a detailed description of compact vs full behavior. Schema coverage is 100%, so the description does not need to repeat parameter details. The tool description adds nothing about parameters, but the schema carries the load, meeting the baseline.

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

Purpose5/5

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

The description states a specific verb (List) and resource (dismissal locations), and clarifies the output includes ids. It also explicitly ties the tool to the dismissal-change vocabulary, distinguishing it from sibling list tools like list_students or list_drivers.

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

Usage Guidelines4/5

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

The description implies usage context by stating 'the vocabulary a dismissal change refers to', which signals it should be used before submitting or canceling a dismissal change. However, it doesn't explicitly state when not to use it or name alternatives, leaving some inference needed.

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

schoolpass_list_driversA
Read-onlyIdempotent

List the authorized pickup drivers registered on the parent account. Pass include_carpool: true to also get the carpools each belongs to — those records describe OTHER families, so on the default compact view their contact and vehicle fields are dropped (view "full" keeps them).

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.
include_carpoolNoAlso return the carpools each driver belongs to (other families' data). Default false.

TDQS

A4.7/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint and idempotentHint annotations by explaining the default compact view drops contact and vehicle fields for carpool records, that carpool records describe other families, and that view 'full' keeps those fields. This meaningfully informs the agent about response-shape behavior.

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

Conciseness5/5

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

The description is two sentences with no filler. The first sentence states the core purpose immediately; the second packs necessary caveats about include_carpool, other families, and the compact/full view distinction without wasting words.

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

Completeness5/5

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

For a zero-required-parameter list operation with no output schema, this description is complete. It states what is returned, how the optional parameter changes the response, and what the default view strips. An agent can call this tool correctly with the information provided.

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

Parameters4/5

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

The schema already documents both parameters thoroughly, so the baseline is 3. The description adds valuable cross-parameter context by linking include_carpool: true to the carpools returned and explaining how the default compact view affects those carpool records, which the schema does not explicitly state.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'List the authorized pickup drivers registered on the parent account.' This clearly distinguishes the tool from siblings like schoolpass_list_students, schoolpass_list_pickup_changes, and schoolpass_list_dismissal_locations.

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

Usage Guidelines4/5

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

The description provides clear context: this is for retrieving authorized pickup drivers on the parent account. It does not name alternatives or exclusion criteria, but the function and scope are unmistakable, and sibling tool names reinforce when this tool is appropriate.

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

schoolpass_list_pickup_changesA
Read-onlyIdempotent

List pickup / dismissal changes for a student on a given date (defaults to today) — early pickups, late arrivals, carpool moves, and the like. Requires a student id.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate (YYYY-MM-DD). Defaults to today.
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.
student_idYesStudent id, from schoolpass_list_students.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description adds examples of change types and the default date, but does not describe return format, pagination, or other behavioral traits 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.

Conciseness5/5

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

The description is a tight two-part sentence with no wasted words. The scope and examples are front-loaded, and the required parameter note is clearly appended.

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

Completeness4/5

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

For a read-only list tool with a fully documented schema and annotations covering safety, the description is nearly complete. It does not explain the response shape or pagination, but no output schema exists and the parameter schema already covers response-shaping options like view.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents date, view, and student_id semantics thoroughly. The description adds only the date default and the student id requirement, which are already stated in the schema, 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.

Purpose5/5

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

States a clear verb (List) and resource (pickup/dismissal changes), scoped to a student and date. The domain examples (early pickups, late arrivals, carpool moves) make the resource concrete and distinguish it from submit/cancel dismissal change tools.

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

Usage Guidelines3/5

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

The description implies the tool's use case and states that a student id is required, but it gives no explicit when-to-use guidance or alternatives. With sibling tools like submit_dismissal_change and cancel_dismissal_change present, an agent gets only an implied sense of when to list rather than modify.

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

schoolpass_list_studentsA
Read-onlyIdempotent

List the students linked to the parent account: name, grade, home dismissal location, aftercare flag, and per-student details. Defaults to the signed-in parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds a useful behavioral detail: it defaults to the signed-in parent. 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.

Conciseness5/5

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

The description is one efficient sentence that front-loads the core action and key result fields. There is no redundant or filler content.

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

Completeness4/5

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

For a simple read-only list tool with one optional parameter, the description gives the essential result fields and a key default behavior. There is no output schema, but the listed fields provide enough context for an agent to understand what will be returned.

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

Parameters3/5

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

The single parameter is fully documented in the schema, including its enum and detailed explanation of compact vs. full response shapes. The description adds no parameter information, but the schema carries the burden, so baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource: list students linked to the parent account, and names the returned fields. It clearly identifies what the tool does, though it does not explicitly contrast it with sibling tools like schoolpass_list_drivers or schoolpass_list_pickup_changes.

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

Usage Guidelines3/5

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

The intended use is implied by the description: call this when you need a parent's linked students and their details. However, it gives no explicit guidance about when to prefer this over sibling tools or any exclusions.

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

schoolpass_submit_dismissal_changeA
Destructive

Submit a dismissal/arrival change for a student on a single date — send them to a different dismissal location or carpool, mark early dismissal / late arrival / absent, etc. CONFIRM-GATED: a client that supports MCP elicitation gets a confirmation prompt; otherwise the first call makes NO change and returns a preview (the child by name, the date, the change, the exact request) plus a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). The token is bound to the previewed arguments and to the day as it was read, so a day that changed in between is refused with a fresh preview. Once confirmed it submits and then re-reads the calendar to show the change landed (verified:true); if the re-read fails or does not show it yet the result is verified:false — the change WAS submitted, so do not resubmit; re-read the calendar instead. Get student_id from schoolpass_list_students and move_to_id from schoolpass_list_dismissal_locations (a dismissal location id) or the student calendar (a carpool moveToId).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe date to change (YYYY-MM-DD).
notesNoOptional note attached to the change.
ad_typeNoWhich side of the day: arrival, departure (default), or both.departure
move_to_idNoTarget dismissal location id (schoolpass_list_dismissal_locations) or carpool id. Required for carpool and bus moves (enforced); supply it for activity/location moves too.
student_idYesStudent id (schoolpass_list_students).
bus_stop_idNoBus stop id for a bus move. The app sends this field on every submit, but no bus change has been captured live, so its effect is UNVERIFIED — see docs/SCHOOLPASS-API.md.
change_typeYesThe kind of change.
time_of_dayNoOptional time of day for the change (e.g. "14:30").
will_returnNoWhether the student will return the same day (for early dismissal).
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
pickup_dropoff_personNoOptional name of the person picking up / dropping off.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the destructiveHint/openWorldHint annotations: it discloses the elicitation-vs-preview two-step confirmation contract, that phase one makes no change, how the confirmToken is bound to previewed arguments and the day as read, and that a stale day is refused with a fresh preview. It also explains verified:true/false and warns not to resubmit when verification fails.

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

Conciseness4/5

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

Front-loads the purpose and the confirmation model, then the verification semantics, then id sourcing — a logical order with dense, information-bearing sentences. It is long and somewhat repetitious around the confirmToken/verified behavior, but little is pure padding.

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

Completeness5/5

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

For a destructive, open-world mutation with no output schema and 11 parameters, the description covers the full lifecycle: id sourcing, confirmation gating, submission, and post-write re-read verification including the failure interpretation. Nothing essential for correct invocation is missing.

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

Parameters4/5

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

Schema description coverage is already 100%, so the baseline is 3, but the description adds cross-tool provenance for student_id and move_to_id and clarifies confirmToken usage (never on first call, never invented) beyond the schema's note. It does not add syntax detail for the remaining optional fields, which the schema already covers.

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

Purpose5/5

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

States a specific verb+resource (submit a dismissal/arrival change for a student on a single date) and enumerates the concrete change kinds it covers (location, carpool, early dismissal, late arrival, absent). The 'single date' scope distinguishes it from list_pickup_changes and its inverse sibling cancel_dismissal_change.

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

Usage Guidelines4/5

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

Explains the confirm-gated invocation flow in detail and points to the sibling tools that source required ids (schoolpass_list_students for student_id, schoolpass_list_dismissal_locations or the calendar for move_to_id). It does not explicitly state when to prefer this over cancel_dismissal_change or list_pickup_changes, so exclusions are absent.

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

schoolpass_whoamiA
Read-onlyIdempotent

Return the parent account this server is signed in as: member id, user type, and name. Runs the login bootstrap if it has not run yet.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare readOnly, idempotent, and openWorld hints, and the description does not contradict them. It adds meaningful behavioral context by disclosing that it may run the login bootstrap on first use, which an agent would not infer from the 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.

Conciseness5/5

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

The description is two tight sentences: the first states what is returned, and the second discloses the bootstrap side effect. No filler, no repetition of schema data, and the most important information is front-loaded.

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

Completeness5/5

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

For a no-parameter, read-only identity tool, the description is complete: it names the returned fields, references the authentication context, and covers the only relevant behavioral nuance (login bootstrap). The lack of an output schema is mitigated because the return values are explicitly listed.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4 and there is no parameter-description burden to meet. The description wisely focuses on return contents rather than inventing unnecessary parameter detail.

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

Purpose5/5

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

The description clearly names the verb ('Return'), the resource ('the parent account this server is signed in as'), and the exact payload fields (member id, user type, name). This distinguishes it from siblings like get_profile or list_students, since it specifically targets the server's current authenticated identity.

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

Usage Guidelines4/5

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

The context is clear: this is the tool to call when you need the server's signed-in parent identity. It also hints at a bootstrap behavior ('Runs the login bootstrap if it has not run yet'), which gives useful sequencing context. However, it does not explicitly state when not to use it or mention an alternative sibling.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv1.0.6
    • Changedschoolpass_cancel_dismissal_change2 fields changed
      • addedInput schema / properties / date / format
        Added value: +"date"
      • changedInput schema / properties / date / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    • Changedschoolpass_get_calendar4 fields changed
      • addedInput schema / properties / end_date / format
        Added value: +"date"
      • changedInput schema / properties / end_date / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
      • addedInput schema / properties / start_date / format
        Added value: +"date"
      • changedInput schema / properties / start_date / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    • Changedschoolpass_list_pickup_changes2 fields changed
      • addedInput schema / properties / date / format
        Added value: +"date"
      • changedInput schema / properties / date / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    • Changedschoolpass_submit_dismissal_change2 fields changed
      • addedInput schema / properties / date / format
        Added value: +"date"
      • changedInput schema / properties / date / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
  2. 3 tool updatesv1.0.4
    • Changedschoolpass_cancel_dismissal_change3 fields changed
      • changedInput schema / properties / change_series_id / description
        Previous value: -"Which change to cancel, when the date carries more than one. Get it from the student calendar (changeSeriesId) or from this tool's dry-run. Optional when the date has exactly one cancellable change."New value: +"Which change to cancel, when the date carries more than one. Get it from the student calendar (changeSeriesId) or from this tool's preview. Optional when the date has exactly one cancellable change."
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to actually cancel. Without it, returns a preview only.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedschoolpass_list_drivers1 field changed
      • addedInput schema / properties / include_carpool
        Added value: +{
        +  "default": false,
        +  "description": "Also return the carpools each driver belongs to (other families' data). Default false.",
        +  "type": "boolean"
        +}
    • Changedschoolpass_submit_dismissal_change2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to actually submit. Without it, returns a dry-run preview only.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
  3. 11 tool updatesv1.0.0
    • Changedschoolpass_cancel_dismissal_change1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedschoolpass_get_calendar1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedschoolpass_get_profile1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedschoolpass_get_school_info1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedschoolpass_healthcheck1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedschoolpass_list_dismissal_locations1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedschoolpass_list_drivers1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedschoolpass_list_pickup_changes1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedschoolpass_list_students1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedschoolpass_submit_dismissal_change1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedschoolpass_whoami1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  4. 7 tool updatesv0.4.2
    • Changedschoolpass_get_calendar1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedschoolpass_get_profile1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedschoolpass_get_school_info1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedschoolpass_list_dismissal_locations1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedschoolpass_list_drivers1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedschoolpass_list_pickup_changes1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedschoolpass_list_students1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns SchoolPass's payload untouched. No field projection: this server has no verified record of which SchoolPass fields matter, and inventing one would risk dropping a field a caller needs.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
  5. 2 tool updatesv0.3.1
    • Changedschoolpass_cancel_dismissal_change1 field changed
      • addedInput schema / properties / change_series_id
        Added value: +{
        +  "description": "Which change to cancel, when the date carries more than one. Get it from the student calendar (changeSeriesId) or from this tool's dry-run. Optional when the date has exactly one cancellable change.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
    • Changedschoolpass_submit_dismissal_change2 fields changed
      • addedInput schema / properties / bus_stop_id
        Added value: +{
        +  "description": "Bus stop id for a bus move. The app sends this field on every submit, but no bus change has been captured live, so its effect is UNVERIFIED — see docs/SCHOOLPASS-API.md.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • changedInput schema / properties / move_to_id / description
        Previous value: -"Target dismissal location id (schoolpass_list_dismissal_locations) or carpool id. Required for carpool/bus/location moves."New value: +"Target dismissal location id (schoolpass_list_dismissal_locations) or carpool id. Required for carpool and bus moves (enforced); supply it for activity/location moves too."
  6. 11 tool updatesv0.2.0
    • First observedschoolpass_cancel_dismissal_change
    • First observedschoolpass_get_calendar
    • First observedschoolpass_get_profile
    • First observedschoolpass_get_school_info
    • First observedschoolpass_healthcheck
    • First observedschoolpass_list_dismissal_locations
    • First observedschoolpass_list_drivers
    • First observedschoolpass_list_pickup_changes
    • First observedschoolpass_list_students
    • First observedschoolpass_submit_dismissal_change
    • First observedschoolpass_whoami

TDQS

A3.9/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target distinct resources/actions, but there is mild overlap between schoolpass_get_profile and schoolpass_whoami (both describe the signed-in parent) and between schoolpass_get_calendar and schoolpass_list_pickup_changes (both surface dismissal changes). The descriptions distinguish them well enough that misselection is unlikely, but they aren't perfectly orthogonal.

Naming Consistency4/5

All tools share the schoolpass_ prefix and follow a clean verb_noun pattern (get_, list_, submit_, cancel_). The exceptions are schoolpass_healthcheck and schoolpass_whoami, which are conventional but don't match the verb_noun shape, so consistency is high but not perfect.

Tool Count5/5

11 tools is well within the sweet spot for a domain-specific server. Each tool maps to a clear capability (school info, auth check, students, drivers, calendar, changes, profile, identity) and none feel redundant or padded.

Completeness4/5

The set covers the full core lifecycle: identity/auth check, discovery of students/locations/drivers, reading the calendar and changes, and submit/cancel of dismissal changes with verification. Minor gaps exist (e.g. no tool to modify driver/carpool registrations or update profile settings), but the primary parent workflows are complete.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables querying AlphaPortal student information, assigned bus stops, live bus GPS locations, and arrival/departure notifications, with confirm-gated updates to notification preferences and walk-zone radius.
    16
    553 npm
    MIT
  • A
    license
    A
    quality
    F
    maintenance
    Enables Claude to access the ParentSquare school-parent communication platform via its web interface and internal APIs, covering parent features like feeds, calendars, messages, forms, and payments, plus school admin roster management such as students, guardians, classes, and staff.
    48
    1
    MIT