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, with their carpools.

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, dry-run preview).

schoolpass_cancel_dismissal_change

Cancel a change, back to default (confirm-gated).

Related MCP server: vklass-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).

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.

  • 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

Cancel a previously-submitted dismissal/arrival change for a student on a date, returning that date to its default. CONFIRM-GATED: without confirm:true it looks up the change and returns a preview of what would be cancelled, making no change. With confirm:true 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).
confirmNoMust be true to actually cancel. Without it, returns a preview only.
student_idYesStudent id (schoolpass_list_students).
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 dry-run. Optional when the date has exactly one cancellable change.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only mark readOnlyHint=false and openWorldHint=true, so the description carries the burden of explaining actual behavior. It does this well: without confirm:true it only previews, with confirm:true it deletes the change and re-reads the calendar to verify the default state. No contradiction with 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 compact, front-loaded with the core purpose, and then explains the two-mode behavior in a clear, structured way. Every sentence earns its place and there is no redundant filler.

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

Completeness5/5

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

Despite having no output schema, the description explains what happens in both invocation modes: preview without confirmation, and deletion plus calendar re-read with confirmation. The schema covers required and optional parameters, making this sufficiently complete for correct tool selection and invocation.

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

Parameters4/5

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

The input schema already documents all four parameters with strong descriptions, giving a high baseline. The description adds meaningful behavioral semantics around the confirm flag and the overall cancellation effect, though it does not add much parameter-level detail beyond the schema.

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

Purpose5/5

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

The description uses a specific verb ('Cancel') with a clear resource: a previously-submitted dismissal/arrival change for a student on a date. It also states the outcome ('returning that date to its default'), which distinguishes it from related submission tools.

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 clearly identifies when this tool applies: after a dismissal/arrival change has been submitted, and it explains the confirm-gated workflow. It does not explicitly name sibling alternatives or exclusion conditions, but 'previously-submitted' plus 'cancel' gives strong contextual guidance.

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

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint and idempotentHint, lowering the burden. The description adds useful behavior beyond annotations: it confirms the response includes per-day defaults and changes, and it names the required input dependency (student id from schoolpass_list_students). It does not describe response format or edge cases, but the annotation coverage makes this acceptable.

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

Conciseness5/5

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

Three short sentences front-load the operation, then add the prerequisite and defaults. There is no filler, no repetition of schema details, and every clause 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 read-only tool with a fully documented schema, the description supplies everything needed to invoke it correctly: operation, resource, required parameter source, defaults, and the nature of returned data. Even without an output schema, the high-level return content is described well enough. Sibling differentiation is implicitly clear from names.

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 baseline is 3. The description only restates the default date range already captured in the parameter descriptions ('Defaults to today through 14 days out'). It adds no new meaning beyond what the schema provides.

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 ('Get'), resource ('a student’s arrival & dismissal calendar'), and scope ('over a date range'), and clarifies content ('per-day default and any changes'). This clearly distinguishes it from sibling tools like schoolpass_list_pickup_changes and schoolpass_list_dismissal_locations. The description is unambiguous despite the missing title.

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

Usage Guidelines4/5

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

Gives a clear prerequisite ('Requires a student id (from schoolpass_list_students)') and default date window ('today through 14 days out'), which tells an agent when and how to call it. It does not explicitly name alternatives or exclusion cases, but the purpose statement defines the use case relative to siblings. Not a 5 because 'when-not-to-use' is not addressed.

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

schoolpass_get_profileA
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

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, and the description's 'Get' is consistent with these. The description adds some context about the data being returned but does not disclose additional behavioral details such as auth requirements or response envelope 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 a single, focused sentence that states the action, resource, and audience without waste. It is immediately understandable and contains no redundant clauses.

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 getter with rich annotations and a fully documented parameter schema, the description supplies enough context about what is returned ('contact details and account settings'). It does not define the response shape in detail, but the view parameter and openWorldHint partially cover that, and no complex behavior is missing.

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% description coverage for the single parameter, including a detailed explanation of 'compact' vs 'full' and the open-world caveat. The tool description itself adds no parameter information beyond the schema, so a baseline 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?

The description uses a specific verb ('Get') and resource ('parent account profile'), and further specifies the contents ('contact details and account settings') and scope ('for the signed-in parent'). This clearly distinguishes it from siblings like schoolpass_get_school_info or schoolpass_list_students.

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

