mcpField
S
schoolpass-mcp

schoolpass-mcp

Local
github.com/chrischallProductivity0Updated 3d ago

About schoolpass-mcp

schoolpass-mcp is an MCP server for SchoolPass parent accounts, with read access to student, pickup-calendar, and school information plus confirmed arrival or dismissal changes. Writes require a preview and confirmation token.

Key features

  1. 01View linked students and parent profile
  2. 02Read arrival and dismissal calendars
  3. 03List drivers and pickup changes
  4. 04Retrieve school details and dismissal locations
  5. 05Submit or cancel confirmed schedule changes

Use cases

  1. 01Check a child's arrival and dismissal plans for a date range
  2. 02Review authorized drivers and school pickup locations
  3. 03Change or cancel a day's pickup arrangement

MCP support

The MCP server exposes read tools for a SchoolPass parent account and confirmation-token-gated tools for changing or canceling arrival and dismissal plans.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"chrischall-schoolpass": {
"command": "npx",
"args": [
"-y",
"schoolpass-mcp"
],
"env": {
"SCHOOLPASS_EMAIL": "<SCHOOLPASS_EMAIL>",
"SCHOOLPASS_PASSWORD": "<SCHOOLPASS_PASSWORD>",
"SCHOOLPASS_SCHOOL_CODE": "<SCHOOLPASS_SCHOOL_CODE>",
"SCHOOLPASS_API_HOST": "<SCHOOLPASS_API_HOST>",
"SCHOOLPASS_TIMEZONE": "<SCHOOLPASS_TIMEZONE>",
"SCHOOLPASS_SESSION_CACHE": "<SCHOOLPASS_SESSION_CACHE>",
"SCHOOLPASS_SESSION_FILE": "<SCHOOLPASS_SESSION_FILE>"
}
}
}
}
Run commandnpx -y schoolpass-mcp
Environment variables to set
SCHOOLPASS_EMAILYour SchoolPass parent account email address.
SCHOOLPASS_PASSWORDSecretYour SchoolPass parent account password.
SCHOOLPASS_SCHOOL_CODEThe numeric school id (AppCode) SchoolPass uses to select your school.
SCHOOLPASS_API_HOSTOptional regional API host override (default busapi-east16-ss.school-pass.net).
SCHOOLPASS_TIMEZONEThe school's IANA timezone (e.g. America/New_York), used for the "today" default of the calendar and pickup-change reads. Defaults to the server's local zone; set it when the server runs elsewhere (a hosted server runs in UTC, so evening defaults would otherwise point at tomorrow).
SCHOOLPASS_SESSION_CACHESet to false to disable the on-disk session cache and re-authenticate on every process start. Defaults to enabled.
SCHOOLPASS_SESSION_FILEAbsolute path for the session cache file. Defaults to $MCP_DATA_DIR/.schoolpass-mcp/session.json.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npmschoolpass-mcp1.0.10

Tools

11

Saved tool list · updated 2w ago

This tool takes no parameters.

Details

From the project README

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

ToolWhat it does
schoolpass_healthcheckReachability + authentication, reported separately.
schoolpass_whoamiThe parent identity the server signed in as.
schoolpass_list_studentsYour linked students — name, grade, home dismissal location, aftercare.
schoolpass_get_profileThe parent account profile.
schoolpass_list_driversAuthorized pickup drivers; include_carpool: true adds their carpools (other families' contact/vehicle fields dropped unless view: "full").
schoolpass_get_calendarA student's arrival/dismissal calendar over a date range.
schoolpass_list_pickup_changesPickup/dismissal changes for a student on a date.
schoolpass_list_dismissal_locationsThe school's dismissal locations, with ids.
schoolpass_get_school_infoBasic school info and per-school config.
schoolpass_submit_dismissal_changeSubmit a dismissal/arrival change (confirm-gated: preview + single-use confirmToken).
schoolpass_cancel_dismissal_changeCancel a change, back to default (confirm-gated: preview + confirmToken).

Configuration

Env varRequiredNotes
SCHOOLPASS_EMAILyesYour SchoolPass parent account email.
SCHOOLPASS_PASSWORDyesYour SchoolPass password.
SCHOOLPASS_SCHOOL_CODEyesThe numeric school id (the AppCode / appCode value; e.g. 1183).
SCHOOLPASS_API_HOSTnoRegional API host override (default busapi-east16-ss.school-pass.net). Must be an https *.school-pass.net host — the password is sent there, so http:// or any other domain is refused.
SCHOOLPASS_TIMEZONEnoThe school's IANA timezone (e.g. America/New_York), used for the "today" default of the calendar and pickup-change reads. Defaults to the server's local zone; set it when the server runs elsewhere (a hosted server runs in UTC, so evening defaults would otherwise point at tomorrow).
MCP_CONFIRM_MODEnoHow 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_ELICITATIONnooff never shows a confirmation prompt, so every client gets the MCP_CONFIRM_MODE behaviour. Set it for a client that says it can show prompts but never does (the write hangs — opencode 2.0.x). Default on; any other value is treated as on, with a warning on stderr.
MCP_CONFIRM_TTL_SECONDSnoHow long a confirm token stays valid (default 600).
MCP_CONFIRM_SECRETnoHMAC 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": "[email protected]",
        "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

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.