Usage Guidelines3/5

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

The description implies the tool is appropriate when retrieving the signed-in parent's own profile data. However, it does not explicitly state when to prefer this over schoolpass_whoami or other account-related tools, and no alternatives or exclusions are mentioned.

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.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the read-only nature is covered. The description adds the domain content returned, but it does not disclose behavioral details like authentication needs, failure modes, or response variability beyond what annotations already imply.

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 with no filler. Every phrase adds useful information about the resource and scope, and it does not repeat the title or schema 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?

Given the simple optional-parameter interface and rich annotations, the description is mostly complete: it states the resource type and examples of what is returned. It could be slightly more explicit about the response scope or how 'configured school' is determined, but the schema covers the view behavior.

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 'view' parameter is thoroughly documented with its compact/full distinction and the caveat about no field projection. The description itself adds no parameter-level 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.

Purpose5/5

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

The description uses a specific verb and resource: 'Get basic school info and per-school configuration' for the configured school. It names concrete contents such as 'features enabled, dismissal windows', which clearly separates it from siblings like schoolpass_get_calendar or schoolpass_list_students.

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

Usage Guidelines3/5

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

The phrase 'for the configured school' implies when this tool is relevant, but the description does not explicitly say when to use it versus alternatives or mention exclusions. The use case is inferable from the resource name, but no routing guidance is provided.

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.7/5.0
Behavior5/5

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

The description discloses that the tool performs two separate probes: an unauthenticated version probe for reachability and a credential login check. This goes beyond the annotations (readOnlyHint, openWorldHint, idempotentHint) which only indicate safety. It adds valuable context about the tool's behavior, explaining how it differentiates network versus auth failures. No contradiction with 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 concise—two sentences—with the primary purpose stated upfront. It efficiently conveys the two checks and their diagnostic value without any wasted words. The structure is clear and 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?

Given no parameters, no output schema, and annotations covering safety, the description is complete for an agent to understand what the tool does and what to expect (a report of connectivity and auth status). It explains the distinction between network and credential issues, which is sufficient for a healthcheck tool. No missing critical information.

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?

There are zero parameters, so the description has no need to explain parameter meanings. The provided description covers the tool's operation without referencing parameters, and the baseline for 0 parameters is 4. It adds nothing about parameters because there are none, which 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?

The description clearly states the tool's purpose: checking SchoolPass connectivity and authentication. It specifies the resource (regional API host) and the two distinct checks (unauthenticated version probe and credential login), which distinguishes it from sibling tools that perform data operations. The verb 'check' and the named resources make the purpose unambiguous.

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

Usage Guidelines4/5

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

The description implicitly indicates that this tool is for diagnosing connectivity and authentication issues, but it does not explicitly state when to prefer it over alternatives or mention any exclusions. It explains that it distinguishes network problems from bad credentials, which hints at its diagnostic use case, but lacks direct guidance like 'use when troubleshooting connection errors'.

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.1/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 that the locations serve as the vocabulary for dismissal changes, which is useful semantic context. It does not disclose ordering, whether inactive locations are included, or whether the list is exhaustive, but for a simple read-only catalog with no required parameters this is a minor gap.

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?

A single well-structured sentence that front-loads the action and resource, provides illustrative examples, and ends with a meaningful purpose clause. No filler or redundant restating of the tool name.

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, read-only list tool with rich annotations and a fully documented view parameter, the description is complete. It explains what the tool returns (locations with IDs), why the caller would want it (dismissal-change vocabulary), and the annotation set covers safety and idempotency. No output schema is needed for such a straightforward list.

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 only parameter, view, has a detailed schema description explaining the compact/full response shapes. The tool description does not need to add parameter-level detail; its mention of 'ids' is the only extra semantic hint. Baseline 3 is appropriate because the schema carries the load.

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

Purpose5/5

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

The description uses a specific verb ('List') and a precise resource ('the school’s dismissal locations'), gives concrete examples of location types, and clarifies that IDs are included. It also frames the result as 'the vocabulary a dismissal change refers to', which distinguishes this reference-data tool from sibling tools like submit_dismissal_change or 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?

The phrase 'the vocabulary a dismissal change refers to' gives strong contextual guidance: an agent should call this when it needs location IDs to construct or interpret a dismissal change. It does not explicitly name an alternative tool or an exclusion condition, but the usage context is clear enough from the sibling names.

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, optionally including the carpools each belongs 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.3/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 useful context: the data scope (parent account) and the optional carpool enrichment. No behavior contradicts the annotations, and the added scoping is genuinely informative beyond the structured metadata.

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?

A single sentence that front-loads the core action and resource, then adds the optional carpool detail. There is no filler, redundancy, or unnecessary elaboration. It earns its place efficiently.

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 read-only list operation with one optional, well-documented parameter and no output schema, the description supplies the essential facts: what is listed, whose account scope applies, and the optional carpool inclusion. Nothing critical is missing for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema's view parameter is thoroughly documented with enum values and behavior. The tool description itself adds no parameter-level detail beyond mentioning optional carpool inclusion, which is plausibly tied to the view parameter but not explicitly. Baseline 3 is appropriate given full schema coverage.

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

Purpose5/5

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

The description uses a specific verb ('List') and names a precise resource: authorized pickup drivers registered on the parent account. It also signals the optional carpool inclusion, which helps distinguish it from sibling tools like schoolpass_list_students 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 Guidelines4/5

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

The description clearly scopes the tool to parent-account authorized pickup drivers and mentions the optional carpool behavior. It does not explicitly name alternatives or state when not to use it, but the context is clear enough that an agent can infer 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, openWorldHint, and idempotentHint, and the description's verb 'List' aligns with those. The description adds the default-date behavior and mentions the required student id, but it does not disclose other behavioral traits such as response shape (though the 'view' parameter in schema covers that) or any limits. No contradiction exists, but the description adds limited value 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.

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the primary action and scope. It includes the default date and a prerequisite without any extraneous wording, earning every character.

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 straightforward read-only list operation with three parameters (all covered by schema) and no output schema, the description conveys the essential purpose and the student-id requirement. The 'view' parameter in the schema explains response shape alternatives, so the lack of return-structure detail in the description is partly mitigated. It could mention that the result is a list or note pagination, but that is a minor gap given the simple nature of the tool.

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 all three parameters (date, view, student_id) are already documented in the schema. The description only restates that a student id is required, which is redundant. It does not clarify or enrich parameter meaning beyond the schema, so a baseline 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?

The description uses a specific verb ('List') with a clear resource ('pickup / dismissal changes') and scope ('for a student on a given date'). It also enumerates example change types (early pickups, late arrivals, carpool moves), making the purpose unambiguous and distinct from the sibling submit/cancel 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 a read-only listing use case and notes a prerequisite ('Requires a student id'), but it does not explicitly contrast with sibling tools like schoolpass_submit_dismissal_change or schoolpass_cancel_dismissal_change. There is no direct 'when to use' or 'when not to use' guidance beyond the implied read nature.

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

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, so the safety profile is covered. The description adds behavioral context beyond these: it specifies the default scope (signed-in parent) and the type of fields returned, which is valuable. No contradictions with annotations are present.

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 redundancy. The primary purpose and scope are front-loaded, and every clause adds information. No filler or 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?

Given the simplicity (one optional parameter, no output schema), the description is largely complete. It covers the resource, scope, and key fields. Minor gaps include a lack of detail on what 'per-student details' entails and any error conditions, but these are not critical for a read-only list operation.

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% because the only parameter (view) is fully documented in the input schema, explaining the compact vs full shapes and the rationale for no field projection. The tool description adds no parameter-specific guidance, so the schema carries the entire burden. Baseline 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?

The description clearly states the verb (List), the resource (students linked to the parent account), and enumerates the returned fields (name, grade, home dismissal location, aftercare flag, per-student details). It also clarifies the default scope (signed-in parent), making the tool's purpose unambiguous and distinct from siblings like list_drivers or 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 Guidelines4/5

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

The description provides clear context that this tool lists students for the signed-in parent, which implies it is the go-to for student roster information. However, it does not explicitly state when to prefer it over alternatives or when not to use it, leaving some inference to the agent.

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

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: without confirm:true it makes no change and returns a dry-run preview of the exact request. With confirm:true it submits and then re-reads the calendar to show the change landed. 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
confirmNoMust be true to actually submit. Without it, returns a dry-run preview only.
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).
pickup_dropoff_personNoOptional name of the person picking up / dropping off.

TDQS

A4.7/5.0
Behavior5/5

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

The description prominently discloses the confirm-gated behavior: without confirm:true it is a no-op dry-run, and with confirm:true it submits and re-reads the calendar to verify the change. This goes well beyond the sparse annotations (readOnlyHint: false, openWorldHint: true) and warns the agent about the actual mutating workflow.

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 dense sentences with information front-loaded: purpose first, then confirm-gating behavior, then ID sourcing guidance. Every clause adds decision-relevant information, and there is no filler or repetition of schema details.

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

Completeness5/5

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

Despite having 11 parameters and no output schema, the description covers the key non-obvious behaviors: dry-run confirmation, submission verification by re-reading the calendar, and ID provenance for the two most ambiguous parameters. The remaining parameter details are fully documented in the schema, so nothing critical is missing for an agent to call the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents every parameter. The description adds valuable semantic context beyond the schema by explaining where to obtain student_id and move_to_id, and by disambiguating move_to_id as either a dismissal location id or a carpool moveToId. This helps the agent choose the correct value without opening the referenced tool definitions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Submit a dismissal/arrival change for a student on a single date.' It also enumerates concrete use cases such as changing dismissal location, carpool, early dismissal, late arrival, and absence. The tool's name and sibling list (especially schoolpass_cancel_dismissal_change) make its distinct role as a submitter clear.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool and provides cross-tool guidance by pointing to schoolpass_list_students and schoolpass_list_dismissal_locations for IDs. It does not explicitly state 'use schoolpass_cancel_dismissal_change for cancellations,' but the sibling naming and 'Submit' framing make the intended usage inferable.

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.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds a non-obvious side effect: 'Runs the login bootstrap if it has not run yet.' This is valuable beyond the annotations and 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.

Conciseness5/5

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

Two tightly worded sentences with no filler. The core purpose and output fields are front-loaded, and the side-effect note is appended efficiently.

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

Completeness5/5

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

For a zero-parameter, no-output-schema identity tool, the description is complete: it states the returned data, the account scope, and the bootstrap behavior. An agent has enough context 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 and schema coverage is 100%, so there is nothing to document. The description correctly avoids param talk, and the baseline for zero-param tools applies.

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

Purpose5/5

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

The description uses a specific verb ('Return') and identifies the exact resource ('parent account this server is signed in as') with the output fields (member id, user type, name). This clearly differentiates it from sibling tools like schoolpass_get_profile, which likely target other entities.

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

Usage Guidelines3/5

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

The description implies usage for retrieving the current signed-in parent identity, but it does not explicitly state when to prefer this over siblings like get_profile or list_students. The 'whoami' branding makes the purpose inferable, yet no exclusions or alternative guidance is provided.

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. 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"
        +}
  2. 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."
  3. 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

A4.1/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct resource or action: calendar, pickup changes, dismissal locations, school info, change submission/cancellation, healthcheck, account identity, students, profile, and drivers. No two tools have overlapping purposes, and descriptions clearly differentiate them.

Naming Consistency4/5

Tools follow a consistent 'schoolpass_' prefix with verb_noun structure (get_calendar, list_students, cancel_dismissal_change). Minor exceptions like healthcheck and whoami deviate from the verb_noun pattern but are still intuitive and consistent in style.

Tool Count5/5

11 tools is well-scoped for a parent-facing school management server. Each tool addresses a specific need (viewing, submitting, cancelling, listing, account info) without redundancy or bloat.

Completeness4/5

The toolset covers core parent workflows: viewing calendars, listing students/drivers/profile, submitting and cancelling dismissal changes, and checking connectivity. Minor gaps exist (e.g., no driver creation/editing, no profile updates) but these are likely outside the intended scope.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables guardians to securely query read-only Vklass data such as children, news, calendar entries, assignments, grades, meals, and notifications through MCP, with per-user BankID and OAuth 2.1 authentication.
    MIT
  • 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.
    15
    224 npm
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    Provides read-only access to Librus parent account data for multiple children, enabling retrieval of grades, attendance, timetable, calendar, homework, announcements, messages, and attachments via MCP.
    11
    -